geatpy 是一个基于 Python 的进化计算开源工具箱,主要用于解决复杂优化问题,它由北京航空航天大学自动化科学与电气工程学院的宋守许教授团队开发,广泛应用于遗传算法(GA)、进化策略(ES)、差分进化(DE)等进化计算领域。
📌 简介
- 全称:Genetic and Evolutionary Algorithm Toolbox for Python
- GitHub 地址:https://github.com/geatpy-dev/geatpy
- 安装方式:
pip install geatpy
✅ 主要功能
geatpy 提供了完整的进化计算框架,包括:
-
种群表示与操作
- 支持实数编码、整数编码、排列编码等
- 提供染色体编码/解码工具
-
选择算子
轮盘赌选择、锦标赛选择、随机抽样等
-
交叉算子
实数交叉、整数交叉、部分匹配交叉(PMX)等
-
变异算子
高斯变异、多项式变异、交换变异等
-
重插入机制
支持多种重插入策略,如精英保留
-
终止条件
最大迭代次数、目标函数值收敛等
-
可视化与结果分析
提供绘图工具,便于观察进化过程
🧪 示例:使用遗传算法求解函数最大值
以下是一个简单的示例,使用 geatpy 实现一个基本的遗传算法来最大化函数 $ f(x) = x cdot sin(10pi cdot x) + 2 $,$ x in [-1, 2] $。
定义问题
import numpy as np
import geatpy as ea
# 目标函数
def aimfunc(self, phen):
x = phen[:, 0:1]
y = x np.sin(10 np.pi x) + 2
return y
# 创建问题类
class MyProblem(ea.Problem):
def __init__(self):
name = 'MyProblem'
M = 1 # 目标维度
Dim = 1 # 决策变量维度
varTypes = [0] # 0表示实数变量

lb = [-1] # 下界
ub = [2] # 上界
lbin = [1] # 是否包含下界
ubin = [1] # 是否包含上界
ea.Problem.__init__(self, name, M, Dim, varTypes, lb, ub, lbin, ubin)
def aimfunc(self, self, pop):
# 获取解码后的表型坐标
phen = pop.Phen
# 计算目标函数值
y = phen[:, 0:1] np.sin(10 np.pi phen[:, 0:1]) + 2
return y, None # 返回目标函数值和约束违反度(此处无约束)
构建算法并运行
# 创建问题实例
problem = MyProblem()
# 创建种群对象
Population = ea.Population(Encoding='RI', Nind=50, Field=problem.Field)
# 创建算法对象
algorithm = ea.soea_GA_TPE_templet(problem, Population)
algorithm.MAXGEN = 200 # 最大迭代次数
algorithm.mutOper.Fnames = ['mutDE'] # 使用差分进化变异算子
algorithm.recOper.Fnames = ['xovdp'] # 使用离散交叉算子
algorithm.logTras = [1, 0, 0] # 每代记录日志
# 运行算法
[Pop, _] = algorithm.run()
best_gen = Pop.Chrom[np.argmin(Pop.ObjV)]
print("最优解:", best_gen)
📊 可视化结果
geatpy 提供了强大的绘图功能,可以可视化进化过程:
import matplotlib.pyplot as plt # 绘制目标函数曲线 x = np.linspace(-1, 2, 1000) y = x np.sin(10 np.pi x) + 2 plt.plot(x, y, label='f(x)') plt.scatter(best_gen[0], best_gen[1], color='red', label='Best Solution') plt.legend() plt.show()
📚 学习资源
- 官方文档:https://geatpy.com/
- 示例代码:GitHub 仓库中的
examples目录 - 论文参考:宋守许等人发表的关于 geatpy 的学术论文
⚠️ 注意事项
- geatpy 主要面向进化计算研究者,API 设计较为底层,适合有一定算法基础的用户。
- 对于初学者,建议从官方示例入手,逐步理解种群、染色体、算子等核心概念。
- 若需要更高级的优化功能(如多目标优化),geatpy 也提供了相应支持。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/478271.html



