在CPLEX中使用IloRange定义约束时出错(c ++)

时间:2016-06-13 07:08:29

标签: c++ constraints cplex

我在使用IloRange编写约束时遇到问题。没有编译错误,但代码没有运行。

在代码中,ad_sales.u_j [j]是一个变量,而demand [j]和lambda [j]是参数。我用于ILoRange的语法是ilorange(env,下限,变量,上限)。

我需要找到一组约束的对偶,这就是我切换到IloRange的原因。如果我使用以下命令而不是Ilorange,代码运行正常。

for(IloInt j=0; j<data.n; j++)
model_ad.add(ad_sales.u_j[j] <= demand[j]*lambda[j]);

但是以下不起作用:

IloRangeArray cons(env, data.n); 
for(IloInt j=0; j<data.n; j++)
{
    cons.add(IloRange(env, 0, ad_sales.u_j[j],demand[j]*lambda[j]));
    //model_ad.add(cons[j]);
}
model_ad.add(cons);

非常感谢帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

尝试像以前一样调用IloExpr,即

IloRangeArray cons(env, data.n); 
for(IloInt j=0; j<data.n; j++) {
    cons.add(d_sales.u_j[j] <= demand[j]*lambda[j]);
}
model_ad.add(cons);

问题在于IloRange期待IloNumExprArg,而不仅仅是IloNumVar

修改

add()的{​​p} IloModel方法需要IloExtractableArray。我尝试将约束对象添加到IloRangeArray并收到no matching function for call to ‘IloRangeArray::add(IloConstraint&)’错误消息。我建议使用IloConstraintArray,例如

IloConstraintArray cons(env); 
for(IloInt j=0; j<data.n; j++) {
    cons.add(d_sales.u_j[j] <= demand[j]*lambda[j]);
}
model_ad.add(cons);

它适用于我的例子。