Binary integer programming with PULP using vector syntax for variables?

梦想与她 提交于 2019-12-22 09:56:12

问题


New to the python library PULP and I'm finding the documentation somewhat unhelpful, as it does not include examples using lists of variables. I've tried to create an absolutely minimalist example below to illustrate my confusion.

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 "

The output is:

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

The optimizer is not recognizing the constraint that we only add two values.


回答1:


I'll leave this here in case anyone else is just as silly, but actually the above example works fine. I had merely failed to examine the results correctly. Instead:

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

reveals that the solution is correct.



来源:https://stackoverflow.com/questions/31410972/binary-integer-programming-with-pulp-using-vector-syntax-for-variables

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!