资源描述:
《遗传算法matlab源代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、function[X,MaxFval,BestPop,Trace]=fga(FUN,bounds,MaxEranum,PopSize,options,pCross,pMutation,pInversion)%[X,MaxFval,BestPop,Trace]=fga(FUN,bounds,MaxEranum,PopSize,options,pCross,pMutation,pInversion)%Findsamaximumofafunctionofseveralvariables.%fgasolvesproblemso
2、ftheform:%maxF(X)subjectto:LB<=X<=UB(LB=bounds(:,1),UB=bounds(:,2))%X-最优个体对应自变量值%MaxFval-最优个体对应函数值%BestPop-最优的群体即为最优的染色体群%Trace-每代最佳个体所对应的目标函数值%FUN-目标函数%bounds-自变量范围%MaxEranum-种群的代数,取50--500(默认200)%PopSize-每一代种群的规模;此可取50--200(默认100)%pCross-交叉概率,一般取0.5--0.85之间较好(
3、默认0.8)%pMutation-初始变异概率,一般取0.05-0.2之间较好(默认0.1)%pInversion-倒位概率,一般取0.05-0.3之间较好(默认0.2)%options-1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编码,option(2)设定求解精度(默认1e-4)T1=clock;%检验初始参数ifnargin<2,error('FMAXGArequiresatleastthreeinputarguments');endifnargin==2,MaxEra
4、num=150;PopSize=100;options=[11e-4];pCross=0.85;pMutation=0.1;pInversion=0.25;endifnargin==3,PopSize=100;options=[11e-4];pCross=0.85;pMutation=0.1;pInversion=0.25;endifnargin==4,options=[11e-4];pCross=0.85;pMutation=0.1;pInversion=0.25;endifnargin==5,pCross=0.85
5、;pMutation=0.1;pInversion=0.25;endifnargin==6,pMutation=0.1;pInversion=0.25;endifnargin==7,pInversion=0.25;endif(options(1)==0
6、options(1)==1)&find((bounds(:,1)-bounds(:,2))>0)error('数据输入错误,请重新输入:');end%定义全局变量globalmnNewPopchildren1children2VarNum%初始化种群和变量precisi
7、on=options(2);bits=ceil(log2((bounds(:,2)-bounds(:,1))'./precision));%由设定精度划分区间VarNum=size(bounds,1);[Pop]=InitPop(PopSize,bounds,bits,options);%初始化种群[m,n]=size(Pop);fit=zeros(1,m);NewPop=zeros(m,n);children1=zeros(1,n);children2=zeros(1,n);pm0=pMutation;BestPop
8、=zeros(MaxEranum,n);%分配初始解空间BestPop,TraceTrace=zeros(1,MaxEranum);Lb=ones(PopSize,1)*bounds(:,1)';Ub=ones(PopSize,1)*bounds(:,2)';%二进制编码采用多点交叉和均匀交叉,并逐步增大均匀交叉概率%浮点编码采用离散交叉(前期)、算术交叉(中期)、AEA重组(后期)OptsCrossOver=[ones(1,MaxEranum)*options(1);...round(unidrnd(2*(MaxEr
9、anum-[1:MaxEranum]))/MaxEranum)]';%浮点编码时采用两种自适应变异和一种随机变异(自适应变异发生概率为随机变异发生的2倍)OptsMutation=[ones(1,MaxEranum)*options(1);unidrnd(5,1,MaxEranum)]';ifoptions(1)==3D=zero