2017-07-30 101 views
1

我试图解决这个问题http://www.me.utexas.edu/~jensen/ORMM/models/unit/linear/subunits/workforce/在Python上使用PuLP。纸浆(Python)值错误:需要超过1个值才能解压

这是我的代码:

from pulp import * 

# Create the 'prob' variable to contain the problem data 
prob = LpProblem("The Bus Problem",LpMinimize) 

# The variables are created with a lower limit of zero 
x0=LpVariable("Number of drivers at time 0",0,None,LpInteger) 
x4=LpVariable("Number of drivers at time 4",0) 
x8=LpVariable("Number of drivers at time 8",0) 
x12=LpVariable("Number of drivers at time 12",0) 
x16=LpVariable("Number of drivers at time 16",0) 
x20=LpVariable("Number of drivers at time 20",0) 

# The objective function is added to 'prob' first 
prob += x0 + x4 + x8 + x12 + x16 + x20, "drivers" 

# The five constraints are entered 
prob += x0 + x4 >= 8, 
prob += x4 + x8 >= 10, 
prob += x8 + x12 >= 7, 
prob += x12 + x16 >= 12, 
prob += x16 + x20 >= 4, 

# The problem data is written to an .lp file 
prob.writeLP("BusModel.lp") 

# The problem is solved using PuLP's choice of Solver 
prob.solve() 

然而,当我运行此我得到的错误:

File "C:\Users___\Anaconda2\lib\site-packages\pulp\pulp.py", line 1337, in iadd other, name = other

ValueError: need more than 1 value to unpack

当我去看看pulp.py,这是它在说代码:

def __iadd__(self, other): 
     if isinstance(other, tuple): 
      other, name = other 
     else: 
      name = None 
     if other is True: 
      return self 
     if isinstance(other, LpConstraintVar): 
      self.addConstraint(other.constraint) 
     elif isinstance(other, LpConstraint): 
      self.addConstraint(other, name) 
     elif isinstance(other, LpAffineExpression): 
      if self.objective is not None: 
       warnings.warn("Overwriting previously set objective.") 
      self.objective = other 
      self.objective.name = name 
     elif isinstance(other, LpVariable) or isinstance(other, (int, float)): 
      if self.objective is not None: 
       warnings.warn("Overwriting previously set objective.") 
      self.objective = LpAffineExpression(other) 
      self.objective.name = name 
     else: 
      raise TypeError("Can only add LpConstraintVar, LpConstraint, LpAffineExpression or True objects") 
     return self 

任何人都可以看到任何明显的问题?谢谢!

回答

5

您正在添加单元素的元组这里:

prob += x0 + x4 >= 8, 
prob += x4 + x8 >= 10, 
prob += x8 + x12 >= 7, 
prob += x12 + x16 >= 12, 
prob += x16 + x20 >= 4, 

逗号使得各表达与一种元素的元组。删除逗号(将其保留为__iadd__方法将名称设置为None),或在每个逗号后面提供名称元素。

+0

哇,就像删除逗号一样简单。非常感谢! – plshelp

相关问题