【发布时间】:2017-07-13 08:05:00
【问题描述】:
我遇到了一个涉及连续变量和二进制变量的问题。完成创建目标函数后,我会添加导致 CPLEX 无法找到解决方案的约束。请让我知道我做错了什么。
IloNumExpr cbin1 = cplex.prod(EB_s[a-1],binHandelSprzedaj[a-1]);
cplex.addEq(EB[a],cbin1);
"binHandelSprzedaj" 是二进制变量数组。 "EB_s" 和 "EB" 是连续 cplex 浮点变量的数组。
如果我输入“EB_s[a-1]”或“binHandelSprzedaj[a-1]”而不是“cbin1”,则代码有效。我认为这是因为我最终得到了二次约束。然而,CPLEX 提供的一个示例“QCPex1”提供了具有“不太相等”的二次约束的解决方案,并且代码看起来与我编写的非常相似。我不明白为什么我的代码不起作用。是因为约束是二次的,还是因为它是二元和连续变量的混合,或者是“相等”类型的约束。
收到错误消息:CPLEX 错误 5002:目标中的 Q 不是半正定的
我在优化方面是个大菜鸟。我该如何处理这个问题?如果 CPLEX 为我做尽可能多的数学运算,我会更喜欢(也许你可以建议一些神奇的命令)。
其最终形式的约束更加复杂,因此简单的变量松弛(如这里所介绍的http://orinanobworld.blogspot.com/2010/10/binary-variables-and-quadratic-terms.html)将不起作用。完全定义的问题中的约束看起来像这样:
a = b + c + d + 二进制 * f - (1-二进制)*g
其中 a – g 是连续变量。
任何帮助将不胜感激。
【问题讨论】:
标签: optimization mathematical-optimization cplex