C++ 如何将条件约束转换为concert C++;为cplex?
我用IBMILOGCPLEX optimization Studio编写了一个模型,使用OPL进行线性规划。但现在我需要用C++C++编写相同的模型。但我无法转换我的约束条件 我的一个限制条件如下: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
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。