【问题标题】:Binary integer programming with PULP using vector syntax for variables?使用变量向量语法使用 PULP 进行二进制整数编程?
【发布时间】:2015-07-14 15:29:48
【问题描述】:

python 库 PULP 的新手,我发现文档有些无用,因为它不包含使用变量列表的示例。我试图在下面创建一个绝对简约的示例来说明我的困惑。

import pulp
IDENTIFIERS = ['A','B','C','D','E']
PRICES      = dict( zip( IDENTIFIERS, [100.0, 99.0, 100.5, 101.5, 200.0 ] ) )
n           = len( IDENTIFIERS )

x     = pulp.LpVariable.dicts( "x", indexs = IDENTIFIERS, lowBound=0, upBound=1, cat='Integer', indexStart=[] )
prob  = pulp.LpProblem( "Minimalist example", pulp.LpMaximize )
prob += pulp.lpSum( [ x[i]*PRICES[i] for i in IDENTIFIERS ]  ), " Objective is sum of prices of selected items "
prob += pulp.lpSum( [ x[i] for i in IDENTIFIERS ] )==2, " Constraint is that we choose two items "
prob.solve()
for ident in IDENTIFIERS:
    if x[ident]==1:
        print ident + " is in the basket "

输出是:

A is in the basket 
B is in the basket 
C is in the basket 
D is in the basket 
E is in the basket

优化器无法识别我们只添加两个值的约束。

【问题讨论】:

    标签: python pulp


    【解决方案1】:

    我将把它留在这里,以防其他人同样愚蠢,但实际上上面的示例运行良好。我只是未能正确检查结果。而是:

    def printProb( prob ):
        for v in prob.variables():
           print v.name, "=", v.varValue
        print "Status:", pulp.LpStatus[ prob.status ]
    

    表明解决方案是正确的。

    【讨论】:

    • 如果它解决了您的问题,您可以接受您自己的答案。这有助于其他人过滤未回答的问题。
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多