Optimization 如何在具有求和功能的cplex中包含带有决策变量的if语句

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); }如果约束为真,则可以使用逻辑约束添加额外成

如何转换约束部分中包含决策变量的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);

}

如果约束为真,则可以使用逻辑约束添加额外成本

让我更改以下内容:

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]是决策变量