cvxopt.glpk.ilp文件关于整数和二进制集合密钥的文档

2024-09-28 22:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个混合整数编程问题(通过列生成来削减库存),我在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

  1. [ 0.00e+00 0.00e+00 5.00e-01 5.00e-01 5.00e-01 -0.00e+00 ... ]

  2. [ 0.00e+00 0.00e+00 5.00e-01 5.00e-01 5.00e-01 -0.00e+00 ... ]

  3. [ 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都是整数,没有二进制变量,因为{}没有被定义,但我没有任何文档来证实这一点。在


Tags: 定义编程库存二进制整数解决方案statglpk
1条回答
网友
1楼 · 发布于 2024-09-28 22:29:58

我找到了问题的答案,所以我把它贴在这里,以防其他人有同样的问题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

For A: the result is                           [1.8,  2.8]  all float
For B: with I={0}, the result is               [2.0,  2.67] int & float
For B: with I={1}, the result is               [2.67, 2.0]  float & int
For B: with I={0,1}, the result is             [2.0,  2.0]  int & int
For C: with I={0,1} and B={0}, the result is   [1.0,  2.0]  binary & int
For C: with I={0,1} and B={0,1}, the result is [0.0,  1.0]  binary & binary

相关问题 更多 >