用途
pymoo 是一个 Python 优化框架,重点面向多目标优化问题。它可以求解单目标与多目标优化,使用 NSGA-II/III、MOEA/D 等算法,配合基准问题(ZDT、DTLZ)、可定制的遗传算子以及多准则决策方法,适合处理目标之间存在冲突、需要寻找权衡解(Pareto 前沿)的问题。
该技能适用的场景包括:求解单目标或多目标优化问题;寻找 Pareto 最优解并分析权衡关系;实现进化算法(GA、DE、PSO、NSGA-II/III);处理带约束的优化问题;在标准测试问题(ZDT、DTLZ、WFG)上对算法进行基准测试;定制遗传算子(交叉、变异、选择);可视化高维优化结果;从多个竞争性方案中做出决策;处理二进制、离散、连续或混合变量问题。
主要能力
统一接口:所有优化任务都使用一致的 minimize() 函数,结果对象包含 result.X(最优解决策变量)、result.F(目标值)、result.G(约束违反情况)以及带历史的算法对象。
问题类型:支持单目标、多目标(2-3 个冲突目标,产生 Pareto 前沿)、多目标高维(4 个以上目标)、带约束(不等式/等式约束)、动态问题(目标或约束随时间变化)。
算法与算子:单目标可用 GA、DE、PSO、CMA-ES 等;多目标标准推荐 NSGA-II,也提供 R-NSGA-II、MOEA/D;4 个以上目标可用 NSGA-III、RVEA、AGE-MOEA。遗传算子可按变量类型选择,连续变量常用 SBX 交叉与 PM 变异,二进制变量可用 TwoPointCrossover、UniformCrossover、BitflipMutation,排列问题(TSP、调度)可用 OrderCrossover、InversionMutation。
约束处理:默认采用 Feasibility First(可行性优先),也可使用惩罚方法(ConstraintsAsPenalty)、将约束作为目标(ConstraintsAsObjective),或使用内置约束处理的专用算法如 SRES。约束统一表述为 g(x) <= 0 与 h(x) = 0。
决策与可视化:可从 Pareto 前沿进行决策,使用伪权重、折衷规划、拐点、超体积贡献等方法。可视化按目标数量选择:2 个目标用散点图,3 个目标用 3D 散点,4 个以上目标用平行坐标图(PCP),方案对比可用花瓣图(Petal)。
使用方式
安装命令为 uv pip install pymoo,依赖 NumPy、SciPy、matplotlib,autograd 为可选(用于基于梯度的方法)。官方文档地址为 https://pymoo.org/,本技能基于 pymoo 0.6.x。
典型调用形式为:result = minimize(problem, algorithm, termination, seed=1, verbose=True)。自定义问题需继承 ElementwiseProblem 类,在 __init__ 中定义变量数、目标数、约束数与上下界,在 _evaluate 方法中实现目标(及约束)计算。基准问题通过 get_problem 获取,例如 get_problem("zdt1")、get_problem("dtlz2", n_obj=5)。
使用 NSGA-III 时必须提供参考方向,可通过 get_reference_directions("das-dennis", n_dim=5, n_partitions=12) 生成。终止条件可使用 ('n_gen', 200) 或 get_termination("f_tol", tol=0.001)。
该技能附带的资源包括:references/ 目录下的算法、问题、算子、可视化、约束与 MCDM 详细文档;scripts/ 目录下的可执行示例,涵盖单目标、多目标、高维多目标、自定义问题与决策制定,可通过 python3 scripts/xxx_example.py 运行。
适用场景
适合工程设计等需要同时权衡多个相互冲突目标的场景,以及需要在标准基准问题上验证算法、需要处理复杂约束或进行方案决策的优化任务。目标尺度差异较大时建议归一化;为可复现性应设置随机种子;可通过 save_history=True 保存历史以分析收敛过程。
限制
资料未提供该技能的具体收费、价格、平台支持范围或性能保证等信息,暂未提供。使用时应确保约束表述正确(g <= 0、h = 0),NSGA-III 必须配置参考方向,MCDM 前应归一化目标值。