使用SQP等方法求解多目标优化问题的Python求解器咨询
符合你需求的Python求解器方案如下,分两类场景说明:
1. 变量松弛为连续值的NLP场景
- 先做必要提醒:常规SQP、内点法都属于局部优化算法,本身没法保证非凸问题的全局最优解,你如果一定要全局最优,要么用全局NLP求解器,要么给局部求解器配合多初始点遍历,你只有2个决策变量,实现成本都很低。
- 可用工具:
- 轻量无额外依赖选
SciPy:scipy.optimize.minimize内置了SLSQP(SQP实现)、interior-point(内点法实现)两种你要的算法接口,局部求解直接调用即可;要全局最优的话可以用同库的shgo、differential_evolution等全局非凸求解器,2个变量的场景下求解速度极快。 - 复杂建模选
Pyomo/CasADi:这两个是专业优化建模框架,支持调用IPOPT(开源内点法求解器)、SNOPT(商业SQP求解器),也支持对接BARON、Couenne这类全局NLP求解器,适合后续问题规模扩展的场景。
- 轻量无额外依赖选
2. 保留整数变量的INLP场景
- 可用工具:
- 小范围变量直接暴力枚举:你只有2个整数变量,如果边界约束的范围不大,直接遍历所有可行整数点计算目标值即可,100%能拿到全局最优,实现最简单。
- 大范围变量用专业求解器:通过
Pyomo、Gekko这类建模框架调用BONMIN、BARON等混合整数非线性全局求解器,直接定义整数变量求解即可。
多目标优化适配说明
上述工具默认处理单目标优化,你有3个目标的话可以用加权求和、ε约束法把多目标转为单目标后调用上述求解器;如果需要获取完整Pareto最优前沿,可以用pymoo库,内置支持非凸问题、整数变量的多目标全局优化算法,不用自己做目标转换。
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

