遗传算法简介: 该算法是一种进化算法,其基本原理是效仿生物界中的“物竞天择,适者生存”的演化原则,遗传算法是把问题参数编码为染色体,然后利用迭代的方式进行选择、交叉以及变异等运算来交换群中染色体的信息最终生成符合优化目标的染色体。 在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串各个位置对应的基因的取值。基因组成的串就是染色体、或者称为基因型个体。一定数量的个体组成了群体。群体中个体的数目称为群体大小,也成为群体规模,而各个个体对应的适应程度叫做适应度。 ** 遗传算法的步骤:**
- 编码:将解空间的解数据表示成遗传算法的基因型串数据,串数据的组合便构成了解
- 初始种群产生:随机产生N个基因型串数据,这N个染色体构成一个群体
- 适应度评估:评价染色体个体的优劣性
- 选择:从群体中选择出好的染色体,让它们生存下去,这样有机会把优良的基因遗传给子代。
- 交叉:使用基因型的交叉可以得到新一代的个体
- 变异::变异首先在群体种随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中的某个值。
在Matlab中可以使用遗传算法工具箱(gatbx),关于工具箱安装我会出一个具体的博文。 介绍一下遗传算法工具箱的主要函数列表:
函数分类
函数
功能
选择函数
reins
一致随机和基于适应度的重插入
rws
轮盘选择
select
高级选择例程
sus
随机便利采样
交叉算子
recdis
离散重组
recint
中间重组
recline
线性重组
recmut
具有变异特征的线性重组
recombin
高级重组算子
xovdp
两点交叉算子
xovdprs
减少代理的两点交叉
xovmp
通常多点交叉
xovsh
洗牌交叉
xovshrs
减少代理的洗牌交叉
xovsp
单点交叉
xovsprs
减少代理的单点交叉
变异算子
mut
离散变异
mutate
高级变异函数
mutbga
减少代理的单点交叉
子种群的支持
migrate
在子种群间交换个体
实用函数
bs2rv
二进制串到实值的转换
rep
矩阵的复制
创建种群
crtbase
创建基向量
crtbp
创建任意离散随机种群
crtrp
创建实值初始种群
硬度计算
ranking
基于排序的适用度分配
scaling
比率适应度计算
先用遗传算法解决简单的一元函数求最小值的问题: 参数设置
种群大小
最大遗传代数
个体长度
代沟
交叉概率
变异概率
40
20
20
0.95
0.7
0.01
代沟:上一代总数为100,通过选择之后剩下80(舍弃20),代沟 = 80/100 = 0.8 这里给出代码和注解:
1 | clc |
结果:(这里是进行30次的结果) 有上面的结果可以看出随着迭代次数的增加,结果趋于稳定,我自己也试了迭代100次的结果到后面几乎就是一条平的线。