使用变量的向量语法使用 PULP 进行二进制整数编程?
Binary integer programming with PULP using vector syntax for variables?
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
优化器没有识别我们只添加两个值的约束。
我会把它留在这里,以防其他人同样愚蠢,但实际上上面的例子工作得很好。我只是没有正确检查结果。相反:
def printProb( prob ):
for v in prob.variables():
print v.name, "=", v.varValue
print "Status:", pulp.LpStatus[ prob.status ]
说明解是正确的。
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
优化器没有识别我们只添加两个值的约束。
我会把它留在这里,以防其他人同样愚蠢,但实际上上面的例子工作得很好。我只是没有正确检查结果。相反:
def printProb( prob ):
for v in prob.variables():
print v.name, "=", v.varValue
print "Status:", pulp.LpStatus[ prob.status ]
说明解是正确的。