?? example5_43.m
字號:
GGAP = .8; %代間隔,即每代產(chǎn)生多少個新個體
INSR = .9; %插入率,即插入多少個子代
XOVR = 1; %交叉率
SP = 2; %選擇壓力
MUTR = 1; %變異率
MIGR = 0.2; %子代之間的遷移率
MIGGEN = 20; %用于遷移的子代數(shù)目
TERMEXACT = 1e-4; %當(dāng)達(dá)到最小值時的終止值
SEL_F = 'sus'; %選擇函數(shù)名
XOV_F = 'recdis'; %個體組合函數(shù)名
MUT_F = 'mutbga'; %變異函數(shù)名
OBJ_F = 'objharv'; %目標(biāo)函數(shù)名
%得到目標(biāo)函數(shù)的邊界
FieldDR = feval(OBJ_F,[],1);
%根據(jù)在目標(biāo)函數(shù)中定義的變量的數(shù)目計算SUBPOP和NIND
NVAR = size(FieldDR,2); %變量的數(shù)目
SUBPOP = 2 * floor(sqrt(NVAR)); %子代的數(shù)目
NIND = 20 + 5 * floor(NVAR/50); %每個子代中個體的數(shù)目
MAXGEN = 300 * floor(sqrt(NVAR)); %最大代數(shù)
MUTR = MUTR / NVAR; %依賴于NVAR的變異率
%得到目標(biāo)函數(shù)的最小值
GlobalMin = feval(OBJ_F,[],3);
%目標(biāo)函數(shù)圖形輸出的標(biāo)題
FigTitle = [feval(OBJ_F,[],2) ' (' int2str(SUBPOP) ':' int2str(MAXGEN) ') '];
%清除Best和存儲矩陣內(nèi)容
%初始化存儲最優(yōu)結(jié)果的矩陣
Best = NaN * ones(MAXGEN,3);
Best(:,3) = zeros(size(Best,1),1);
%存儲最優(yōu)個體的矩陣
IndAll = [];
%生成實(shí)值初始種群
Chrom = crtrp(SUBPOP*NIND,FieldDR);
%計數(shù)變量歸零
gen = 0;
termopt = 0;
%計算給定種群的目標(biāo)函數(shù)值
ObjV = feval(OBJ_F,Chrom);
% 記錄目標(biāo)函數(shù)估計的次數(shù)
Best(gen+1,3) = Best(gen+1,3) + NIND;
%迭代運(yùn)算直至符合終止條件或達(dá)到了最大代數(shù)
while ((gen < MAXGEN) & (termopt == 0)),
%保存最優(yōu)和平均的目標(biāo)函數(shù)值以及最優(yōu)的個體
[Best(gen+1,1),ix] = min(ObjV);
Best(gen+1,2) = mean(ObjV);
IndAll = [IndAll; Chrom(ix,:)];
%適應(yīng)度分配
FitnV = ranking(ObjV,[2 0],SUBPOP);
%從種群中選擇個體
SelCh = select(SEL_F, Chrom, FitnV, GGAP, SUBPOP);
%重新組合選擇的個體
SelCh=recombin(XOV_F, SelCh, XOVR, SUBPOP);
%變異
SelCh=mutate(MUT_F, SelCh, FieldDR, [MUTR], SUBPOP);
%計算對應(yīng)子代的目標(biāo)函數(shù)值
ObjVOff = feval(OBJ_F,SelCh);
Best(gen+1,3) = Best(gen+1,3) + size(SelCh,1);
%在種群仲插入最優(yōu)的子代以替換最劣的父代
[Chrom, ObjV] = reins(Chrom, SelCh, SUBPOP, [1 INSR], ObjV, ObjVOff);
gen=gen+1;
%檢驗(yàn), 如果最優(yōu)的目標(biāo)函數(shù)值接近于終止值,
%計算兩者的差
ActualMin = abs(min(ObjV) - GlobalMin);
%如果最優(yōu)的目標(biāo)函數(shù)值小于終止值,
if ((ActualMin < (TERMEXACT * abs(GlobalMin))) | (ActualMin < TERMEXACT))
termopt = 1;
end
%子代遷移
if ((termopt ~= 1) & (rem(gen,MIGGEN) == 0))
[Chrom, ObjV] = migrate(Chrom, SUBPOP, [MIGR, 1, 0], ObjV);
end
end
%結(jié)果
%疊加目標(biāo)函數(shù)估計的次數(shù)
Results = cumsum(Best(1:gen,3));
%函數(shù)估計的次數(shù)、均值和最優(yōu)結(jié)果
Results = [Results Best(1:gen,2) Best(1:gen,1)];
%繪圖
plot(IndAll(gen-4:gen,:)');
xlabel('u(k)');
ylabel('f(u)');
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -