Pymoo 多目标优化
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/pymoo。
技能介绍
要解决什么问题
工程里常见的不只是「把某一个指标压到最低」,而是多个目标互相拉扯:成本要低、延迟要小、资源占用也要可控。单目标优化只能给出一个点解;多目标问题需要的是帕累托前沿——在无法同时改进所有目标时,看清可行折中。带不等式/等式约束、二进制/离散/连续/混合决策变量时,手写进化算法和基准对比很容易散成一堆脚本,接口也不统一。
技能如何组织工作流
Pymoo 把各类任务收敛到统一的 minimize() 入口。返回的 result 里可以直接取决策变量 result.X、目标值 result.F,有约束时还有 result.G 与算法历史 result.algorithm。
按目标规模选路径比较清晰:
- 单目标:GA、DE、PSO、CMA-ES 等,配终止条件(如
('n_gen', N)或f_tol)即可跑通。 - 2~3 个冲突目标:通常用 NSGA-II 求帕累托前沿,再做散点或 3D 可视化。
- 4 个及以上目标:NSGA-III 需要参考方向引导种群,结果多用平行坐标图阅读。
- 领域自定义问题:继承
ElementwiseProblem,在_evaluate里写目标;约束按g(x) <= 0、h(x) = 0表达(不等式常写成-(g(x)-b) <= 0)。
约束处理上,默认可行域优先;也可惩罚、把约束抬成目标,或换 SRES/ISRES 等更偏约束的算法。前沿算出来后,若要在多个非支配解里定案,可先归一化目标再用伪权重、折中规划、拐点或超体积贡献等多准则方法。内置 ZDT、DTLZ、WFG 等基准问题,便于对算法做对比;连续变量常用 SBX/PM,二进制与排列类问题有对应交叉变异算子。
适用边界与注意点
高维目标下前沿质量很依赖参考方向与种群规模;目标量纲差大时先归一化再决策更稳。约束写错符号或可行性域过窄,会出现「几乎找不到可行解」——需要对照 g <= 0 规则排查,必要时换约束处理策略。计算贵时优先控种群与代数、简化算子,问题支持时再考虑并行;复现实验建议固定随机种子并 save_history=True 看收敛。技能文档与示例围绕 pymoo 0.6.x,更细的算法/算子/可视化说明在随附的 references/ 与 scripts/ 里按场景查阅。
使用场景
- 在模型部署前,需要在准确率、推理延迟与显存占用之间找折中,并导出非支配解集供产品选型
- 用 NSGA-II 对自研多目标问题跑出一组帕累托解,再用散点图对比各目标之间的权衡关系
- 在 ZDT 或 DTLZ 基准问题上对比 NSGA-II 与 MOEA/D 的收敛与前沿分布,写进算法评测报告
- 领域问题含工艺不等式约束,需继承 ElementwiseProblem 写 `_evaluate` 并用可行性优先策略求可行最优解
适合人员
- 负责上线推理服务的算法工程师,要在多个冲突 KPI 间选部署参数而非只追单一指标
- 撰写进化多目标优化论文的研究生,需要标准测试集与 NSGA-III 参考方向等可复现实验流程
- 做产线或配方调参的工艺工程师,要把成本、质量、能耗写成带约束的多目标并看帕累托折中
- 开源 MOEA 维护者,需要对照 operators 文档为连续/二进制/排列变量配置交叉变异并与基准前沿对比