1、遗传算法简介
遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是用于解决最优化问题的一种搜索算法。它是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
2、问题引入
遗传算法是用来解决最优化问题的,下面以求一个二元函数在 x∈[−3,3],y∈[−3,3] 范围里的最大值为例子来详细讲解遗传算法的每一步。选取的二元函数为:
def F(x,y):
return 3*(1-x)**2*np.exp(-(x**2)-(y+1)**2)- 10*(x/5 - x**3 - y**5)*np.exp(-x**2-y**2)- 1/3**np.exp(-(x+1)**2 - y**2)
将函数可视化,可视化代码和运行结果如下:
%matplotlib notebook # 为使结果图能旋转,本次使用的编辑器为jupyter notebook
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams["axes.unicode_minus"] = False
def F(x,y):
return 3*(1-x)**2*np.exp(-(x**2)-(y+1)**2)- 10*(x/5 - x**3 - y**5)*np.exp(-x**2-y**2)- 1/3**np.exp(-(x+1)**2 - y**2)
x = np.arange(-3, 3, 0.01) # 可视化的 x 坐标范围
y = np.arange(-3, 3, 0.01) # 可视化的 y 坐标范围
# 生成 x-y 平面采样网格点,方便可视化
X,Y = np.meshgrid(x,y)
Z = F(X,Y) # 计算网格点上的函数值
ax = plt.axes(projection='3d')
ax.plot_surface(X,Y,Z,cmap='rainbow') # 3D 曲面图
ax.view_init(60, -30)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

可以很容易发现函数在这个局部的最大值大概在当x ≈ 0 , y ≈ 1.5 时,函数值取得最大值,而这里的 x , y 的取值就是我们最后想要得到的结果。
3、相关概念介绍以及实现代码
为了更能方便理解遗传算法,这里需要

最低0.47元/天 解锁文章
23万+

被折叠的 条评论
为什么被折叠?



