网站后台数据库管理,wordpress视频防止下载,动漫设计与制作专科学校,wordpress google字体 插件储备知识
GA算法主要解决数学模型中最优化的搜索算法#xff0c;是进化算法中的一种#xff0c;基因算法借鉴了自然界基因的遗传的主要现象#xff0c;分别为遗传#xff0c;变异#xff0c;自然选择#xff0c;杂交等。
GA算法参数
GA算法的参数如下所示。
种群规模…储备知识
GA算法主要解决数学模型中最优化的搜索算法是进化算法中的一种基因算法借鉴了自然界基因的遗传的主要现象分别为遗传变异自然选择杂交等。
GA算法参数
GA算法的参数如下所示。
种群规模即一般为行数即为个体数量字符串长度会将一个变量编码成字符串一般为0-1二进制字符串交配杂交概率让适应度高的个体产生后代变量的概率更大但其他个体的概率为非负数突变概率让个体基因存在一定的突变概率一般为1e-3终止条件一般的终止条件如下所示。 循环迭代产生基因的次数计算资源使用殆尽已经找到全局最优质值一定人为干预 GA算法的流程
GA算法最重要的为适应度函数以及自变量的取值范围以及变量的个数因此代码实现流程如下所展示。 算法随机生成一定数量的个体生成初始种群的质量对每一代评价每个个体确定适应度数值产生下一代这过程包括交叉操作以及突变操作。一般按照适应度数值排序但不完全以适应度高地为导向因为有可能造成局部最优解。继续循环2-3的步骤直到满足终止条件上述已经说明 具体流程如图所示。
GA算法的适应度函数
适应度函数一般都是用目标函数确定的。目标函数即为因变量与自变量之间的映射函数。而适应度函数主要目的是确定优化的方向即为最小化还是最大化目标函数值。最小化最大化的代码如下所示。
def Function_(x, y): # Function_(x, y)为目标函数pass
def get_fitness(pop, typemin):
# get_fitness(pop, typemin)为自适应函数一般为确定min为追求最小化max为追求最大化
# xy的参数主要根据目标函数的自变量个数去确定if type is min:x,y translateDNA(pop)pred Function_(x, y)return -(pred - np.max(pred)) 1e-3elfi type is max:x,y translateDNA(pop)pred Function_(x, y)return (pred - np.min(pred)) 1e-3 GA算法的编码
此外在运用遗传算法的时候最重要的是会将自变量编码为我们所需要的字符串这个过程称之为编码编码方式为二进制编码将十进制的数字转化为二进制如5编码之后变成101。后续编码会将补全到某个特定的二进制编码如变成000000010110位二进制编码。
GA算法的遗传因子选择
选择
交叉
变异
代码实现过程
具体问题具体分析文中主要以Rosenbrock函数的极大值为例子参考了知乎某位大佬的例子遗传算法python含例程代码与详解) 该函数又称为香蕉函数。具体如图所示。 具体的函数解析式如下所示。 f ( x , y ) ( 1 − x ) 2 100 ( y − x 2 ) 2 . f(x,y)(1-x)^{2}100(y-x^{2})^{2}. f(x,y)(1−x)2100(y−x2)2. 代码
import numpy as np
import matplotlib.pyplot as plt# 适应度函数,求取最大值
#因为GA函数是求最小值所以我在适应度函数上加一个负号
#GA要求输入维度2维及其以上所以我传入2个参数第二维x2不用,
def fitness(y, x):# x1, x2 x# return -(x1 16 * np.sin(5 * x1) 10 * np.cos(4 * x1))return -(100.0 * (y - x ** 2.0) ** 2.0 (1 - x) ** 2.0)# 个体类
from sko.GA import GA
up_bound [2.048, 2.048]
low_boound [-2.048, -2.048]
n_dim 2
iter_num 800
precision 1e-7
size_pop 50
ga GA(funcfitness, n_dimn_dim, size_popsize_pop, max_iteriter_num, lblow_boound, ubup_bound, precisionprecision)
# 具体代码的修改需要根据n_dim以及lb和ub的个数个人理解lb是下限ub为上限此外修改为适应度函数的时候需要注意即为修改以及调整适应度函数的自变量个数以及表达式
best_x, best_y ga.run()
# best_x 输出的是坐标所以就是为一个元组best_y为因变量所以输出是一个数值
print(best_x:, best_x[0], \n, best_y:, -best_y)def func(y, x):# return x 16 * np.sin(5 * x) 10 * np.cos(4 * x)return 100.0 * (y - x ** 2.0) ** 2.0 (1 - x) ** 2.0# 绘制二维图像
# x np.linspace(-10, 10, 100000)
# y func(x)
#
# plt.plot(x, y)
# plt.scatter(best_x[0], -best_y, cr, labelbest point)# 绘制三维图像
ax3 plt.axes(projection3d)
X np.linspace(low_boound[0], up_bound[0], 100)
Y np.linspace(low_boound[1], up_bound[1], 100)
X, Y np.meshgrid(X, Y)
Z 100.0 * (Y - X ** 2.0) ** 2.0 (1 - X) ** 2.0
# plt.scatter(best_x[0], best_x[1], -best_y, cr, labelbest point)
ax3.scatter(best_x[0], best_x[1], -best_y, cr, labelbest point)
ax3.plot_surface(X, Y, Z, cmaprainbow)
# # ax3.contour(X, Y, Z, zdimz,offset-2, cmaprainbow) #等高线图要设置offset为Z的最小值
plt.legend()
plt.show()最终绘制结果如下所示。
参考
维基百科遗传算法介绍 matlab遗传算法介绍——寻找高度非线性问题的全局极小值 遗传算法python含例程代码与详解)(知乎 遗传算法python进阶理解论文复现纯干货附前人总结引路