You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python线性规划中正确设置上下界?linprog参数报错求解

解决scipy linprog中上下界(bounds)的维度错误问题

你的错误是因为linprog的bounds参数格式不对——它要求为每个决策变量单独指定(下界, 上界)的二元组,最终组成一个长度等于变量数的列表(这里是4个变量,所以列表要有4个二元组)。你之前把所有下界打包成一个元组、所有上界打包成另一个元组再放进列表,相当于给了2个4元素的元组,完全不符合要求。

两种修改方法:

  • 方法1:手动构造每个变量的上下界对
    直接为每个变量写出对应的(下界, 上界):

    bounds = [(0, 6500), (0, 8200), (0, 2300), (0, 1000)]
    
  • 方法2:用zip自动配对(更高效)
    利用Python的zip函数,把lb和ub中对应位置的元素自动配对,生成符合要求的结构:

    bounds = list(zip(lb, ub))
    

修改后的完整代码:

from scipy.optimize import linprog

f = [612.03, 619, 617.13, 923]
A = [[-94, -96, -94.3, -118.6],
     [-83.7, -83, -87.6, -89.7],
     [1.02, 0.51, 0, 0],
     [203.9, 214.5, 27.88, 78.2],
     [53.6, 70.7, 71.5, 5.95],
     [14.9, 0, 0, 0],
     [35.1, 73.7, 0, 0],
     [0, 0, 0, 34.7],
     [0, 0, 0, 100]]
b = [-95 * 8000, -85 * 8000, 8000, 210 * 8000, 90 * 8000, 18 * 8000, 35 * 8000, 2.7 * 8000, 5 * 8000]
Aeq = [[1, 1, 1, 1]]
beq = [8000]
lb = (0, 0, 0, 0)
ub = (6500, 8200, 2300, 1000)
# 修改bounds的构造方式
bounds = list(zip(lb, ub))
x = linprog(c=f, A_ub=A, b_ub=b, A_eq=Aeq, b_eq=beq, bounds=bounds)
print(x)

额外说明:

如果某个变量没有下界(允许负无穷)或上界(允许正无穷),可以用None代替对应的边界值,比如某个变量下界不限、上界为1000,就写(None, 1000)。

内容的提问来源于stack exchange,提问作者Bogdan Doicin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:43:23