2017-05-30 52 views
-2

我跟着python PLUP的tutorial,但得到了不同的结果。 而不是python PLUP意外的结果

Optimal weekly number of soldiers to produce: 20 
Optimal weekly number of trains to produce: 60 

我:

Optimal weekly number of soldiers to produce: 0 
Optimal weekly number of trains to produce: 0 

但休息是相同的......如果你想知道,是什么;是代码(几乎复制和粘贴):

prob = pulp.LpProblem('Giapetto', pulp.LpMinimize) 
soldiers = pulp.LpVariable('soldiers', lowBound=0, cat='Integer') 
trains = pulp.LpVariable('trains', lowBound=0, cat='Integer') 

raw_material_costs = 10 * soldiers + 9 * trains 
variable_costs = 14 * soldiers + 10 * trains 
revenues = 27 * soldiers + 21 * trains 
profit = revenues - (raw_material_costs + variable_costs) 
prob += profit 

carpentry_hours = soldiers + trains 
prob += (carpentry_hours <= 80) 

finishing_hours = 2*soldiers + trains 
prob += (finishing_hours <= 100) 

prob += (soldiers <= 40) 
print(prob) 
optimization_result = prob.solve() 
assert optimization_result == pulp.LpStatusOptimal 

for var in (soldiers, trains): 
    print('Optimal weekly number of {} to produce: {:1.0f}'.format(var.name, var.value())) 

有什么不对吗?

+1

对我来说,就像你告诉它最大限度地减少利润,它已经成功地将利润最小化。 – user2357112

回答

1

它正在做它应该做的事情。

你修改的最重要的事情,客观:

prob = pulp.LpProblem('Giapetto', pulp.LpMinimize) 

所以,你要最小化的目标,这就是:

profit = revenues - (raw_material_costs + variable_costs) 

因为都是只取决于两个变量,这是两者都是非负的,最小值为0.

如果两个增值变量均为非负值,您可以改变目标以确定它不能低于0:

obj = 27 * soldiers + 21 trains - 24 soldiers - 19 trains 
    = 3 * soldiers + 2 trains 
+0

Gosh ...我启用了自动完成功能,没有注意到...谢谢! –