optimization - 如何在具有求和功能的 cplex 中包含带有决策变量的 if 语句
问题描述
如何在具有决策变量的约束部分转换 If 语句。costvship 是装运的可变成本,仅当 sum(m in M)x[m][n]*h[p][n]*weight[m] 大于阈值权重时才需要包括在内。这里 x[m][n] 和 h[p][n] 是二进制变量。
forall(p in P, n in N){costship[p][n] == costfship*z[p][n] + costvship*(sum(m in M)(x[m][n]*h[m][p]*weight[m])- Weight);
}
解决方案
如果约束为真,您可以使用逻辑约束来添加额外成本。
让我更改动物园示例以表明:
int nbKids=300;
float costBus40=500;
float costBus30=400;
int penalty=1000;
dvar int+ nbBus40;
dvar int+ nbBus30;
minimize
costBus40*nbBus40 +nbBus30*costBus30 + (nbBus40+nbBus30<=8)*penalty;
subject to
{
40*nbBus40+nbBus30*30>=nbKids;
}
你也可以用 sum 写
int nbKids=300;
{int} sizes={40,30};
float costBus[sizes]=[500,400];
int penalty=1000;
dvar int+ nbBus[sizes];
minimize
sum(s in sizes)costBus[s]*nbBus[s] + (sum(s in sizes) nbBus[s]<=8)*penalty;
subject to
{
sum(s in sizes)s*nbBus[s]>=nbKids;
}
推荐阅读
- php - preg_match 匹配一个以 all 开头和结尾的单词
- node.js - ts-node-dev 遇到错误:“找不到模块'typescript'”
- spring-mvc - tomcat 和 springMVC
- node.js - TypeError:无法读取未定义的属性“角色” - 输入被错误读取
- python - 在 python 中拟合 SARIMA 模型时如何包含常量/截距
- rust - 生命周期阻碍状态机返回到最近的状态
- angular - 看不到值来自服务的变量的出价
- java - java的标准网络API与netty有何不同?
- postgresql - 我正在尝试从表中提取国家信息,但无法在 postgresql 中进行
- webauthn - WebAuthn 身份验证器证明响应 id 和 rawId