遗传算法(Ga函数优化——多维)理解
遗传算法的概念
进化计算(Evolutionary Computation,EC)是 在达尔⽂(Darwin)的进化论和孟德尔(Mendel) 的遗传变异理论的基础上产⽣的⼀种在基因和种 层次上模拟⾃然界⽣物进化过程与机制的问题求解 技术。
它主要包括 繁殖(Reproduction) 变异(Mutation) 竞争(Competition) 选择(Selection)
实现
在计算机上模拟⽣物的进化过程和基因的操作(选择、 交叉、变异)。
Ga函数
术语代码中的意思
体遗传算法中初始给定的解的集合(体规模N)
种在本算法中认为每⼀代解的集合都是⼀个种(N)
个体种中的每⼀个解都是⼀个个体
适应能⼒个体的适应值
染⾊体个体的⼆进制编码
基因个体⼆进制编码的每⼀个位都是⼀个基因
基因重组⼆进制编码(在pc概率下的)基因交换
基因突变⼆进制编码(在pmx编码长度x种⼤⼩概率下)⼀个基因点的改变
pc设置的交叉率
pm设置的基因突变率
⼀算法流程
1. 产⽣初始体
2. 染⾊体⼆进制编码
3. ⽤适应函数计算个体适应值
4. ⽤赌选择个体,复制到新体中
5. 进⾏基因重组
6. 进⾏基因变异
7. 得到新的种
1.1产⽣初始体
随机数⽣成
1.2染⾊体⼆进制编码
受到⼈类染⾊体结构的启发,我们可以设想⼀下,假设⽬前只有“0”,“1”两种碱基,我们也⽤⼀条链条把他们有序的串连在⼀起,因为每⼀个单位都能表现出 1 bit的信息量,所以⼀条⾜够长的染⾊体就能为我们勾勒出⼀个个体的所有特征。这就是⼆进制编码法
1.3适应值计算
适应度函数计算后返回的值作为适应值
1.4赌选择法
p(xi)i个个体的选择概率
f(xi)i个个体的适应值
从统计⾓度看,个体 的适应度值越⼤,其对 应的扇区的⾯积越⼤, 被选中的可能性也越⼤。 这种⽅法有点类似于发 放奖品使⽤的,并 带有某种赌博的意思, 因此亦被称为赌选择。
1.5基因重组
⼆进制编码的基因交换过程⾮常类似⾼中⽣物中所讲的同源染⾊体的联会过程――随机把其中⼏个位于同⼀位置的编码进⾏交换,产⽣新的个体。
本算法采⽤单点交叉
1.6基因变异
基因突变过程:基因突变是染⾊体的某⼀个位点上基因的改变。基因突变使⼀个基因变成它的等位基因,并且通常会引起⼀定的表现型变化。正如上⾯所说,⼆进制编码的遗传操作过程和⽣物学中的过程⾮常相类似,基因串上的“ 0”或“ 1”有⼀定⼏率变成与之相反的“1”或“ 0”。例如
11011->11010
1.7产⽣新种
重复4,5,6直到新种的产⽣
⼆ Matlab中的算法演⽰
主函数Ga.m
初始体的设置
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=obj;%⽬标函数转换为适应度函数
p=func./sum(func);
q=cumsum(p);%累加
[fmax,indmax]=max(func);%求当代最佳个体
if fmax>=bestv
bestv=fmax;%到⽬前为⽌最优适应度值
bvalxx=bval(indmax,:);%到⽬前为⽌最佳位串
optxx=xx(indmax,:);%到⽬前为⽌最优参数
end
Bfit1(ii)=bestv;%存储每代的最优适应度
赌选择法
for i=1:(N-1)
r=rand;
tmp=find(r<=q);
newbval(i,:)=bval(tmp(1),:);
end
newbval(N,:)=bvalxx;%最优保留
bval=newbval;
基因重组
cc=rand;
if cc<pc
point=ceil(rand*(2*L-1));%取得⼀个1到2L-1的整数
ch=bval(i,:);
bval(i,point+1:2*L)=bval(i+1,point+1:2*L);
bval(i+1,point+1:2*L)=ch(1,point+1:2*L);
end
round函数有几个参数end
bval(N,:)=bvalxx;%最优保留
基因突变
%位点变异
mm=rand(N,Dim*L)<pm;%N⾏
mm(N,:)=zeros(1,Dim*L);%最后⼀⾏是精英不变异,强制赋0 bval(mm)=1-bval(mm);
end
输出结果
figure;
plot(-Bfit1);%绘制最优适应度进化曲线
bestv %输出最优适应度值
optxx %输出最优参数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论