用途
pymoo 是一个以多目标优化为重点的 Python 优化框架,用于求解单目标和多目标优化问题。它适合需要寻找冲突目标之间权衡解(Pareto 前沿)的场景,并内置了多种进化算法、基准测试问题、可定制的遗传算子以及多准则决策方法。
主要能力
- 支持单目标、多目标(2-3 个目标)、多目标(4 个及以上目标,即 many-objective)优化。
- 内置算法包括:NSGA-II、NSGA-III、MOEA/D、SPEA2、RVEA、GA、DE、PSO 等,另在算法选择指南中提及 CMA-ES、R-NSGA-II、AGE-MOEA、SRES、ISRES 等。
- 提供基准测试问题,如 ZDT、DTLZ、WFG 系列,可通过 get_problem 快速获取。
- 支持约束优化(不等式与等式约束)、混合变量问题(连续、整数、二进制、分类变量)、动态问题(目标或约束随时间变化)。
- 支持自定义遗传算子(交叉、变异、选择),并针对连续变量、二进制变量、排列问题给出算子建议。
- 提供多准则决策(MCDM)方法,用于从 Pareto 前沿中做选择。
- 提供可视化能力,包括散点图、PCP、radviz、热力图等。
- 支持并行评估(线程、进程或 Dask),用于目标函数计算代价高昂的场景。
使用方式
安装:
uv pip install pymoo
如需可复现环境,可固定版本:
uv pip install "pymoo==0.6.1.6"
依赖:NumPy(自 0.6.1.3 起兼容 2.x)、SciPy、matplotlib(可视化)。Autograd 为可选依赖,用于基于梯度的功能(自 0.6.1.3 起)。
文档:https://pymoo.org/ ;面向 LLM 的索引:https://pymoo.org/llms.txt
pymoo 使用统一的 minimize() 函数处理所有优化任务:
from pymoo.optimize import minimize
result = minimize(
problem, # What to optimize
algorithm, # How to optimize
termination, # When to stop
seed=1,
verbose=True
)
结果对象包含:
- result.X:最优解的决策变量
- result.F:最优解的目标值
- result.G:约束违反情况(若为约束问题)
- result.algorithm:带历史的算法对象
问题定义支持三种风格:
- Problem:向量化,_evaluate 接收一批解(矩阵)
- ElementwiseProblem:每次调用处理一个解,推荐用于自定义问题和并行评估
- FunctionalProblem:将目标和约束定义为独立函数,无需子类化
约束形式为 g(x) <= 0 和 h(x) = 0。
适用场景
- 求解单目标或多目标优化问题
- 寻找 Pareto 最优解并分析权衡
- 实现进化算法(GA、DE、PSO、NSGA-II/III)
- 处理带约束的优化问题
- 在标准测试问题(ZDT、DTLZ、WFG)上对算法进行基准测试
- 定制遗传算子(交叉、变异、选择)
- 可视化高维优化结果
- 从多个竞争解中做决策
- 处理二进制、离散、连续或混合变量问题
限制与注意事项
- 资料未提供关于收费、价格、平台支持范围或具体性能效果的数据。
- 资料未提供除上述算法、问题类型、算子、可视化与并行方式之外的其他功能说明。
- 资料未提供关于算法在特定问题上的收敛保证或最优性保证。
- 资料未提供关于运行环境(操作系统、Python 版本)的明确要求。
- 资料未提供关于许可证、商业使用限制的信息。
- 资料未提供关于社区支持、更新频率或长期维护承诺的信息。