Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关于Integer&;的cvxopt.glpk.ilp文档;二进制集合键_Python_Glpk_Cvxopt_Mixed Integer Programming - Fatal编程技术网

Python 关于Integer&;的cvxopt.glpk.ilp文档;二进制集合键

Python 关于Integer&;的cvxopt.glpk.ilp文档;二进制集合键,python,glpk,cvxopt,mixed-integer-programming,Python,Glpk,Cvxopt,Mixed Integer Programming,我有一个混合整数规划问题(通过列生成减少库存),我在AMPL中解决了这个问题,并使用cvxopt将其移植到Python。CVXOPT“op”没有提供我需要的二进制变量选项,所以我用GLPK扩展它以使用“ILP”。我得到了ilp状态=“LP松弛是原始不可行的”,我知道这是不正确的,因为之前的AMPL解决方案。所以我知道我的配置不正确。我试图通过在stackoverflow问题中的示例来理解整数“I”和二进制“B”键的使用 我的问题是,I&B键之间有什么区别,例如: stat, sol1 = glp

我有一个混合整数规划问题(通过列生成减少库存),我在AMPL中解决了这个问题,并使用cvxopt将其移植到Python。CVXOPT“op”没有提供我需要的二进制变量选项,所以我用GLPK扩展它以使用“ILP”。我得到了ilp状态=“LP松弛是原始不可行的”,我知道这是不正确的,因为之前的AMPL解决方案。所以我知道我的配置不正确。我试图通过在stackoverflow问题中的示例来理解整数“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 5.00e-01-0.00e+00…]


  • 我看过了
    帮助(ilp)
    ,但它只是说I&B是整数和二进制变量的标记集(我理解),但它没有描述如果同时使用这两个变量(I&B)会发生什么,或者它们重叠,或者一个或另一个是空集,或者没有定义。我会认为上面的
    sol1
    =
    sol2
    ,因为它只是定义集合I的两种不同方式。我假设
    sol3
    都是整数,没有二进制变量,因为
    B
    没有定义,但我没有任何文档来确认我知道。

    我找到了我问题的答案,因此我将其发布在这里,以防其他人对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提供了一个我将在此处重复使用的示例。它来自:


    (1) 你为什么要看bin/int变量的定义?如果relax是不可行的,那么任何离散约束也是不可行的,那么cvxopt是开源的。(2)如果需要,你可以查看代码。(3)你的示例没有完全打印出来,只显示了两个不同的结果,这并不奇怪。(4)如果没有离散变量(I或B)它显然是连续的。为什么结果3令人惊讶?请检查(5)我有点怀疑cvxopt是构建列生成模型的正确库。我不是在寻找bin/int变量的定义。我在寻找关于ILP函数的详细文档,特别是“I”和“B”参数的声明。示例是“不完整的”因为我使用的是之前发布的问题39384909中的代码作为示例。您引用的glpk.c源代码非常有用,因为我应该能够回答来自该源代码的关于“I”和“B”参数的问题,所以非常感谢。我不知道ILP包含simplex()并且会返回浮点结果。我认为它只会返回整数答案。非常感谢!如果我有一个像
    x0+x1这样的不等式,换句话说,我想通过使用不等式来防止2个二进制文件为真,而使用1位寄存器的简单实现将无法实现。我想我可以做一个简单的工作示例,但JU如果你知道的话。再次感谢大家,
    glpk.ilp
    强制我提供
    G,h,A,b
    作为双倍,因此在该范围内不会发生溢出
    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