我正在用C++做一个CPLEX模型,我需要一个类似这样的函数:
IloConstraint f(...){
IloConstraint constr;
if(condition1){
constr = (x+y >= 1);
return constr;
}
if(condition2){
constr = false;
return constr;
}
constr = true;
return constr;
}我认为我成功地创建了一个真和假的约束
constr = (x==x); and
constr = IloNot(x==x);我认为这种方法并不是最优的,因为它增加了额外的条件和变量。有没有更优化、更具可读性的方法呢?就像这样
constr = IloConstraint(IloFalse); ?发布于 2020-07-23 19:29:18
IloConstraint(IloFalse)将不起作用,因为这将被解释为IloConstraint((IloConstraintI*)0) (IloFalse仅扩展为文字0(零)),这将创建一个没有实现的约束。
没有真或假约束的文字。如果您执行类似于IloExpr(env, 1) == IloExpr(env, 1)的操作(对于false约束使用!= ),则可以不使用额外的变量。常量true约束的另一种选择是使用空IloAnd或空IloOr。
然而,对我来说,只使用x == x、1 >= 2或类似的东西似乎更具可读性。附加的表达式通常不会造成问题。引擎将在预处理过程中删除这些内容。
另一种选择是使用IloCplex::ifThen()创建条件约束。也许这比返回约束的函数更具可读性。
https://stackoverflow.com/questions/63032893
复制相似问题