首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPLEX C++常量约束

CPLEX C++常量约束
EN

Stack Overflow用户
提问于 2020-07-22 19:12:36
回答 1查看 120关注 0票数 1

我正在用C++做一个CPLEX模型,我需要一个类似这样的函数:

代码语言:javascript
复制
IloConstraint f(...){
  IloConstraint constr;
        
  if(condition1){
    constr = (x+y >= 1);
    return constr;
  }
          
  if(condition2){
    constr = false;
    return constr;
  }
        
  constr = true;
  return constr;
}

我认为我成功地创建了一个真和假的约束

代码语言:javascript
复制
constr = (x==x);  and
constr = IloNot(x==x);

我认为这种方法并不是最优的,因为它增加了额外的条件和变量。有没有更优化、更具可读性的方法呢?就像这样

代码语言:javascript
复制
constr = IloConstraint(IloFalse); ?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 19:29:18

IloConstraint(IloFalse)将不起作用,因为这将被解释为IloConstraint((IloConstraintI*)0) (IloFalse仅扩展为文字0(零)),这将创建一个没有实现的约束。

没有真或假约束的文字。如果您执行类似于IloExpr(env, 1) == IloExpr(env, 1)的操作(对于false约束使用!= ),则可以不使用额外的变量。常量true约束的另一种选择是使用空IloAnd或空IloOr

然而,对我来说,只使用x == x1 >= 2或类似的东西似乎更具可读性。附加的表达式通常不会造成问题。引擎将在预处理过程中删除这些内容。

另一种选择是使用IloCplex::ifThen()创建条件约束。也许这比返回约束的函数更具可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63032893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档