CPLEX C++ 常量约束
CPLEX C++ constant constraint
我正在用 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); ?
IloConstraint(IloFalse)
将不起作用,因为这将被解释为 IloConstraint((IloConstraintI*)0)
(IloFalse
只是扩展为文字 0(零)),这将创建一个没有实现的约束。
没有用于真或假约束的文字。如果您执行 IloExpr(env, 1) == IloExpr(env, 1)
之类的操作(并且 !=
用于 false 约束,则可以不使用额外变量。常量 true 约束的另一种选择是使用空 IloAnd
或空 IloOr
.
但是,仅使用 x == x
、1 >= 2
或类似的东西对我来说似乎更具可读性。附加表达式通常不会造成问题。引擎将在预处理中删除那些。
另一种选择是使用 IloCplex::ifThen()
创建条件约束。也许这比 returns 约束的函数更具可读性。
我正在用 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); ?
IloConstraint(IloFalse)
将不起作用,因为这将被解释为 IloConstraint((IloConstraintI*)0)
(IloFalse
只是扩展为文字 0(零)),这将创建一个没有实现的约束。
没有用于真或假约束的文字。如果您执行 IloExpr(env, 1) == IloExpr(env, 1)
之类的操作(并且 !=
用于 false 约束,则可以不使用额外变量。常量 true 约束的另一种选择是使用空 IloAnd
或空 IloOr
.
但是,仅使用 x == x
、1 >= 2
或类似的东西对我来说似乎更具可读性。附加表达式通常不会造成问题。引擎将在预处理中删除那些。
另一种选择是使用 IloCplex::ifThen()
创建条件约束。也许这比 returns 约束的函数更具可读性。