Pulp (Python) Value Error: need more than 1 value to unpack
Pulp (Python) Value Error: need more than 1 value to unpack
我正在尝试 http://www.me.utexas.edu/~jensen/ORMM/models/unit/linear/subunits/workforce/ 在 Python 上使用 PuLP 来解决这个问题。
这是我的代码:
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
谁能看出任何明显的问题?谢谢!
您正在此处添加单元素元组:
prob += x0 + x4 >= 8,
prob += x4 + x8 >= 10,
prob += x8 + x12 >= 7,
prob += x12 + x16 >= 12,
prob += x16 + x20 >= 4,
逗号使每个表达式成为一个只有一个元素的元组。要么删除逗号(将其留给 __iadd__
方法以将名称设置为 None
),要么在每个逗号后提供一个名称元素。
我正在尝试 http://www.me.utexas.edu/~jensen/ORMM/models/unit/linear/subunits/workforce/ 在 Python 上使用 PuLP 来解决这个问题。
这是我的代码:
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
谁能看出任何明显的问题?谢谢!
您正在此处添加单元素元组:
prob += x0 + x4 >= 8,
prob += x4 + x8 >= 10,
prob += x8 + x12 >= 7,
prob += x12 + x16 >= 12,
prob += x16 + x20 >= 4,
逗号使每个表达式成为一个只有一个元素的元组。要么删除逗号(将其留给 __iadd__
方法以将名称设置为 None
),要么在每个逗号后提供一个名称元素。