在 CPLEX 中使用 IloRange 定义约束时出错 (c++)
Error in defining constraints using IloRange in CPLEX (c++)
我在使用 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);
它适用于我的例子。
在遇到这个问题和相当多的调试之后,我发现了这个问题(至少就我的情况而言)。
问题是,IloRangeArray cons(env, data.n);
似乎用data.n
"空"IloRange
对象填充cons
。(通过"空",我的意思是根据调试器,对象在那里,但其_impl
字段设置为 null)。
因此,当调用 cons.add(...)
时,它会附加到这些现有的空约束中。这意味着你最终会得到一堆空的 IloRange 对象,然后是你添加的实际约束。
这会弄乱对model_ad.add(cons);
的调用并导致分段错误(至少在我的情况下)。
溶液
什么对我有用:在不设置 size 参数的情况下声明IloRangeArray
,即使用:
IloRangeArray cons(env);
而不是
IloRangeArray cons(env, data.n);
希望这对任何未来的读者有所帮助。
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- PrintWindow函数在notepad.exe中出错