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

Scipy minimize添加不等式约束致QP控制分配求解异常

问题成因

核心问题是Python原生字典的语法特性:同一个字典内不允许存在重复键,重复声明的键会被最后一次赋值的内容完全覆盖。
你定义cons2时把等式约束、不等式约束的type和fun键写在了同一个字典里,解析后这个字典实际只保留了最后写入的不等式约束ineq1,力平衡必需的等式约束eqcon根本没有被传入minimize函数。
此时优化问题缺少推力与环境力平衡的强制约束,而目标函数是求推力项、松弛变量项的加权平方和最小值,所有变量取0时目标函数值达到理论最小值0,同时满足fmax[0] - x[0] > 0的不等式要求,自然会输出全0结果,不存在优化器忽略第一个约束的情况。

修复方法

SciPy的minimize接口对多约束的传参要求为:每个约束单独定义为一个字典,所有约束字典按顺序放入列表/元组后,整体传给constraints参数,不能把多个约束的键值对写到同一个字典里。
修正后的约束定义代码如下:

# 错误写法:同字典重复键,前序约束被覆盖
# cons2 = {'type': 'eq',   'fun': eqcon,
#          'type': 'ineq', 'fun': ineq1}

# 正确写法:多约束以字典列表形式传入
cons2 = [
    {'type': 'eq',   'fun': eqcon},
    {'type': 'ineq', 'fun': ineq1}
]

替换后重新运行即可让两个约束同时生效,得到符合预期的推力分配结果。后续新增其他推进器的推力上限、角度限制等约束时,只需要在这个约束列表里追加对应的约束字典即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:15:30