我有一个混合整数编程问题(通过列生成来削减库存),我在AMPL中解决了这个问题,并使用cvxopt将其移植到Python。CVXOPT“op”没有提供我需要的二进制变量选项,所以我用GLPK扩展它以使用“ILP”。我得到了ilp status=“LP松弛是原始不可行的”,我知道这是不对的,因为前面的AMPL解决方案。所以我知道我的配置不正确。我试图通过在stackoverflow问题The integer linear programming(ILP) function in CVXOPT returns non integers中的例子来理解整数“I”和二进制“B”键的使用。在
我的问题是,I&B键之间有什么区别,例如:
stat, sol1 = glpk.ilp(W, G.T, h, I=set([0, 1]))
stat, sol2 = glpk.ilp(W, G.T, h, I={0,1})
stat, sol3 = glpk.ilp(W, G.T, h)
有以下3种不同的解决方案:(print(soli.T
)
[ 0.00e+00 0.00e+00 5.00e-01 5.00e-01 5.00e-01 -0.00e+00 ... ]
[ 0.00e+00 0.00e+00 5.00e-01 5.00e-01 5.00e-01 -0.00e+00 ... ]
[ 5.00e-01 5.00e-01 5.00e-01 5.00e-01 5.00e-01 -0.00e+00 ... ]
我已经看了help(ilp)
,但它只是说I&B是整数和二进制变量的一组指示符(我理解),但它没有描述如果同时使用这两个变量(I&B),或者它们重叠,或者其中一个或另一个是空集,或者没有定义。我认为上面的sol1
=sol2
,因为定义集合I只是两种不同的方法。我假设sol3
都是整数,没有二进制变量,因为{
我找到了问题的答案,所以我把它贴在这里,以防其他人有同样的问题cvxopt.glpk.ilp文件()和I&B参数。在
A:(状态,x)=ilp(c,G,h,A,b)
x都是浮点
B:(状态,x)=ilp(c、G、h、A、B、I)
x是浮点和整数的混合,取决于集合I中的索引
C(状态,x)=ilp(C,G,h,A,b,I,b) x是浮点、整数和二进制的混合,取决于 集合I和集合B中的指数。
如果集合I和Boverlap,则B取代。在
问题#33785396提供了一个我将在这里重复使用的示例。来自: https://en.wikipedia.org/wiki/Integer_programming#Example
相关问题 更多 >
编程相关推荐