Optimization 如何在具有求和功能的cplex中包含带有决策变量的if语句
如何转换约束部分中包含决策变量的If语句。成本是装运的可变成本,只有当总和(m单位m)x[m][n]*h[p][n]*重量[m]大于阈值重量时,才需要包含该成本。这里x[m][n]和h[p][n]是二进制变量Optimization 如何在具有求和功能的cplex中包含带有决策变量的if语句,optimization,cplex,opl,Optimization,Cplex,Opl,如何转换约束部分中包含决策变量的If语句。成本是装运的可变成本,只有当总和(m单位m)x[m][n]*h[p][n]*重量[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); }如果约束为真,则可以使用逻辑约束添加额外成
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;
}
int=300;
浮动成本总线40=500;
浮动costBus30=400;
整数罚款=1000;
dvar int+nbBus40;
dvar int+nbBus30;
减少
costBus40*nbBus40+nbBus30*costBus30+(nbBus40+nbBus30=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;
}
int=300;
{int}大小={40,30};
浮动costBus[尺寸]=[500400];
整数罚款=1000;
dvar int+nbBus[尺寸];
减少
大小总和costBus[s]*nbBus[s]+(大小总和nbBus[s]=nbKids;
}
Sir在我的问题中,我必须使用if语句,该语句包含决策变量中to的乘法项if{sum(m in m)x[m][n]*h[p][n]*weight[m]>weight,然后考虑cvship
如何在CPLEX中编写该语句,其中x[m][n]是决策变量