mcpField
P
pymoo

pymoo

github.com/k-dense-ai数据与数据库55.1k2.0k 次安装2 天前更新
代码仓库

关于 pymoo

pymoo 是面向 Python 用户的优化框架,支持单目标、多目标和约束问题。它提供多种进化算法、基准问题、自定义遗传算子及多准则决策工具,可用于分析帕累托权衡。

主要功能

  1. 01单目标与多目标优化
  2. 02NSGA-II、NSGA-III、MOEA/D 等算法
  3. 03约束与混合变量问题建模
  4. 04自定义遗传算子
  5. 05基准问题与结果可视化
  6. 06帕累托解集的多准则决策

适用场景

  1. 01求解具有多个冲突目标的问题
  2. 02在整数、二进制和连续变量间优化
  3. 03处理带约束的设计或参数搜索
  4. 04比较帕累托解并按偏好选择方案

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/k-dense-ai/scientific-agent-skills --skill pymoo

安装后在 Claude Code 中输入/pymoo确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
algorithms.md
constraints_mcdm.md
lifecycle.md
operators.md
parallelization.md
problems.md
quick_start_workflows.md
visualization.md
scripts/
custom_problem_example.py
decision_making_example.py
many_objective_example.py
multi_objective_example.py
single_objective_example.py

详细介绍

Pymoo - Python 中的多目标优化

概述

Pymoo 是一个全面的 Python 优化框架,重点关注多目标问题。使用最先进的算法(NSGA-II/III、MOEA/D、SPEA2)、基准问题(ZDT、DTLZ)、可定制的遗传算子以及多准则决策方法,求解单目标和多目标优化。擅长为具有冲突目标的问题寻找权衡解(Pareto 前沿)。面向稳定的 pymoo 0.6.2,于 2026-10-01 对照当前官方文档和原生玩具运行进行了审阅。

安装

uv pip install "pymoo==0.6.2"

对于可复现的环境,请固定版本:uv pip install "pymoo==0.6.2"。

依赖项: 发布的 0.6.2 wheel 需要 NumPy、SciPy、moocore、autograd、cma、matplotlib、alive_progress 和 Deprecated。支持 NumPy 2.x。当前的安装说明将某些依赖项描述为可选;发布的包元数据决定安装行为。Joblib、Optuna 和 dill 是对应配方所需的单独依赖项。

文档: https://pymoo.org/ — 对大模型友好的索引:https://pymoo.org/llms.txt

何时使用本技能

本技能应在以下情况下使用:

  • 求解单目标或多目标优化问题
  • 寻找 Pareto 最优解并分析权衡
  • 实现进化算法(GA、DE、PSO、NSGA-II/III)
  • 处理带约束的优化问题
  • 在标准测试问题(ZDT、DTLZ、WFG)上对算法进行基准测试
  • 定制遗传算子(交叉、变异、选择)
  • 可视化高维优化结果
  • 从多个相互竞争的解决方案中做出决策
  • 处理二进制、离散、连续或混合变量问题

核心概念

统一接口

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:原始不等式值(g(x) <= 0 为可行)
  • result.H:原始等式残差
  • result.CV:在配置的容差下聚合的约束违反量
  • result.algorithm:最终算法状态;在请求时会保留历史记录

在绘图或选择之前检查可行性: 如果未找到可行解,result.X 和 result.F 可能为 None。使用 return_least_infeasible=True 时,返回的候选解仍可能违反约束;请报告其 CV 和残差,而不是称其为可行。在任何归一化或修复之后,对照原始物理约束重新评估选定的候选解。参见结果契约。

问题定义风格

Pymoo 支持三种问题定义风格:

  • Problem:向量化 — _evaluate 接收一批解(矩阵)
  • ElementwiseProblem:每次调用处理一个解 — 推荐用于自定义问题和并行评估
  • FunctionalProblem:将目标和约束定义为单独的函数,无需子类化
问题类型

单目标: 一个要最小化的目标;对最大化目标取负并记录该转换 多目标: 2-3 个冲突目标 → Pareto 前沿 多目标(高维): 4 个及以上目标 → 高维 Pareto 前沿 带约束: 目标 + 不等式/等式约束 混合变量: 一个问题中同时包含连续、整数、二进制和分类变量 动态: 随时间变化的目标或约束

快速入门工作流

九个工作流和依赖上下文的适配片段位于 references/quick_start_workflows.md:

#工作流适用场景
1单目标优化单个目标,GA 或 DE
2多目标(2-3 个目标)NSGA-II 与 Pareto 前沿
3高维多目标(4+ 个目标)NSGA-III 或参考方向方法
4自定义问题定义继承 Problem / ElementwiseProblem
5约束处理不等式约束和等式约束
6基于 Pareto 前沿的决策标量化与 MCDM 选择
7可视化散点图、PCP、radviz 和热力图视图
8并行评估使用线程或 joblib 处理开销大的目标
9混合变量优化整数、二元和分类变量

算法选择指南

单目标问题
算法最适合关键特性
GA通用灵活、可自定义算子
DE连续优化良好的全局搜索能力
PSO平滑地形收敛快
CMA-ES困难/含噪问题自适应
多目标问题(2-3 个目标)
算法最适合关键特性
NSGA-II标准基准快速、可靠、经过充分测试
SPEA2基于强度/密度的生存选择基于强度的适应度,截断以保持多样性
R-NSGA-II偏好区域参考点引导
MOEA/D可分解问题标量化方法
高维多目标问题(4+ 个目标)
算法最适合关键特性
NSGA-III4-15 个目标基于参考方向
RVEA自适应搜索参考向量演化
AGE-MOEA复杂地形自适应几何
约束问题
方法算法使用时机
可行性优先NSGA-II、GA 及兼容算法存在可行候选解
专用方法SRES、ISRES约束繁重
惩罚法GA + 惩罚算法兼容性

算法选择只是起点,并不保证性能。Pymoo 的 MOEA/D 不直接支持约束。

另见: references/algorithms.md,了解算法参数和限制

基准问题

快速访问问题:
from pymoo.problems import get_problem

# Single-objective
problem = get_problem("rastrigin", n_var=10)
problem = get_problem("rosenbrock", n_var=10)

# Multi-objective
problem = get_problem("zdt1")        # Convex front
problem = get_problem("zdt2")        # Non-convex front
problem = get_problem("zdt3")        # Disconnected front

# Many-objective
problem = get_problem("dtlz2", n_obj=5, n_var=12)
problem = get_problem("dtlz7", n_obj=4)

另见: references/problems.md,了解完整的测试问题参考

遗传算子自定义

标准算子配置:
from pymoo.algorithms.soo.nonconvex.ga import GA
from pymoo.operators.crossover.sbx import SBX
from pymoo.operators.mutation.pm import PM

algorithm = GA(
    pop_size=100,
    crossover=SBX(prob=0.9, eta=15),
    mutation=PM(eta=20),
    eliminate_duplicates=True
)
按变量类型选择算子:

连续变量:

  • 交叉:SBX(模拟二进制交叉)
  • 变异:PM(多项式变异)

二元变量:

  • 交叉:TwoPointCrossover、UniformCrossover
  • 变异:BitflipMutation

排列(TSP、调度):

  • 交叉:OrderCrossover(OX)
  • 变异:InversionMutation

另见: references/operators.md,了解全面的算子参考

性能与故障排除

常见问题及解决方案:

问题:算法不收敛

  • 增大种群规模
  • 增加迭代代数
  • 检查问题是否为多峰(尝试不同算法)
  • 验证约束是否被正确表达

问题:Pareto 前沿分布不佳

  • 对于 NSGA-III:调整参考方向
  • 增大种群规模
  • 检查是否进行了重复消除
  • 验证问题缩放

问题:可行解很少

  • 使用约束即目标的方法
  • 应用修复算子
  • 对约束问题尝试 SRES/ISRES
  • 检查约束表达(应为 g <= 0)

问题:计算成本高

  • 减小种群规模
  • 减少迭代代数
  • 使用更简单的算子
  • 通过 elementwise_runner 启用并行评估(见工作流 8)
最佳实践:
  1. 使用一致的量纲和最小化符号;在归一化之前先解析常量目标列
  2. 记录随机种子和版本,然后在匹配的评估预算下比较多个随机种子
  3. 使用回调进行轻量级诊断;save_history=True 会深拷贝算法状态
  4. 可视化结果以理解解的质量
  5. 在可用时与真实 Pareto 前沿进行比较
  6. 使用合适的终止条件(代数、评估次数、容差)
  7. 根据问题特征调整算子参数

资源

本技能包含全面的参考文档和可执行示例:

references/

用于深入理解的详细文档:

  • algorithms.md:完整的算法参考,包含参数、用法和选择指南
  • problems.md:基准测试问题(ZDT、DTLZ、WFG)及其特征
  • operators.md:遗传算子(采样、选择、交叉、变异)及其配置
  • visualization.md:所有可视化类型及其示例和选择指南
  • constraints_mcdm.md:约束处理技术和多准则决策方法
  • parallelization.md:使用 StarmapParallelization 和 JoblibParallelization 进行并行评估
  • lifecycle.md:终止、回调、算法复制、检查点/恢复以及随机验证

参考文档的搜索模式:

  • 算法细节:grep -r "NSGA-II\|NSGA-III\|MOEA/D" references/
  • 约束方法:grep -r "Feasibility First\|Penalty\|Repair" references/
  • 可视化类型:grep -r "Scatter\|PCP\|Petal" references/
scripts/

演示常见工作流的可执行示例:

  • single_objective_example.py:使用 GA 的基本单目标优化
  • multi_objective_example.py:使用 NSGA-II 的多目标优化及可视化
  • many_objective_example.py:使用 NSGA-III 的高维多目标优化及参考方向
  • custom_problem_example.py:定义自定义问题(有约束和无约束)
  • decision_making_example.py:使用不同偏好的多准则决策

随附的演示使用有界的种群/代数,并不建立收敛性。原生验证覆盖了串行 GA/NSGA-II/III、约束方程、算子、MCDM/指标、线程运行器和检查点连续性。进程/分布式工作进程、动态算法、视频编码和昂贵的外部模型未执行。Pymoo 是本地 Python 库;这些工作流不需要远程 API 端点或凭据。

从技能目录运行示例(无头绘图请使用 MPLBACKEND=Agg):

python3 scripts/single_objective_example.py
python3 scripts/multi_objective_example.py
python3 scripts/many_objective_example.py
python3 scripts/custom_problem_example.py
python3 scripts/decision_making_example.py

官方评审来源:发布说明、问题定义、结果,以及各参考文档中链接的来源。

其他说明

常见模式:

  • 使用 ElementwiseProblem 处理自定义问题(或使用 FunctionalProblem 处理基于函数的定义)
  • 对混合变量问题使用带有类型化变量的 vars 字典
  • 约束公式化为 g(x) <= 0 和 h(x) = 0
  • NSGA-III 需要参考方向
  • 在 MCDM 之前对目标进行归一化
  • 使用有界终止,如 ('n_gen', N) 或 DefaultMultiObjectiveTermination(ftol=0.001, n_max_gen=100);f_tol 工厂名称已废弃
  • Das-Dennis 方向数量为 C(p + m - 1, m - 1);在选择分区数之前先确定种群大小预算
  • 获得非支配集是 Pareto 近似,而非全局最优性证明
  • PseudoWeights 匹配的是伪权重向量,而非加权和;请验证权重以及有限且变化的目标列

引用 Scientific Agent Skills

本技能是 K-Dense 出品的 Scientific Agent Skills 的一部分。如果它对一篇论文、报告、演示文稿或代码发布有实质性贡献,请将该论文加入参考文献或软件部分,并告知用户你已这样做:

Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065

请始终引用当前版本。该 DOI 和 https://arxiv.org/abs/2609.00065 都指向最新的 arXiv 版本,因此切勿附加 v1 之类的版本后缀。当有网络访问时,请在撰写参考文献前获取 https://arxiv.org/abs/2609.00065(或 http://export.arxiv.org/api/query?id_list=2609.00065),并从该记录中获取作者列表、年份和版本。如果该记录列出了期刊参考文献或出版商 DOI,请改为引用已发表版本。

评论

支持 Markdown