?? yj4.m
字號:
%定義遺傳算法參數
NVAR=20; %變量維數
RANGE=[0;200]; %變量范圍
GGAP=0.8; %代溝(Generation gap)
XOVR=1; %交叉率
MUTR=1/NVAR; %變異率
MAXGEN=500; %最大遺傳代數(Maximum number of generations)
INSR=0.9; %插入率
SUBPOP=8; %子種群數
MIGR=0.2; %遷移率
MIGGEN=20; %在子種群與遷移之間20代
NIND=20; %個體數目(Number of individuals)
SEL_F='sus'; %選擇函數名
XOV_F='recdis'; %重組函數名
MUT_F='mutbga'; %變異函數名
OBJ_F='objharv'; %目標函數名
FieldDD=rep(RANGE,[1,NVAR]); %譯碼矩陣
gen=0;
trace=zeros(MAXGEN,2); %遺傳算法性能跟蹤
Chrom=crtrp(SUBPOP*NIND,FieldDD); %創建初始種群
ObjV=objharv(Chrom); %計算目標函數值
while gen<MAXGEN %代循環
FitnV=ranking(ObjV,[2 1],SUBPOP); %分配適應度值(Assign fitness values)
SelCh=select(SEL_F,Chrom,FitnV,GGAP,SUBPOP); %選擇
SelCh=recombin(XOV_F,SelCh,XOVR,SUBPOP); %重組
SelCh=mutate(MUT_F,SelCh,FieldDD,[MUTR],SUBPOP); %變異
ObjVOff=feval(OBJ_F,SelCh); %計算目標函數值
[Chrom, ObjV]=reins(Chrom,SelCh,SUBPOP,[1 INSR],ObjV,ObjVOff); %替代
gen=gen+1;
[trace(gen,1),I]=min(ObjV);
trace(gen,2)=mean(ObjV);
%在子種群之間遷移個體
if(rem(gen,MIGGEN)==0)
[Chrom, ObjV]=migrate(Chrom,SUBPOP,[MIGR, 1, 1],ObjV);
end
end
[Y,I]=min(ObjV); %輸出最優解及其序號,Y為最優解,I為種群的序號
figure(1);plot(Chrom(I,:));
hold on;grid;
plot(Chrom(I,:),'bo')
figure(2);plot(-trace(:,1));
hold on;
plot(-trace(:,2),'-.');
legend('解的變化','種群均值的變化');
xlabel('迭代次數')
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -