CPLEX 拒绝在给定等式约束的情况下找到解
CPLEX refuses to find solution given equality constraint
我有一个涉及连续变量和二元变量的问题。创建完 objective 函数后,我添加了导致 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:objective 中的 Q 不是半正定的
我是优化方面的大菜鸟。我该如何处理这个问题?如果 CPLEX 为我做尽可能多的数学运算,我更愿意(也许您可以建议一些神奇的命令)。
最终形式的约束更加复杂,因此简单的变量松弛(如此处 http://orinanobworld.blogspot.com/2010/10/binary-variables-and-quadratic-terms.html 所示)将不起作用。完全定义问题中的约束看起来像这样:
a = b + c + d + 二进制 * f - (1-二进制)*g
其中 a – g 是连续变量。
任何帮助将不胜感激。
Cplex 可以处理凸 MIQP(二次 objective)和 MIQCP(二次约束)问题。它还可以处理非凸 MIQP(通过参数 SolutionTarget
)。我们留下了二次约束的非凸问题,它无法处理。
幸运的是,我们总能将二进制变量和连续变量的乘积线性化。对 Paul Rubin 博客的引用实际上会起作用。 (Here 是另一个食谱)。
为此替换你的:
a = b + c + d + binary * f - (1-binary)*g
来自
a = b + c + d + binary * f - g + z
z = binary*g
其中 z
是另一个连续变量。等式
z = binary*g
可以直接线性化
我有一个涉及连续变量和二元变量的问题。创建完 objective 函数后,我添加了导致 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:objective 中的 Q 不是半正定的
我是优化方面的大菜鸟。我该如何处理这个问题?如果 CPLEX 为我做尽可能多的数学运算,我更愿意(也许您可以建议一些神奇的命令)。
最终形式的约束更加复杂,因此简单的变量松弛(如此处 http://orinanobworld.blogspot.com/2010/10/binary-variables-and-quadratic-terms.html 所示)将不起作用。完全定义问题中的约束看起来像这样:
a = b + c + d + 二进制 * f - (1-二进制)*g
其中 a – g 是连续变量。
任何帮助将不胜感激。
Cplex 可以处理凸 MIQP(二次 objective)和 MIQCP(二次约束)问题。它还可以处理非凸 MIQP(通过参数 SolutionTarget
)。我们留下了二次约束的非凸问题,它无法处理。
幸运的是,我们总能将二进制变量和连续变量的乘积线性化。对 Paul Rubin 博客的引用实际上会起作用。 (Here 是另一个食谱)。
为此替换你的:
a = b + c + d + binary * f - (1-binary)*g
来自
a = b + c + d + binary * f - g + z
z = binary*g
其中 z
是另一个连续变量。等式
z = binary*g
可以直接线性化