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

C++ 如何将条件约束转换为concert C++;为cplex?,c++,linear-programming,cplex,C++,Linear Programming,Cplex,我用IBMILOGCPLEX optimization Studio编写了一个模型,使用OPL进行线性规划。但现在我需要用C++C++编写相同的模型。但我无法转换我的约束条件 我的一个限制条件如下: forall(i in Nodes) edgeSum[i]: if(i==0) sum (j in Ein[0])x[<j,i>] - sum (j in Eout[0])x

我用IBMILOGCPLEX optimization Studio编写了一个模型,使用OPL进行线性规划。但现在我需要用C++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;
forall(节点中的i)
edgeSum[i]:
如果(i==0)
和(j在Ein[0])x[]-和(j在out[0])x[]=-1;
否则,如果(i>=1&&i尝试以下操作

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
  }
}

for(i=0;我想知道你的答案)还有一个约束条件:forall(在Cedges:i!=0)connectivity[]:(x[]==1)=>sum(j在Parents[i]中)x[]==1;我把它改写为:for(int i=1;i<(edgesize*2)+1;i++{if(Parents[Cedges[(i)][0]!=0&(i[0]!=0){model.add[Cedges[i][0]][Cedges[i][1]]==1,(x[index[parents[Cedges[i][0]]]][Cedges[i][0]]]]==1));}我需要知道这个用法是否正确。现在没有时间检查,但是你可以做的事情是:现在没有时间检查,但是你可以做的事情是从一个小到足以理解的简单问题实例开始:(1)将模型输出为LP文件或类似文件,并检查其是否合理(即约束中包含正确的变量,具有合理的系数)(2)如果您知道小情况下的答案,请检查它(3)对于一个你很熟悉的问题,尝试添加额外的约束,这会故意破坏模型。因此,如果你知道答案中的值应该为零,那么尝试添加约束以强制它为1。