为何收录

遗传算法是一类不依赖梯度的全局搜索方法,适合目标函数不可导、含离散变量或存在多个局部最优的问题。科研中常见的用法包括:标定仿真模型参数,让模拟输出贴近观测数据;从大量变量中挑选特征子集;调整机器学习模型的超参数;在工程设计中同时权衡几个相互冲突的目标。PyGAD 的门槛较低,研究者只需用 Python 写出“给定一组参数,算出一个分数”的函数,就能接上现成的选择、交叉、变异算子和 NSGA-II、NSGA-III 多目标算法,比从头实现一套遗传算法省事,也便于在论文中交代所用的算子和参数。

这几个版本对已有研究的直接意义在于复核。选择和交叉中的偏差不会让程序报错,收敛曲线也可能照常下降,但实际的搜索过程已经偏离算法的定义。如果过去的实验在旧版 PyGAD 中用了排序选择、SBX 交叉、两点交叉或交换变异,或者在轮盘赌选择、随机通用抽样中使用过负适应度(例如把误差取负作为适应度来做最小化),或者给基因指定了窄整数类型,建议在新版本下重跑关键实验,比较最优解和适应度有没有实质变化。3.8.0 起的实例级随机数生成器和检查点中保存的随机状态,也让“固定版本加固定种子”的复现更可靠。由于同一个种子在不同版本间不会给出相同结果,论文方法部分应写明所用 PyGAD 的具体版本号。

局限与使用注意

遗传算法是启发式方法,不保证找到全局最优,结果依赖种群规模、代数、变异率等设置,通常需要用多个随机种子重复运行并报告结果分布,而不是只报一次最好成绩。总耗时主要取决于适应度函数本身:如果每次评估都要跑一次仿真或训练一个模型,评估次数很快会成为瓶颈,PyGAD 的线程和进程并行可以分摊等待时间,但不会降低单次评估的成本。用遗传算法训练神经网络是一种不需要梯度的做法,面对参数量大的深度模型时,基于梯度的训练通常效率更高。维护方面,pyproject.toml 中列出的作者和维护者都是 Ahmed Gad 一人;10 月 9 日至 16 日的一周里发布了 3.8.0 到 3.9.2 共五个版本,修复节奏快,也意味着行为变化频繁。建议在依赖文件中锁定具体版本,升级前逐条阅读发布说明。

想判断升级对自己实验的影响,可以先做一个小规模核对(建议做法,本文未执行):选一个已知最优解的测试函数,固定随机种子,分别在原先使用的旧版本和当前最新版本下,用排序选择和轮盘赌选择各运行若干次,记录每代被选为父代的个体在种群中的适应度排名,再比较最终最优解。如果新版本中排名靠前的个体被选中的频率明显上升,说明旧实验受到了选择偏差的影响,正式实验值得重跑。

参考文献

  1. Ahmed Fawzy Gad 等. ahmedfgad/GeneticAlgorithmPython:GitHub 仓库及 LICENSE(BSD-3-Clause),2026-10-21 访问。

  2. PyGAD 3.8.0 发布说明,2026-10-09。

  3. PyGAD 3.8.1 发布说明,2026-10-11。

  4. PyGAD 3.9.0、3.9.1、3.9.2 发布说明,2026-10-16。

  5. PyGAD 官方文档,2026-10-21 访问。

  6. PyGAD pyproject.toml,2026-10-21 访问。

  7. Gad A F. PyGAD: an intuitive genetic algorithm Python library. Multimedia Tools and Applications, 83: 58029–58042(2023-12-19 在线发表). doi:10.1007/s11042-023-17167-y

  8. 信息由 Scholay 学术一站式平台 整理并发表,如有侵权请反馈下架。

  9. 信息同步发表于恩特学术,智能时代的学者社区