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

使用Scipy的linprog与单纯形法求解Tableau为何结果不符预期?

问题原因

Scipy的linprog默认求解最小化目标函数,且默认不等式约束为A_ub @ x ≤ b_ub。但你的原问题约束应为A @ x ≥ b——此时[0,0,0,0]不满足约束(比如0≥42不成立),不会被选为可行解;而你直接传入A和b作为A_ub和b_ub,相当于把约束设为A @ x ≤ b,[0,0,0,0]是该约束下的可行解且目标函数值最小,因此得到了不符合预期的结果。

解决方法

将原约束转换为linprog支持的格式:把A @ x ≥ b取反,得到-A @ x ≤ -b,再传入对应参数即可:

c = [7, 9, 18, 17]
A = [
    [2, 4, 5, 7],
    [1, 1, 2, 2],
    [1, 2, 3, 3]
]
b = [42, 17, 24]

from scipy.optimize import linprog

# 转换约束方向:A@x >= b → -A@x <= -b
res = linprog(
    c,
    A_ub=[[-elem for elem in row] for row in A],
    b_ub=[-val for val in b],
    method='simplex'
)

print(res)

运行后会得到符合预期的结果:

  • 变量解:x: array([3., 0., 7., 0.])
  • 目标函数值:fun: 147.0

注:linprog默认要求变量x ≥ 0,这和你的预期解一致,无需额外设置bounds参数。

内容的提问来源于stack exchange,提问作者NEWO-o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:48:27