天天看點

2020-09-22請問這個尋優結果的初始值是2?是怎麼設定的呢?

請問這個尋優結果的初始值是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列呢?奇怪!

繼續閱讀