【问题标题】:CPLEX refuses to find solution given equality constraintCPLEX 拒绝在给定等式约束的情况下找到解
【发布时间】: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


    【解决方案1】:

    Cplex 可以处理凸 MIQP(二次目标)和 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
    

    可以直接线性化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多