多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现
来源:互联网 发布:淘宝美工需要注意什么 编辑:程序博客网 时间:2024/05/20 14:23
算法原理
自适应遗传算法是交叉概率和变异概率能够随使用度自动改变,以求得相对某个解的最佳交叉概率和变异概率。本算法是在自适应遗传算法中引进多变异位,以增加种群的多样性。
自适应遗传算法中的交叉概率和变异概率的计算公式为:
多变异位是指变异位的二进制表示的编码的多个位取反。
算法步骤
1、随机产生种群,
2、用轮盘赌策略确定个体的适应度,判断是否符合优化准则,若符合,输出最佳个体及其最优解,结束,否则,进行下一步
3、依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体被淘汰
4、按照一定的交叉概率和交叉方法,生成新的个体
5、通过自适应方法产生变异概率,若最大适应率等于最小适应率,则只产生一个变异位,否则,随机产生变异位的个数和位置,对选中的个体进行变异
6、由交叉和变异产生新一代种群,返回步骤2
算法的matlab实现
% 解决一维无约束优化问题:多变异位自适应遗传算法function [ xv,fv ] = MMAdapGA( fitness,a,b,NP,NG,Pc1,Pc2,Pm1,Pm2,eps )% 待优化的目标函数:fitness% 自变量下界:a% 自变量上界:b% 种群个体数:NP% 最大进化代数:NG% 杂交常数1:Pc1% 杂交常数2:Pc2% 变异常数1:Pm1% 变异常数2:Pm2% 自变量离散精度:eps% 目标函数取最大值是的自变量值:xv% 目标函数的最小值:fvL=ceil(log2((b-a)/eps+1)); %码长x=zeros(NP,L);for i=1:NP x(i,:)=Initial(L); fx(i)=fitness(Dec(a,b,x(i,:),L));endfor k=1:NG sumfx=sun(fx); Px=fx/sumfx; PPx=0; PPx(1)=Px(1); for i=2:NP %根据轮盘赌确定父亲 PPx(i)=PPx(i-1)+PPx(i); end for i=1:NP sita=rand(); for n=1:NP if sita <=PPx(n) SelFather = n; break; end end Selmother=floor(rand()*(NP-1))+1; %随机选择母亲 posCut=floor(rand()*(L-2))+1; %随机确定交叉点 favg=sumfx/NP; fmin=min(fx); fmax=max(fx); Fitness_f=fx(SelFather); Fitness_m=fx(Selmother); Fm=max(Fitness_f,Fitness_m); if Fm>=favg Pc=Pc1*(fmax-Fm)/(fmax-favg); else Pc=Pc2; end r1=rand(); if ra<=Pc nx(i,1:posCut)=x(SelFather,1:posCut); nx(I,(posCut+1):L)=x(Selmother,(posCut+1):L); fmu=fitness(Dec(a,b,nx(i,:),L)); if r1<=Pc Pm=Pm1*(fmax-fmu)/(fmax-favg); else Pm=Pm2; end r2=rand(); if r2<=Pm %变异 if fmax~=fmin numMut=round(L*(fmax-fmu)/(fmax-fmin)/3); else numMut=1; end intArr=1:L; posMut=zeros(1,numMut); for j=1:numMut tmp=round(rand()*(L-j)+1); posMut(j)=intArr(tmp); intArr=[intArr(1:tmp-1)) intArr((tmp+1):(L-j+1))]; end for j=1:numMut nx(i,posMut(j))=~nx(i,posMut(j)); end end else nx(i,:)=x(SelFather,:); end end x=nx; for i=1:NP fx(i)=fitness(Dec(a,b,x(i,:),L); endendfv=-inf;for i=1:NP fitx=fitness(Dec(a,b,x(i,:),L)); if fitx > fv fv=fitx; xv=Dec(a,b,x(i,:),L); endendendfunction result=Initial(length) %初始化函数 for i=1:length r=round(); result(i)=round(r); endendfunction y=Dec(a,b,x,L) %二进制转十进制 base=2.^((L-1):-1:0); y=dot(base,x); y=a+y*(b-1)/(2^L-1)'end
0 0
- 多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现
- 基本遗传算法(GA)的算法原理、步骤、及Matlab实现
- 遗传算法的基本原理和matlab实现
- 遗传算法的基本原理和matlab实现
- 遗传算法的matlab实现
- 遗传算法的matlab实现
- 遗传算法的matlab实现
- 遗传算法的matlab实现
- Matlab实现遗传算法
- 遗传算法(GA)的matlab实现
- 遗传算法的matlab实现(续 )
- 遗传算法的原理
- 简单遗传算法MATLAB实现
- 简单遗传算法MATLAB实现
- 简单遗传算法MATLAB实现
- 多变量灰色预测模型算法的MATLAB实现
- 自适应遗传算法
- 遗传算法原理与实现
- python opencv 显示直方图
- CSU - 1209 Three Jugs
- eclipse mars 及以上安装 velocity 插件
- UIView和CALayer的区别
- POJ2653->判断线段相交
- 多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现
- Struts数据验证
- maven项目创建:cmd创建项目再导入eclipse开发工具
- hive 使用TEZ的安装配置
- 《Java编程思想第四版》笔记---15章(2)泛型类型擦除
- win下Java开发环境搭建
- Java设计模式之模板方法模式
- 2016 Multi-University Training Contest 3
- list<JavaBean>、Set<JavaBean>如何去除重复数据