之前我们手动实现了 遗传算法。交叉进化算法也是进化算法的一种,他具有参数少,易实现的优点(经测试,由于算法特性,暂时不能像遗传算法一样拟合图片),我们将通过拟合函数来介绍交叉进化算法
依赖包
我们用random来生成随机数,matplotlib画图,同时设置rcParams来保证正常显示中文标签
from random import randint, random
import matplotlib.pyplot as plt
import numpy as np
import os
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
超参数
我们用max_group表示种群中个体数;savePath来确定图像保存位置;feature即特征数,即函数由几个参数构成;F0为初始变异算子,后续会根据labda进行调整,后续的正在的变异算子F由F0和labda得出
其关系式为 : λ = e 1 − G m G m + 1 − G F = F 0 × 2 λ 其中 G m 为最大迭代次数, G 为当前迭代次数 第一次迭代 F 的值接近 2 F 0 , 随后逐渐接近 F 0 其关系式为: \\ \lambda=e^{1- \frac{G_m}{G_m + 1 -G}} \\ F=F0 \times2 ^{\lambda} \\ 其中G_m为最大迭代次数,G为当前迭代次数 \\ 第一次迭代F的值接近2F0, 随后逐渐接近F0 其关系式为:λ=e1−Gm+1−GGmF=F0×2λ其中Gm为最大迭代次数,G为当前迭代次数第一次迭代F的值接近2F0,随后逐渐接近F0
max_group = 50 # 种群中个体数
savePath = "./plt_image"
features = 2 # 个体特征数
F0 = 0.5 # 初始变异算子
CR = 0.1 # 交叉算子
epochs = 100
lower_range = -6
upper_range = 6
labda = np.e **