开发与贡献#
目录与环境#
路径 |
内容 |
|---|---|
|
算法实现与公开导出 |
|
选择与可复用算子 |
|
数值、约束与神经进化问题 |
|
算法、问题与监视器的连接 |
|
解集质量指标 |
|
张量、评估结果与状态辅助工具 |
|
算法、算子与问题测试 |
|
本文档、示例与构建配置 |
先检查已有 Python 环境和 CUDA 配置,再安装可编辑包和开发工具:
python -m pip install -e .
python -m pip install pytest ruff
扩展算法#
继承 EvoX 的 Algorithm,按照现有实现管理可变状态。种群、适应度与其他逐代更新数据
遵循 Mutable 模式;首次评估后才确定形状的 buffer 可以参考
evomo.utils.register_lazy_buffer。在工作流提供的 evaluate 中调用问题,
在 init_step 初始化状态,在 step 实现每代更新。
新增公开算法时更新 src/evomo/algorithms/__init__.py 的导入及 __all__,
保持类名和构造接口清晰。算法的 selection_op 等参数应明确调用契约,不能只说明“可替换算子”。
文档和论文引用随实现一并更新。
张量实现约定#
保留设备和 dtype;常量使用输入张量的设备,避免隐藏的 CPU 分配。
优先批量计算;编译热路径减少
.item()、张量驱动的 Python 分支和动态大小索引。使用固定形状掩码及 scatter/gather 等操作时,保持原算法的排序、选择和更新语义。
非支配等级从 0 开始,不用布尔选择掩码替代等级。
约束问题的违反量应贯穿评估、比较、选择与状态更新。
新增可选后端之前阅读非支配排序后端说明,保持 PyTorch 默认路径。
验证改动#
在仓库根目录运行相关测试,例如:
python -m pytest unit_test/problems/test_dtlz.py -q
python -m pytest unit_test/operators/test_non_dominate.py -q
python -m pytest unit_test/algorithms/test_moea.py -q
选择与归一化改动应覆盖重复点、常量目标、退化目标范围、非有限值和约束处理。
涉及编译的代码同时验证 eager 与 compiled;先初始化工作流再编译 step。
区分工具链或设备不支持与算法错误,按实际验证范围报告结果。
只对修改的 Python 文件执行检查,示例如下:
python -m ruff check src/evomo/algorithms/nsga2.py
python -m ruff format --check src/evomo/algorithms/nsga2.py
项目使用 128 字符行长和 LF 换行。保持改动范围,保留无关用户修改。 实验脚本与产物独立存放,不提交本地环境、缓存或临时性能数据。
维护文档#
安装独立的文档依赖并将警告视为构建失败:
python -m pip install -r docs/requirements.txt
python -m sphinx -b html -W --keep-going docs docs/_build/html
API 参考通过源码静态解析生成,不需要导入 PyTorch、Brax 或 JAX。
英文主文档位于 docs/,中文版位于 docs/zh_CN/,章节文件名与相对路径一一对应。
新增或修改教程时同步更新两种语言的参数、公式、限制和示例,并更新两版首页导航。
页面的语言切换会按路径查找对应章节;自动生成的英文 API 页为两种语言共用。
教程使用 MyST Markdown;完整代码放在 docs/examples/,正文通过 literalinclude 引用。
英文指南使用 ../examples/,中文指南使用 ../../examples/,确保引用同一份代码。
修改示例后检查实际导入、形状和设备。
文档构建不执行示例,构建成功不代表运行或 GPU/编译验证成功。
更多构建文件说明见仓库中的 docs/README.md。.readthedocs.yaml 提供 Read the Docs
构建配置,线上发布需在服务中连接仓库。