我在使用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);
非常感谢您的帮助。
谢谢
最佳答案
像以前一样尝试呼叫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()
的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);
它与我的例子一起工作。