Python - CVXOPT 中的整数线性规划 (ILP) 函数未生成正确的结果
Python - The integer linear programming (ILP) function in CVXOPT is not generating correct results
我正在尝试使用 Python 2.7 上的 CVXOPT 库解决 https://en.wikipedia.org/wiki/Integer_programming#Example 中找到的简单示例;最佳答案是 (1,2) 或 (2,2)。我得到(0.0,0.0)。我在下面的代码中做错了什么?谢谢!
import numpy as np
import cvxopt
from cvxopt import glpk
c=cvxopt.matrix([0,-1]) #-1 since we're maximising the 2nd variable
G=cvxopt.matrix([[-1,1],[3,2],[2,3],[-1,0],[0,-1]],tc='d')
h=cvxopt.matrix([1,12,12,0,0],tc='d')
(status, x)=glpk.ilp(c,G.T,h,B=set([0,1]))
print status
print x[0],x[1] #should be (1,2) or (2,2)
print sum(c.T*x)
您的代码基本正确,但需要进行两处小修改:
- c 向量也必须是双精度数。
- 变量 x[0] 和 x[1] 应该是整数,而不是二进制。
然后,一个可行的解决方案是:
import numpy as np
import cvxopt
c=cvxopt.matrix([0,-1],tc='d')
G=cvxopt.matrix([[-1,1],[3,2],[2,3],[-1,0],[0,-1]],tc='d')
h=cvxopt.matrix([1,12,12,0,0],tc='d')
(status, x)=cvxopt.glpk.ilp(c,G.T,h,I=set([0,1]))
print status
print x[0],x[1]
print sum(c.T*x)
更新 Python 3.8.8
from cvxopt.glpk import ilp
import numpy as np
from cvxopt import matrix
c=matrix([0,-1],tc='d')
G=matrix([[-1,1],[3,2],[2,3],[-1,0],[0,-1]],tc='d')
h=matrix([1,12,12,0,0],tc='d')
(status, x)=ilp(c,G.T,h,I=set([0,1]))
print (status)
print (x[0],x[1])
print (sum(c.T*x))
通话中:
cvxopt.glpk.ilp(c,G.T,h,I=set([0,1]))
returns:
模块 'cvxopt' 没有属性 'glpk'
我正在尝试使用 Python 2.7 上的 CVXOPT 库解决 https://en.wikipedia.org/wiki/Integer_programming#Example 中找到的简单示例;最佳答案是 (1,2) 或 (2,2)。我得到(0.0,0.0)。我在下面的代码中做错了什么?谢谢!
import numpy as np
import cvxopt
from cvxopt import glpk
c=cvxopt.matrix([0,-1]) #-1 since we're maximising the 2nd variable
G=cvxopt.matrix([[-1,1],[3,2],[2,3],[-1,0],[0,-1]],tc='d')
h=cvxopt.matrix([1,12,12,0,0],tc='d')
(status, x)=glpk.ilp(c,G.T,h,B=set([0,1]))
print status
print x[0],x[1] #should be (1,2) or (2,2)
print sum(c.T*x)
您的代码基本正确,但需要进行两处小修改:
- c 向量也必须是双精度数。
- 变量 x[0] 和 x[1] 应该是整数,而不是二进制。
然后,一个可行的解决方案是:
import numpy as np
import cvxopt
c=cvxopt.matrix([0,-1],tc='d')
G=cvxopt.matrix([[-1,1],[3,2],[2,3],[-1,0],[0,-1]],tc='d')
h=cvxopt.matrix([1,12,12,0,0],tc='d')
(status, x)=cvxopt.glpk.ilp(c,G.T,h,I=set([0,1]))
print status
print x[0],x[1]
print sum(c.T*x)
更新 Python 3.8.8
from cvxopt.glpk import ilp
import numpy as np
from cvxopt import matrix
c=matrix([0,-1],tc='d')
G=matrix([[-1,1],[3,2],[2,3],[-1,0],[0,-1]],tc='d')
h=matrix([1,12,12,0,0],tc='d')
(status, x)=ilp(c,G.T,h,I=set([0,1]))
print (status)
print (x[0],x[1])
print (sum(c.T*x))
通话中:
cvxopt.glpk.ilp(c,G.T,h,I=set([0,1]))
returns: 模块 'cvxopt' 没有属性 'glpk'