如何将条件约束转换为cplex的C ++?

时间:2014-04-13 15:15:51

标签: c++ linear-programming cplex

我使用OPL进行线性规划,使用IBM ILOG Cplex优化工作室编写了一个模型。但现在我需要使用Concert c ++编写相同的模型。但我无法转换我的约束。

我的一个限制如下:

forall(i in Nodes)
           edgeSum[i]:                
              if(i==0)
                sum (j in Ein[0])x[<j,i>] - sum (j in Eout[0])x[<i,j>] == -1;
              else if (i>=1 && i<n/2)
                sum (j in Ein[i])x[<j,i>] - sum (j in Eout[i])x[<i,j>] == 0;     
             else 
               sum (j in Ein[i])x[<j,i>] <= 1;

特别是我需要知道如何编写条件约束。 谢谢你的进步。

1 个答案:

答案 0 :(得分:1)

尝试类似

的内容
for (i=0; i<numNodes; i++)
{
  if (i == 0)
  {
    IloExpr expr1(env);
    for (j=0; j<numIn[0]; j++)
      expr1 += x[EInIndex[0][j]];
    IloExpr expr2(env);
      expr2 += x[EOutIndex[0][j]];
    model.add(expr1 - expr2 == -1);
  }
  else if ((i >= 1) && (i < n/2))
  {
    // etc
  }
  else
  {
   // etc
  }
}

我只是从记忆中做到了这一点,所以语法可能会受到一些损害,而且我还没有填写所有案例的所有细节 - 他们应该可以使用类似的结构。我也可能破坏了你的索引 - 不确定你是如何在你的C ++代码中重新构建切片方法的,所以我根据之前的做法猜测了一下。此外,我没有命名约束 - 也可以轻松添加。查看CPLEX提供的一些C ++示例。

希望这有点帮助