Python cvxopt-cvxopt-glpk-MILP中的简单优化。无优化

Python cvxopt-cvxopt-glpk-MILP中的简单优化。无优化,python,linear-programming,convex-optimization,Python,Linear Programming,Convex Optimization,我使用CVXOPT来解决这个简单的优化问题: maximize X1 + X2 s.t: X2 + X6 = 2 X1 + X2 + X5 = 2 X1 + X4 = 2 X1 >=0 X2 >=0 显然,这有一个非常简单的解决方案 X1 = 1 X2 = 1 (其余均为0) 然而,cvxopt完全弄错了。 我就是这么做的: >>> print A [ 0.00e+00 1.

我使用CVXOPT来解决这个简单的优化问题:

maximize X1 + X2 
s.t:
 X2 + X6      = 2
 X1 + X2 + X5 = 2
 X1 + X4      = 2
 X1           >=0
 X2           >=0 
显然,这有一个非常简单的解决方案

 X1 = 1 
 X2 = 1 
(其余均为0)

然而,cvxopt完全弄错了。 我就是这么做的:

>>> print A
  [ 0.00e+00  1.00e+00  0.00e+00  0.00e+00  0.00e+00  1.00e+00]
  [ 1.00e+00  1.00e+00  0.00e+00  0.00e+00  1.00e+00  0.00e+00]
  [ 1.00e+00  0.00e+00  0.00e+00  1.00e+00  0.00e+00  0.00e+00]

>>> print b
[ 2.00e+00]
[ 2.00e+00]
[ 2.00e+00]

>>> print G
[-1.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00]
[ 0.00e+00 -1.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00]

>>> print h
 [ 0.00e+00]
 [ 0.00e+00]

>>> print c
[-1.00e+00]
[-1.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
(以上均为cvxopt的“矩阵”型)

打印glpk.ilp(c,G,h,A,b,I=set([0,1,2,3,4,5])[1]


以下是实现上述功能的代码:

import cvxopt.glpk
import cvxopt
c=cvxopt.matrix([1,1,0,0,0,0])
G=cvxopt.matrix([[1.0,0,0,0,0,0], [0,1,0,0,0,0]])
h=cvxopt.matrix([0.0,0.0])
A=cvxopt.matrix([[0.0,1,0,0,0,6], [1,1,0,0,1,0], [1,0,0,1,0,0]])
b=cvxopt.matrix([2.0, 2, 2])
(status, c)=cvxopt.glpk.ilp(-c,-(G.T),-h,A.T,b,I=set([0,1,2,3,4,5]))
print(status, c)
结果是:

optimal [ 0.00e+00]
[ 2.00e+00]
[ 0.00e+00]
[ 2.00e+00]
[ 0.00e+00]
[ 0.00e+00]

我不知道如何获得所有的解决方案…

根据您提供的LP,GLPK是正确的

(0.5,0.5,1.5,1,1.5)是可行的


极端光线是(1,1,-1,-2,-1)。

除非你在上面的问题公式中省略了什么,否则如果你假设X1和X2为实,那么这个问题就没有一个解,而是无穷多个解,当你需要整数值时,有三个解:(2,0),(1,1)和(0,2)。是的,这是真的。我刚把它修好。Thanks@Zahy你介意发布解决你问题的代码吗?我再也无法访问它了。但是CVXOPT是对的,我错了!存在一个无限的解决方案(数组输入错误)
optimal [ 0.00e+00]
[ 2.00e+00]
[ 0.00e+00]
[ 2.00e+00]
[ 0.00e+00]
[ 0.00e+00]