You need to enable JavaScript to run this app. Scipy中如何在输入值总和不超1000约束下求解线性函数最小值
优惠活动
大模型
产品
解决方案
定价
更多

Scipy中如何在输入值总和不超1000约束下求解线性函数最小值

问题根源
  • 原代码使用的TNC求解器仅支持变量的独立取值边界约束,完全不具备自定义不等式约束的处理能力,因此“两输入值总和不超过1000”的规则没有被纳入求解逻辑,输出(1000,1000)是该方法在独立边界下的正常计算结果。
  • 要实现带加总约束的求解,需要切换到支持自定义约束的求解器,可选的适配方法包括SLSQP、trust-constr,二者都可同时兼容原有独立边界和新加的线性约束。
代码调整方案

scipy的不等式约束有固定定义规则:要求约束函数的返回值必须≥0,因此把“x[0] + x[1] ≤ 1000”等价转换为“1000 - x[0] -x[1] ≥0”,按字典格式传入求解参数即可。
调整后的完整可运行代码如下:

# 定义总和约束
sum_limit_constraint = {
    "type": "ineq",
    "fun": lambda x: 1000 - x[0] - x[1]
}

# 保留原有的独立变量边界设置
bounds = ((0.0, 1000.0), (0.0, 1000.0))

# 替换求解方法为支持约束的SLSQP,传入自定义约束
opt_result = scipy.optimize.minimize(
    objective,
    x0=(0, 0),
    method="SLSQP",
    bounds=bounds,
    constraints=[sum_limit_constraint]
)

# 通过opt_result.x即可获取满足所有约束的最优输入对
注意事项
  • 如果后续需要加入更多复杂约束、或者追求更高的收敛精度,可以把求解方法替换为trust-constr,该方法对线性/非线性约束的适配稳定性优于SLSQP。
  • 求解完成后可手动校验约束满足情况:返回的最优输入对一定会满足x[0]+x[1] ≤1000,不会再出现两个变量同时达到独立边界上限的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 17:54:09