目录
遗传算法
介绍
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
基本思想
可以参考文章->遗传算法基本思想
遗传算法说白了就是一个优胜劣汰的过程。
在种群(由经过基本编码的一定数目的个体组成)产生后,按照适者生存和优胜劣汰的基本原理,逐代演化出越来越好的近似解,每一代根据种群中的个体适应度大小挑选个体,并借助遗传算子进行组合交叉和变异,产生新的种群,这个种群比之前的种群更适应环境,末代种群中的最优异个体,可以当做问题近似最优解。
计算过程
这里将上面的基本思想的文字简化为流程图
代码实现
参数
- 种群的规模N
- 染色体长度L
- 变异概率pm:增加群体进化的多样性,决定进化过程中群体发生变异的基因的平均数。
- 交配概率pc:决定了进化过程种群参加交配的染色体平均数目pc×N。
- 进化代数
- 适应度评价:影响算法对种群的选择,恰当的评估函数应能够对染色体优劣做出合适区分,保证选择机制的有效性,从而提高群体的进化能力。
遗传算法 GA.m
% Optimizing a function using Simple Genetic Algorithm with elitist preserved
%Max f(x1,x2)=100*(x1*x1-x2).^2+(1-x1).^2; -2.0480<=x1,x2<=2.0480
%下面为代码。函数最大值为3904.9262,此时两个参数均为-2.0480,有时会出现局部极值,此时一个参数为-2.0480,一个为2.0480。变
%异概率pm=0.05,交叉概率pc=0.8。
clc;clear all;
format long;%设定数据显示格式
%初始化参数
T=500;%仿真代数
N=80;% 群体规模
pm=0.05;pc=0.8;%交叉变异概率
umax=30;umin=-30;%参数取值范围
L=10;%单个参数字串长度,总编码长度Dim*L
Dim=5;%Dim维空间搜索
bval=round(rand(N,Dim*L));%初始种群,round函数为四舍五入
bestv=-inf;%最优适应度初值
funlabel=2; %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(funlabel);%画出待优化的函数,只画出二维情况作为可视化输出
%迭代开始
for ii=1:T
%解码,计算适应度
for i=1:N %对每一代的第i个粒子
for k=1:Dim
y(k)=