請問這個尋優結果的初始值是2?是怎麼設定的呢?
figure(1)
hold on;
lb=1;
ub=2;
ezplot('sin(10*pi*X)/X',[lb,ub]);
xlabel('自變量/X');
ylabel('函數值/Y');
NIND=40;%種群大小
MAXGEN=20;%最大遺傳代數
PRECI=20;%個體長度
GGAP=0.95;%代溝
px=0.7;%交叉機率
pm=0.01;%變異機率
trace1=zeros(2,MAXGEN);%尋優結果的初始值
FieldD=[PRECI;lb;ub;1;0;1;1];%區域描述器
Chrom=crtbp(NIND,PRECI)%建立任意離散随機種群
%%優化
gen=0;
X=bs2rv(Chrom,FieldD);
ObjV=sin(10*pi*X)./X;
count=0;
while gen<MAXGEN
FitnV=ranking(ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);%選擇
SelCh=recombin('xovsp',SelCh,px);%重組
SelCh=mut(SelCh,pm);%變異
X=bs2rv(SelCh,FieldD);%子代個體的十進制轉換
ObjVSel=sin(10*pi*X)./X;%計算子代的目标函數值
[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代到父代,得到新的種群
X=bs2rv(Chrom,FieldD);
gen=gen+1;%代計數器增加
%擷取每代的最優解及其序号,Y為最優解,I為個體的序号
[Y,I]=min(ObjV)
trace1(1,gen)=X(I)%記下每代的最優值
trace1(2,gen)=Y%記下每代的最優值
end
plot(t1,t2,'bo');%畫出每代的最優點
grid on;
ObjV
plot(X,ObjV,'b*');%畫出最後一代的種群
hold off
figure(2);
plot(1:MAXGEN,trace1(2,:));
grid on
xlabel('遺傳代數')
ylabel('解的變化')
title('進化過程')
bestY=trace1(2,end)
bestX=trace1(1,end)
fprintf(['最優解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n']);
疑問### 疑問 trace1(1,gen)=X(I)%記下每代的最優值,為什麼是2行20列,而不是一行20列呢?奇怪!