CPLEX 无法求解 Gurobi 可以求解的 .lp 文件
CPLEX cannot solve an .lp file that Gurobi can
我正在 CPLEX 12.8.0 上使用混合整数二次规划 (MIQP),PythonAPI。我为 .lp 文件生成了一个模型。事实证明该模型是整数不可行的。这很奇怪,因为我之前用 Gurobi 产生了完全相同的问题并且它是可以解决的。
我已将 link 附加到此处的 .lp 文件以及使用 CPLEX 和 Gurobi 求解的结果。我声明了一些半连续变量。我的 objective 函数是二次函数,但我不认为这是导致整数不可行的原因,不是吗?最后,我真的很想在我的工作中使用 CPLEX,因为 CPLEX 可以做一些 Gurobi 做不到的功能。
.lp 文件:
Minimize
obj: - wi0k0 - wi1k0 - wi2k0 - wi3k0 - wi0k1 - wi1k1 - wi2k1 - wi3k1 + [ m0 ^2
+ m1 ^2 + 1.54315034142201 loss0 ^2 + 1.54315034142201 loss1 ^2
+ 1.54315034142201 loss2 ^2 + 1.54315034142201 loss3 ^2 ] / 2
Subject To
c1i0k0: - 2.98563348744947 zi0k0 - ti0k0 <= 0
c2i0k0: - 1.33632173341833 zi0k0 + ti0k0 <= 0
c3i0k0: m0 + 1.33632173341833 zi0k0 - ti0k0 <= 1.33632173341833
c4i0k0: - m0 + 2.98563348744947 zi0k0 + ti0k0 <= 2.98563348744947
c5i0k0: - 2.30258509299405 zi0k0 - wi0k0 <= 0
c6i0k0: 0.22314355131421 zi0k0 + wi0k0 <= 0
c7i0k0: v0 - 0.22314355131421 zi0k0 - wi0k0 <= -0.22314355131421
c8i0k0: - v0 + 2.30258509299405 zi0k0 + wi0k0 <= 2.30258509299405
c1i1k0: - 2.98563348744947 zi1k0 - ti1k0 <= 0
c2i1k0: - 1.33632173341833 zi1k0 + ti1k0 <= 0
c3i1k0: m0 + 1.33632173341833 zi1k0 - ti1k0 <= 1.33632173341833
c4i1k0: - m0 + 2.98563348744947 zi1k0 + ti1k0 <= 2.98563348744947
c5i1k0: - 2.30258509299405 zi1k0 - wi1k0 <= 0
c6i1k0: 0.22314355131421 zi1k0 + wi1k0 <= 0
c7i1k0: v0 - 0.22314355131421 zi1k0 - wi1k0 <= -0.22314355131421
c8i1k0: - v0 + 2.30258509299405 zi1k0 + wi1k0 <= 2.30258509299405
c1i2k0: - 2.98563348744947 zi2k0 - ti2k0 <= 0
c2i2k0: - 1.33632173341833 zi2k0 + ti2k0 <= 0
c3i2k0: m0 + 1.33632173341833 zi2k0 - ti2k0 <= 1.33632173341833
c4i2k0: - m0 + 2.98563348744947 zi2k0 + ti2k0 <= 2.98563348744947
c5i2k0: - 2.30258509299405 zi2k0 - wi2k0 <= 0
c6i2k0: 0.22314355131421 zi2k0 + wi2k0 <= 0
c7i2k0: v0 - 0.22314355131421 zi2k0 - wi2k0 <= -0.22314355131421
c8i2k0: - v0 + 2.30258509299405 zi2k0 + wi2k0 <= 2.30258509299405
c1i3k0: - 2.98563348744947 zi3k0 - ti3k0 <= 0
c2i3k0: - 1.33632173341833 zi3k0 + ti3k0 <= 0
c3i3k0: m0 + 1.33632173341833 zi3k0 - ti3k0 <= 1.33632173341833
c4i3k0: - m0 + 2.98563348744947 zi3k0 + ti3k0 <= 2.98563348744947
c5i3k0: - 2.30258509299405 zi3k0 - wi3k0 <= 0
c6i3k0: 0.22314355131421 zi3k0 + wi3k0 <= 0
c7i3k0: v0 - 0.22314355131421 zi3k0 - wi3k0 <= -0.22314355131421
c8i3k0: - v0 + 2.30258509299405 zi3k0 + wi3k0 <= 2.30258509299405
c9k0: - pi0 + omk0j1 + omk0j2 + omk0j3 + omk0j4 = 0
c10k0: - v0 + 5.78057663816274 omk0j1 - 2.88064275681032 gk0j1
+ 2.81415134341597 omk0j2 - 2.06487580075496 gk0j2
+ 1.87716609698306 omk0j3 - 1.64323243986015 gk0j3
+ 1.41062901675158 omk0j4 - 1.35164676471547 gk0j4 = 0
c11k0: gk0j1 + gk0j2 + gk0j3 + gk0j4 = 1
c12k0j1: - omk0j1 + 0.1 gk0j1 <= 0
c13k0j1: omk0j1 - 0.275 gk0j1 <= 0
c12k0j2: - omk0j2 + 0.275 gk0j2 <= 0
c13k0j2: omk0j2 - 0.45 gk0j2 <= 0
c12k0j3: - omk0j3 + 0.45 gk0j3 <= 0
c13k0j3: omk0j3 - 0.625 gk0j3 <= 0
c12k0j4: - omk0j4 + 0.625 gk0j4 <= 0
c13k0j4: omk0j4 - 0.8 gk0j4 <= 0
c14k0: - 4 pi0 + zi0k0 + zi1k0 + zi2k0 + zi3k0 = 0
c15k0: 1.33632173341833 zi0k0 - ti0k0 - 1.17708699624777 zi1k0 - ti1k0
- 2.28656128473847 zi2k0 - ti2k0 - 2.98563348744947 zi3k0 - ti3k0
= 0
c1i0k1: - 2.98563348744947 zi0k1 - ti0k1 <= 0
c2i0k1: - 1.33632173341833 zi0k1 + ti0k1 <= 0
c3i0k1: m1 + 1.33632173341833 zi0k1 - ti0k1 <= 1.33632173341833
c4i0k1: - m1 + 2.98563348744947 zi0k1 + ti0k1 <= 2.98563348744947
c5i0k1: - 2.30258509299405 zi0k1 - wi0k1 <= 0
c6i0k1: 0.22314355131421 zi0k1 + wi0k1 <= 0
c7i0k1: v1 - 0.22314355131421 zi0k1 - wi0k1 <= -0.22314355131421
c8i0k1: - v1 + 2.30258509299405 zi0k1 + wi0k1 <= 2.30258509299405
c1i1k1: - 2.98563348744947 zi1k1 - ti1k1 <= 0
c2i1k1: - 1.33632173341833 zi1k1 + ti1k1 <= 0
c3i1k1: m1 + 1.33632173341833 zi1k1 - ti1k1 <= 1.33632173341833
c4i1k1: - m1 + 2.98563348744947 zi1k1 + ti1k1 <= 2.98563348744947
c5i1k1: - 2.30258509299405 zi1k1 - wi1k1 <= 0
c6i1k1: 0.22314355131421 zi1k1 + wi1k1 <= 0
c7i1k1: v1 - 0.22314355131421 zi1k1 - wi1k1 <= -0.22314355131421
c8i1k1: - v1 + 2.30258509299405 zi1k1 + wi1k1 <= 2.30258509299405
c1i2k1: - 2.98563348744947 zi2k1 - ti2k1 <= 0
c2i2k1: - 1.33632173341833 zi2k1 + ti2k1 <= 0
c3i2k1: m1 + 1.33632173341833 zi2k1 - ti2k1 <= 1.33632173341833
c4i2k1: - m1 + 2.98563348744947 zi2k1 + ti2k1 <= 2.98563348744947
c5i2k1: - 2.30258509299405 zi2k1 - wi2k1 <= 0
c6i2k1: 0.22314355131421 zi2k1 + wi2k1 <= 0
c7i2k1: v1 - 0.22314355131421 zi2k1 - wi2k1 <= -0.22314355131421
c8i2k1: - v1 + 2.30258509299405 zi2k1 + wi2k1 <= 2.30258509299405
c1i3k1: - 2.98563348744947 zi3k1 - ti3k1 <= 0
c2i3k1: - 1.33632173341833 zi3k1 + ti3k1 <= 0
c3i3k1: m1 + 1.33632173341833 zi3k1 - ti3k1 <= 1.33632173341833
c4i3k1: - m1 + 2.98563348744947 zi3k1 + ti3k1 <= 2.98563348744947
c5i3k1: - 2.30258509299405 zi3k1 - wi3k1 <= 0
c6i3k1: 0.22314355131421 zi3k1 + wi3k1 <= 0
c7i3k1: v1 - 0.22314355131421 zi3k1 - wi3k1 <= -0.22314355131421
c8i3k1: - v1 + 2.30258509299405 zi3k1 + wi3k1 <= 2.30258509299405
c9k1: - pi1 + omk1j1 + omk1j2 + omk1j3 + omk1j4 = 0
c10k1: - v1 + 5.78057663816274 omk1j1 - 2.88064275681032 gk1j1
+ 2.81415134341597 omk1j2 - 2.06487580075496 gk1j2
+ 1.87716609698306 omk1j3 - 1.64323243986015 gk1j3
+ 1.41062901675158 omk1j4 - 1.35164676471547 gk1j4 = 0
c11k1: gk1j1 + gk1j2 + gk1j3 + gk1j4 = 1
c12k1j1: - omk1j1 + 0.1 gk1j1 <= 0
c13k1j1: omk1j1 - 0.275 gk1j1 <= 0
c12k1j2: - omk1j2 + 0.275 gk1j2 <= 0
c13k1j2: omk1j2 - 0.45 gk1j2 <= 0
c12k1j3: - omk1j3 + 0.45 gk1j3 <= 0
c13k1j3: omk1j3 - 0.625 gk1j3 <= 0
c12k1j4: - omk1j4 + 0.625 gk1j4 <= 0
c13k1j4: omk1j4 - 0.8 gk1j4 <= 0
c14k1: - 4 pi1 + zi0k1 + zi1k1 + zi2k1 + zi3k1 = 0
c15k1: 1.33632173341833 zi0k1 - ti0k1 - 1.17708699624777 zi1k1 - ti1k1
- 2.28656128473847 zi2k1 - ti2k1 - 2.98563348744947 zi3k1 - ti3k1
= 0
c16i0: zi0k0 + zi0k1 = 1
c16i1: zi1k0 + zi1k1 = 1
c16i2: zi2k0 + zi2k1 = 1
c16i3: zi3k0 + zi3k1 = 1
c17k0: zi0k0 + zi1k0 + zi2k0 + zi3k0 >= 0.4
c18k0: zi0k0 + zi1k0 + zi2k0 + zi3k0 <= 3.2
c17k1: zi0k1 + zi1k1 + zi2k1 + zi3k1 >= 0.4
c18k1: zi0k1 + zi1k1 + zi2k1 + zi3k1 <= 3.2
c21k0: m0 - m1 <= 0
c22: pi0 + pi1 = 1
c23i0: ti0k0 + ti0k1 + loss0 = 1.33632173341833
c23i1: ti1k0 + ti1k1 + loss1 = -1.17708699624777
c23i2: ti2k0 + ti2k1 + loss2 = -2.28656128473847
c23i3: ti3k0 + ti3k1 + loss3 = -2.98563348744947
Bounds
0.1 <= pi0 <= 0.8
-2.98563348744947 <= m0 <= 1.33632173341833
-2.30258509299405 <= v0 <= -0.22314355131421
0 <= zi0k0 <= 1
-2.98563348744947 <= ti0k0 <= 1.33632173341833
-2.30258509299405 <= wi0k0 <= -0.22314355131421
0 <= zi1k0 <= 1
-2.98563348744947 <= ti1k0 <= 1.33632173341833
-2.30258509299405 <= wi1k0 <= -0.22314355131421
0 <= zi2k0 <= 1
-2.98563348744947 <= ti2k0 <= 1.33632173341833
-2.30258509299405 <= wi2k0 <= -0.22314355131421
0 <= zi3k0 <= 1
-2.98563348744947 <= ti3k0 <= 1.33632173341833
-2.30258509299405 <= wi3k0 <= -0.22314355131421
0.1 <= omk0j1 <= 0.8
0 <= gk0j1 <= 1
0.1 <= omk0j2 <= 0.8
0 <= gk0j2 <= 1
0.1 <= omk0j3 <= 0.8
0 <= gk0j3 <= 1
0.1 <= omk0j4 <= 0.8
0 <= gk0j4 <= 1
0.1 <= pi1 <= 0.8
-2.98563348744947 <= m1 <= 1.33632173341833
-2.30258509299405 <= v1 <= -0.22314355131421
0 <= zi0k1 <= 1
-2.98563348744947 <= ti0k1 <= 1.33632173341833
-2.30258509299405 <= wi0k1 <= -0.22314355131421
0 <= zi1k1 <= 1
-2.98563348744947 <= ti1k1 <= 1.33632173341833
-2.30258509299405 <= wi1k1 <= -0.22314355131421
0 <= zi2k1 <= 1
-2.98563348744947 <= ti2k1 <= 1.33632173341833
-2.30258509299405 <= wi2k1 <= -0.22314355131421
0 <= zi3k1 <= 1
-2.98563348744947 <= ti3k1 <= 1.33632173341833
-2.30258509299405 <= wi3k1 <= -0.22314355131421
0.1 <= omk1j1 <= 0.8
0 <= gk1j1 <= 1
0.1 <= omk1j2 <= 0.8
0 <= gk1j2 <= 1
0.1 <= omk1j3 <= 0.8
0 <= gk1j3 <= 1
0.1 <= omk1j4 <= 0.8
0 <= gk1j4 <= 1
0 <= loss0 <= 4.3219552208678
-2.5134087296661 <= loss1 <= 1.80854649120169
-3.6228830181568 <= loss2 <= 0.699072202710996
-4.3219552208678 <= loss3 <= 0
Binaries
zi0k0 zi1k0 zi2k0 zi3k0 gk0j1 gk0j2 gk0j3 gk0j4 zi0k1 zi1k1 zi2k1
zi3k1 gk1j1 gk1j2 gk1j3 gk1j4
Semi-Continuous
ti0k0 wi0k0 ti1k0 wi1k0 ti2k0 wi2k0 ti3k0 wi3k0 omk0j1 omk0j2
omk0j3 omk0j4 ti0k1 wi0k1 ti1k1 wi1k1 ti2k1 wi2k1 ti3k1 wi3k1
omk1j1 omk1j2 omk1j3 omk1j4
End
这里Gurobi可以求解模型,但不能求解CPLEX
CPLEX 输出:
Gurobi 输出:
我认为您的 LP 文件规格有误。例如,您有
-2.98563348744947 <= ti0k0 <= 1.33632173341833
但同时ti0k0被标记为"semi-continuous"。那是什么意思? "semi-continuous" 说 "must be 0 or within the specified bounds"。如果指定的边界包括 0,则变量可能只是半连续的。它有助于解决这个问题吗?
我不确定 Gurobi 对这样的变量做了什么。如果您使用 Gurobi 读取 LP,然后将其写出并将新创建的 LP 文件提供给 CPLEX,会发生什么情况?您是否检查过 Gurobi 提供的解决方案实际上是否满足您的所有约束条件?
除了我在其他答案中提到的奇怪之处(无法编辑我的答案,因为我未在此处注册),您的 LP 文件对于 CPLEX 实际上是错误的。如果你看 https://www.ibm.com/support/knowledgecenter/SSSA5P_12.8.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/discr_optim/semi_cont_var/02_SemiCont_defn.html 那么你可以阅读
The semi-continuous lower bound (sclb) must be greater than or equal
to 0 (zero). An attempt to use a negative value for the
semi-continuous lower bound (sclb) will result in that bound being
treated as 0 (zero).
因此,“0 或负”的半连续变量可能导致模型不可行,因为它们的下限设置为 0,然后导致变量的边界矛盾。
您必须将这些变量乘以 -1,以便它们变为“0 或在正范围内”。
我正在 CPLEX 12.8.0 上使用混合整数二次规划 (MIQP),PythonAPI。我为 .lp 文件生成了一个模型。事实证明该模型是整数不可行的。这很奇怪,因为我之前用 Gurobi 产生了完全相同的问题并且它是可以解决的。
我已将 link 附加到此处的 .lp 文件以及使用 CPLEX 和 Gurobi 求解的结果。我声明了一些半连续变量。我的 objective 函数是二次函数,但我不认为这是导致整数不可行的原因,不是吗?最后,我真的很想在我的工作中使用 CPLEX,因为 CPLEX 可以做一些 Gurobi 做不到的功能。
.lp 文件:
Minimize
obj: - wi0k0 - wi1k0 - wi2k0 - wi3k0 - wi0k1 - wi1k1 - wi2k1 - wi3k1 + [ m0 ^2
+ m1 ^2 + 1.54315034142201 loss0 ^2 + 1.54315034142201 loss1 ^2
+ 1.54315034142201 loss2 ^2 + 1.54315034142201 loss3 ^2 ] / 2
Subject To
c1i0k0: - 2.98563348744947 zi0k0 - ti0k0 <= 0
c2i0k0: - 1.33632173341833 zi0k0 + ti0k0 <= 0
c3i0k0: m0 + 1.33632173341833 zi0k0 - ti0k0 <= 1.33632173341833
c4i0k0: - m0 + 2.98563348744947 zi0k0 + ti0k0 <= 2.98563348744947
c5i0k0: - 2.30258509299405 zi0k0 - wi0k0 <= 0
c6i0k0: 0.22314355131421 zi0k0 + wi0k0 <= 0
c7i0k0: v0 - 0.22314355131421 zi0k0 - wi0k0 <= -0.22314355131421
c8i0k0: - v0 + 2.30258509299405 zi0k0 + wi0k0 <= 2.30258509299405
c1i1k0: - 2.98563348744947 zi1k0 - ti1k0 <= 0
c2i1k0: - 1.33632173341833 zi1k0 + ti1k0 <= 0
c3i1k0: m0 + 1.33632173341833 zi1k0 - ti1k0 <= 1.33632173341833
c4i1k0: - m0 + 2.98563348744947 zi1k0 + ti1k0 <= 2.98563348744947
c5i1k0: - 2.30258509299405 zi1k0 - wi1k0 <= 0
c6i1k0: 0.22314355131421 zi1k0 + wi1k0 <= 0
c7i1k0: v0 - 0.22314355131421 zi1k0 - wi1k0 <= -0.22314355131421
c8i1k0: - v0 + 2.30258509299405 zi1k0 + wi1k0 <= 2.30258509299405
c1i2k0: - 2.98563348744947 zi2k0 - ti2k0 <= 0
c2i2k0: - 1.33632173341833 zi2k0 + ti2k0 <= 0
c3i2k0: m0 + 1.33632173341833 zi2k0 - ti2k0 <= 1.33632173341833
c4i2k0: - m0 + 2.98563348744947 zi2k0 + ti2k0 <= 2.98563348744947
c5i2k0: - 2.30258509299405 zi2k0 - wi2k0 <= 0
c6i2k0: 0.22314355131421 zi2k0 + wi2k0 <= 0
c7i2k0: v0 - 0.22314355131421 zi2k0 - wi2k0 <= -0.22314355131421
c8i2k0: - v0 + 2.30258509299405 zi2k0 + wi2k0 <= 2.30258509299405
c1i3k0: - 2.98563348744947 zi3k0 - ti3k0 <= 0
c2i3k0: - 1.33632173341833 zi3k0 + ti3k0 <= 0
c3i3k0: m0 + 1.33632173341833 zi3k0 - ti3k0 <= 1.33632173341833
c4i3k0: - m0 + 2.98563348744947 zi3k0 + ti3k0 <= 2.98563348744947
c5i3k0: - 2.30258509299405 zi3k0 - wi3k0 <= 0
c6i3k0: 0.22314355131421 zi3k0 + wi3k0 <= 0
c7i3k0: v0 - 0.22314355131421 zi3k0 - wi3k0 <= -0.22314355131421
c8i3k0: - v0 + 2.30258509299405 zi3k0 + wi3k0 <= 2.30258509299405
c9k0: - pi0 + omk0j1 + omk0j2 + omk0j3 + omk0j4 = 0
c10k0: - v0 + 5.78057663816274 omk0j1 - 2.88064275681032 gk0j1
+ 2.81415134341597 omk0j2 - 2.06487580075496 gk0j2
+ 1.87716609698306 omk0j3 - 1.64323243986015 gk0j3
+ 1.41062901675158 omk0j4 - 1.35164676471547 gk0j4 = 0
c11k0: gk0j1 + gk0j2 + gk0j3 + gk0j4 = 1
c12k0j1: - omk0j1 + 0.1 gk0j1 <= 0
c13k0j1: omk0j1 - 0.275 gk0j1 <= 0
c12k0j2: - omk0j2 + 0.275 gk0j2 <= 0
c13k0j2: omk0j2 - 0.45 gk0j2 <= 0
c12k0j3: - omk0j3 + 0.45 gk0j3 <= 0
c13k0j3: omk0j3 - 0.625 gk0j3 <= 0
c12k0j4: - omk0j4 + 0.625 gk0j4 <= 0
c13k0j4: omk0j4 - 0.8 gk0j4 <= 0
c14k0: - 4 pi0 + zi0k0 + zi1k0 + zi2k0 + zi3k0 = 0
c15k0: 1.33632173341833 zi0k0 - ti0k0 - 1.17708699624777 zi1k0 - ti1k0
- 2.28656128473847 zi2k0 - ti2k0 - 2.98563348744947 zi3k0 - ti3k0
= 0
c1i0k1: - 2.98563348744947 zi0k1 - ti0k1 <= 0
c2i0k1: - 1.33632173341833 zi0k1 + ti0k1 <= 0
c3i0k1: m1 + 1.33632173341833 zi0k1 - ti0k1 <= 1.33632173341833
c4i0k1: - m1 + 2.98563348744947 zi0k1 + ti0k1 <= 2.98563348744947
c5i0k1: - 2.30258509299405 zi0k1 - wi0k1 <= 0
c6i0k1: 0.22314355131421 zi0k1 + wi0k1 <= 0
c7i0k1: v1 - 0.22314355131421 zi0k1 - wi0k1 <= -0.22314355131421
c8i0k1: - v1 + 2.30258509299405 zi0k1 + wi0k1 <= 2.30258509299405
c1i1k1: - 2.98563348744947 zi1k1 - ti1k1 <= 0
c2i1k1: - 1.33632173341833 zi1k1 + ti1k1 <= 0
c3i1k1: m1 + 1.33632173341833 zi1k1 - ti1k1 <= 1.33632173341833
c4i1k1: - m1 + 2.98563348744947 zi1k1 + ti1k1 <= 2.98563348744947
c5i1k1: - 2.30258509299405 zi1k1 - wi1k1 <= 0
c6i1k1: 0.22314355131421 zi1k1 + wi1k1 <= 0
c7i1k1: v1 - 0.22314355131421 zi1k1 - wi1k1 <= -0.22314355131421
c8i1k1: - v1 + 2.30258509299405 zi1k1 + wi1k1 <= 2.30258509299405
c1i2k1: - 2.98563348744947 zi2k1 - ti2k1 <= 0
c2i2k1: - 1.33632173341833 zi2k1 + ti2k1 <= 0
c3i2k1: m1 + 1.33632173341833 zi2k1 - ti2k1 <= 1.33632173341833
c4i2k1: - m1 + 2.98563348744947 zi2k1 + ti2k1 <= 2.98563348744947
c5i2k1: - 2.30258509299405 zi2k1 - wi2k1 <= 0
c6i2k1: 0.22314355131421 zi2k1 + wi2k1 <= 0
c7i2k1: v1 - 0.22314355131421 zi2k1 - wi2k1 <= -0.22314355131421
c8i2k1: - v1 + 2.30258509299405 zi2k1 + wi2k1 <= 2.30258509299405
c1i3k1: - 2.98563348744947 zi3k1 - ti3k1 <= 0
c2i3k1: - 1.33632173341833 zi3k1 + ti3k1 <= 0
c3i3k1: m1 + 1.33632173341833 zi3k1 - ti3k1 <= 1.33632173341833
c4i3k1: - m1 + 2.98563348744947 zi3k1 + ti3k1 <= 2.98563348744947
c5i3k1: - 2.30258509299405 zi3k1 - wi3k1 <= 0
c6i3k1: 0.22314355131421 zi3k1 + wi3k1 <= 0
c7i3k1: v1 - 0.22314355131421 zi3k1 - wi3k1 <= -0.22314355131421
c8i3k1: - v1 + 2.30258509299405 zi3k1 + wi3k1 <= 2.30258509299405
c9k1: - pi1 + omk1j1 + omk1j2 + omk1j3 + omk1j4 = 0
c10k1: - v1 + 5.78057663816274 omk1j1 - 2.88064275681032 gk1j1
+ 2.81415134341597 omk1j2 - 2.06487580075496 gk1j2
+ 1.87716609698306 omk1j3 - 1.64323243986015 gk1j3
+ 1.41062901675158 omk1j4 - 1.35164676471547 gk1j4 = 0
c11k1: gk1j1 + gk1j2 + gk1j3 + gk1j4 = 1
c12k1j1: - omk1j1 + 0.1 gk1j1 <= 0
c13k1j1: omk1j1 - 0.275 gk1j1 <= 0
c12k1j2: - omk1j2 + 0.275 gk1j2 <= 0
c13k1j2: omk1j2 - 0.45 gk1j2 <= 0
c12k1j3: - omk1j3 + 0.45 gk1j3 <= 0
c13k1j3: omk1j3 - 0.625 gk1j3 <= 0
c12k1j4: - omk1j4 + 0.625 gk1j4 <= 0
c13k1j4: omk1j4 - 0.8 gk1j4 <= 0
c14k1: - 4 pi1 + zi0k1 + zi1k1 + zi2k1 + zi3k1 = 0
c15k1: 1.33632173341833 zi0k1 - ti0k1 - 1.17708699624777 zi1k1 - ti1k1
- 2.28656128473847 zi2k1 - ti2k1 - 2.98563348744947 zi3k1 - ti3k1
= 0
c16i0: zi0k0 + zi0k1 = 1
c16i1: zi1k0 + zi1k1 = 1
c16i2: zi2k0 + zi2k1 = 1
c16i3: zi3k0 + zi3k1 = 1
c17k0: zi0k0 + zi1k0 + zi2k0 + zi3k0 >= 0.4
c18k0: zi0k0 + zi1k0 + zi2k0 + zi3k0 <= 3.2
c17k1: zi0k1 + zi1k1 + zi2k1 + zi3k1 >= 0.4
c18k1: zi0k1 + zi1k1 + zi2k1 + zi3k1 <= 3.2
c21k0: m0 - m1 <= 0
c22: pi0 + pi1 = 1
c23i0: ti0k0 + ti0k1 + loss0 = 1.33632173341833
c23i1: ti1k0 + ti1k1 + loss1 = -1.17708699624777
c23i2: ti2k0 + ti2k1 + loss2 = -2.28656128473847
c23i3: ti3k0 + ti3k1 + loss3 = -2.98563348744947
Bounds
0.1 <= pi0 <= 0.8
-2.98563348744947 <= m0 <= 1.33632173341833
-2.30258509299405 <= v0 <= -0.22314355131421
0 <= zi0k0 <= 1
-2.98563348744947 <= ti0k0 <= 1.33632173341833
-2.30258509299405 <= wi0k0 <= -0.22314355131421
0 <= zi1k0 <= 1
-2.98563348744947 <= ti1k0 <= 1.33632173341833
-2.30258509299405 <= wi1k0 <= -0.22314355131421
0 <= zi2k0 <= 1
-2.98563348744947 <= ti2k0 <= 1.33632173341833
-2.30258509299405 <= wi2k0 <= -0.22314355131421
0 <= zi3k0 <= 1
-2.98563348744947 <= ti3k0 <= 1.33632173341833
-2.30258509299405 <= wi3k0 <= -0.22314355131421
0.1 <= omk0j1 <= 0.8
0 <= gk0j1 <= 1
0.1 <= omk0j2 <= 0.8
0 <= gk0j2 <= 1
0.1 <= omk0j3 <= 0.8
0 <= gk0j3 <= 1
0.1 <= omk0j4 <= 0.8
0 <= gk0j4 <= 1
0.1 <= pi1 <= 0.8
-2.98563348744947 <= m1 <= 1.33632173341833
-2.30258509299405 <= v1 <= -0.22314355131421
0 <= zi0k1 <= 1
-2.98563348744947 <= ti0k1 <= 1.33632173341833
-2.30258509299405 <= wi0k1 <= -0.22314355131421
0 <= zi1k1 <= 1
-2.98563348744947 <= ti1k1 <= 1.33632173341833
-2.30258509299405 <= wi1k1 <= -0.22314355131421
0 <= zi2k1 <= 1
-2.98563348744947 <= ti2k1 <= 1.33632173341833
-2.30258509299405 <= wi2k1 <= -0.22314355131421
0 <= zi3k1 <= 1
-2.98563348744947 <= ti3k1 <= 1.33632173341833
-2.30258509299405 <= wi3k1 <= -0.22314355131421
0.1 <= omk1j1 <= 0.8
0 <= gk1j1 <= 1
0.1 <= omk1j2 <= 0.8
0 <= gk1j2 <= 1
0.1 <= omk1j3 <= 0.8
0 <= gk1j3 <= 1
0.1 <= omk1j4 <= 0.8
0 <= gk1j4 <= 1
0 <= loss0 <= 4.3219552208678
-2.5134087296661 <= loss1 <= 1.80854649120169
-3.6228830181568 <= loss2 <= 0.699072202710996
-4.3219552208678 <= loss3 <= 0
Binaries
zi0k0 zi1k0 zi2k0 zi3k0 gk0j1 gk0j2 gk0j3 gk0j4 zi0k1 zi1k1 zi2k1
zi3k1 gk1j1 gk1j2 gk1j3 gk1j4
Semi-Continuous
ti0k0 wi0k0 ti1k0 wi1k0 ti2k0 wi2k0 ti3k0 wi3k0 omk0j1 omk0j2
omk0j3 omk0j4 ti0k1 wi0k1 ti1k1 wi1k1 ti2k1 wi2k1 ti3k1 wi3k1
omk1j1 omk1j2 omk1j3 omk1j4
End
这里Gurobi可以求解模型,但不能求解CPLEX
CPLEX 输出:
Gurobi 输出:
我认为您的 LP 文件规格有误。例如,您有
-2.98563348744947 <= ti0k0 <= 1.33632173341833
但同时ti0k0被标记为"semi-continuous"。那是什么意思? "semi-continuous" 说 "must be 0 or within the specified bounds"。如果指定的边界包括 0,则变量可能只是半连续的。它有助于解决这个问题吗?
我不确定 Gurobi 对这样的变量做了什么。如果您使用 Gurobi 读取 LP,然后将其写出并将新创建的 LP 文件提供给 CPLEX,会发生什么情况?您是否检查过 Gurobi 提供的解决方案实际上是否满足您的所有约束条件?
除了我在其他答案中提到的奇怪之处(无法编辑我的答案,因为我未在此处注册),您的 LP 文件对于 CPLEX 实际上是错误的。如果你看 https://www.ibm.com/support/knowledgecenter/SSSA5P_12.8.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/discr_optim/semi_cont_var/02_SemiCont_defn.html 那么你可以阅读
The semi-continuous lower bound (sclb) must be greater than or equal to 0 (zero). An attempt to use a negative value for the semi-continuous lower bound (sclb) will result in that bound being treated as 0 (zero).
因此,“0 或负”的半连续变量可能导致模型不可行,因为它们的下限设置为 0,然后导致变量的边界矛盾。
您必须将这些变量乘以 -1,以便它们变为“0 或在正范围内”。