收藏 分享(赏)

三个遗传算法matlab程序实例.doc

上传人:tangtianxu1 文档编号:3083221 上传时间:2018-10-03 格式:DOC 页数:12 大小:21.43KB
下载 相关 举报
三个遗传算法matlab程序实例.doc_第1页
第1页 / 共12页
三个遗传算法matlab程序实例.doc_第2页
第2页 / 共12页
三个遗传算法matlab程序实例.doc_第3页
第3页 / 共12页
三个遗传算法matlab程序实例.doc_第4页
第4页 / 共12页
三个遗传算法matlab程序实例.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、遗传算法程序(一):说明: fga.m 为遗传算法的主程序 ; 采用二进制 Gray 编码 ,采用基于轮盘赌法的非线性排名选择, 均匀交叉 ,变异操作,而且还引入了倒位操作!function BestPop,Trace=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % BestPop,Trace=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables.% fma

2、xga solves problems of the form: % max F(X) subject to: LB 0)error(数据输入错误 ,请重新输入 (LB1 时,b(i)=mod(a(i-1)+a(i),2)%其中原二进制串:a(1)a(2).a(n),Gray 串:b(1)b(2).b(n)initpop(i,:)=pop(1:end-1);endinitpop(popsize,:)=ones(1,len);%The whole one encoding individual%解码function fval = b2f(bval,bounds,bits) % fval - 表征

3、各变量的十进制数% bval - 表征各变量的二进制编码串% bounds - 各变量的取值范围% bits - 各变量的二进制编码长度scale=(bounds(:,2)-bounds(:,1)./(2.bits-1); %The range of the variablesnumV=size(bounds,1);cs=0 cumsum(bits); for i=1:numVa=bval(cs(i)+1):cs(i+1);fval(i)=sum(2.(size(a,2)-1:-1:0).*a)*scale(i)+bounds(i,1);end%选择操作%采用基于轮盘赌法的非线性排名选择%各个

4、体成员按适应值从大到小分配选择概率:%P(i)=(q/1-(1-q)n)*(1-q)i, 其中 P(0)P(1).P(n), sum(P(i)=1function selectpop=NonlinearRankSelect(FUN,pop,bounds,bits) global m nselectpop=zeros(m,n);fit=zeros(m,1);for i=1:mfit(i)=feval(FUN(1,:),(b2f(pop(i,:),bounds,bits);%以函数值为适应值做排名依据endselectprob=fit/sum(fit);%计算各个体相对适应度(0,1)q=max(

5、selectprob);%选择最优的概率x=zeros(m,2);x(:,1)=m:-1:1;y x(:,2)=sort(selectprob);r=q/(1-(1-q)m);%标准分布基值newfit(x(:,2)=r*(1-q).(x(:,1)-1);%生成选择概率newfit=cumsum(newfit);%计算各选择概率之和rNums=sort(rand(m,1);fitIn=1;newIn=1;while newIn=pCross);len=length(y1);if len2y1(len)=;endif length(y1)=2for i=0:2:length(y1)-2if op

6、ts=0NewPop(y1(i+1),:),NewPop(y1(i+2),:)=EqualCrossOver(OldPop(y1(i+1),:),OldPop(y1(i+2),:);elseNewPop(y1(i+1),:),NewPop(y1(i+2),:)=MultiPointCross(OldPop(y1(i+1),:),OldPop(y1(i+2),:);endend endNewPop(y2,:)=OldPop(y2,:);%采用均匀交叉function children1,children2=EqualCrossOver(parent1,parent2)global n child

7、ren1 children2 hidecode=round(rand(1,n);%随机生成掩码crossposition=find(hidecode=1);holdposition=find(hidecode=0);children1(crossposition)=parent1(crossposition);%掩码为 1,父 1 为子 1 提供基因children1(holdposition)=parent2(holdposition);%掩码为 0,父 2 为子 1 提供基因children2(crossposition)=parent2(crossposition);%掩码为 1,父 2

8、 为子 2 提供基因children2(holdposition)=parent1(holdposition);%掩码为 0,父 1 为子 2 提供基因%采用多点交叉,交叉点数由变量数决定function Children1,Children2=MultiPointCross(Parent1,Parent2)global n Children1 Children2 VarNumChildren1=Parent1;Children2=Parent2;Points=sort(unidrnd(n,1,2*VarNum);for i=1:VarNumChildren1(Points(2*i-1):Po

9、ints(2*i)=Parent2(Points(2*i-1):Points(2*i);Children2(Points(2*i-1):Points(2*i)=Parent1(Points(2*i-1):Points(2*i);end%变异操作function NewPop=Mutation(OldPop,pMutation,VarNum)global m n NewPopr=rand(1,m);position=find(r=1for i=1:lenk=unidrnd(n,1,VarNum); %设置变异点数,一般设置 1 点for j=1:length(k)if OldPop(positi

10、on(i),k(j)=1OldPop(position(i),k(j)=0;elseOldPop(position(i),k(j)=1;endendendendNewPop=OldPop;%倒位操作function NewPop=Inversion(OldPop,pInversion)global m n NewPopNewPop=OldPop;r=rand(1,m);PopIn=find(r=1for i=1:lend=sort(unidrnd(n,1,2);if d(1)=1NewPop(PopIn(i),d(1):d(2)=OldPop(PopIn(i),d(2):-1:d(1);New

11、Pop(PopIn(i),d(2)+1:n)=OldPop(PopIn(i),d(2)+1:n);endendend遗传算法程序(二):function youhuafunD=code; N=50; % Tunable maxgen=50; % Tunable crossrate=0.5; %Tunable muterate=0.08; %Tunable generation=1; num = length(D); fatherrand=randint(num,N,3); score = zeros(maxgen,N); while generation1450)|(min(F2)best.m

12、ax_fadvance_k=advance_k+1;x_better(advance_k)=fitness.x;best.max_f=max(f);best.popus=popus;best.x=fitness.x;endif mod(advance_k,SPEEDUP_INTER)=0RANGE=minmax(x_better);RANGEadvance=0;end endreturn;function popus=init%初始化M=50;%种群个体数目N=30;%编码长度popus=round(rand(M,N);return;function fitness=fit(popus,RAN

13、GE)%求适应度M,N=size(popus);fitness=zeros(M,1);%适应度f=zeros(M,1);%函数值A=RANGE(1);B=RANGE(2);%初始取值范围0 255for m=1:Mx=0;for n=1:Nx=x+popus(m,n)*(2(n-1);endx=x*(B-A)/(2N)+A;for k=1:5f(m,1)=f(m,1)-(k*sin(k+1)*x+k);endendf_std=(f-min(f)./(max(f)-min(f);%函数值标准化fitness.f=f;fitness.f_std=f_std;fitness.x=x;return;f

14、unction picked=choose(popus,fitness)%选择f=fitness.f;f_std=fitness.f_std;M,N=size(popus);choose_N=3; %选择 choose_N 对双亲picked=zeros(choose_N,2); %记录选择好的双亲p=zeros(M,1); %选择概率d_order=zeros(M,1);%把父代个体按适应度从大到小排序f_t=sort(f,descend);%将适应度按降序排列for k=1:Mx=find(f=f_t(k);%降序排列的个体序号d_order(k)=x(1);endfor m=1:Mpop

15、us_t(m,:)=popus(d_order(m),:);endpopus=popus_t;f=f_t;p=f_std./sum(f_std); %选择概率c_p=cumsum(p); %累积概率for cn=1:choose_Npicked(cn,1)=roulette(c_p); %轮盘赌picked(cn,2)=roulette(c_p); %轮盘赌popus=intercross(popus,picked(cn,:);%杂交endpopus=aberrance(popus,picked);%变异return;function popus=intercross(popus,picked

16、) %杂交M_p,N_p=size(picked);M,N=size(popus);for cn=1:M_pp(1)=ceil(rand*N);%生成杂交位置p(2)=ceil(rand*N);p=sort(p);t=popus(picked(cn,1),p(1):p(2);popus(picked(cn,1),p(1):p(2)=popus(picked(cn,2),p(1):p(2);popus(picked(cn,2),p(1):p(2)=t;endreturn;function popus=aberrance(popus,picked) %变异P_a=0.05;%变异概率M,N=siz

17、e(popus);M_p,N_p=size(picked);U=rand(1,2);for kp=1:M_pif U(2)=P_a %如果大于变异概率,就不变异continue;endif U(1)=0.5a=picked(kp,1);elsea=picked(kp,2);endp(1)=ceil(rand*N);%生成变异位置p(2)=ceil(rand*N);if popus(a,p(1)=1%0 1 变换popus(a,p(1)=0;elsepopus(a,p(1)=1;endif popus(a,p(2)=1popus(a,p(2)=0;elsepopus(a,p(2)=1;endendreturn;function picked=roulette(c_p) %轮盘赌M,N=size(c_p);M=max(M N);U=rand;if Uc_p(m) break;endend全方位的两点杂交、两点变异的改进的加速遗传算法(IAGA)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报