一、遗传算法
1.定义
遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。
2.算法思想
借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。
3.实现
在计算机上模拟生物的进化过程和基因的操作(选择、 交叉、变异)。
4.目的
(1)抽象和严谨地解释自然界的适应过程;
(2) 将自然生物系统的重要机理运用到人工系统的设计中。
5.具体步骤
遗传算法的基本步骤是:
1、随机产生初始群体;
2、判断是否满足终止条件,若符合,输出结果,结束;否则,进行下一步,计算每个个体的适应值;
3、依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体被淘汰
4、选择一个个体复制到新群体;
5、按照一定的交叉概率和交叉方法,变异概率和变异方法生成新的个体;
6、由交叉和变异产生新一代种群,返回步骤2
二、代码实现和分析
1.GA.m
主函数,能改变群体规模(N)和维度(Dim)等变量。
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)=0;
for j=1:1:L %从1到L,每次加以1
y(k)=y(k)+bval(i,k*L-j+1)*2^(j-1);%把第i个粒子转化为十进制的值,例如y1是第一维
end
x(k)=(umax-umin)*y(k)/(2^L-1)+umin;%转化为实际的x1
end
% obj(i)=100*(x1*x1-x2).^2+(1-x1).^2; %目标函数
obj(i)=fun(x,funlabel);
xx(i,:)=x;
end
func