Skip to main content
 首页 » 编程设计

python之Pulp (Python) 值错误 : need more than 1 value to unpack

2025年05月04日22bonelee

我正在尝试解决这个问题 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),要么在每个逗号后提供一个名称元素。