?? my_sga_haimingmainprog.m
字號:
%%%%%%%%自適應(yīng)參數(shù)PCPM
clear;
tic; %用于記錄運行時間
tol_pop_best_real=zeros(2,50); %1
% tol_pop_best_real=zeros(20); %2
j=1;
while (j<=50)
cont=0;
popsize=64; %設(shè)置初始參數(shù),群體大小
chromlength=16; %字符串長度(個體長度),染色體長度
n=60000;
% n=9000;
% pc=1; %設(shè)置交叉概率
pc=0.95; %設(shè)置交叉概率
pm=0.08; %設(shè)置變異概率
%參數(shù)設(shè)置結(jié)束
pop=my_sga_initpop(popsize,n); %運行初始化函數(shù),隨機產(chǎn)生初始群體
dai=1000;
dna_best=0;
dna_best_value=0;
%給最佳染色體及其適應(yīng)度值賦初值%
pop_best=zeros(1,chromlength);
value_best=0;
dai_best=1;
%結(jié)束
i=1;
max_fitvalue=0;
% while(mean_fitvalue~=2700)
fitvalue=my_sga_calfitvalue(pop,popsize); %計算群體中每個個體的適應(yīng)度
old_max_fitvalue=max(fitvalue);
for i=1:dai%50為迭代次數(shù)
[bestindividual,bestfit]=my_sga_best(popsize,pop,fitvalue);%求出群體中適應(yīng)值最大的個體及其適應(yīng)值
best_fit(i)=bestfit;
[newpop,dna_best,dna_best_value]=my_sga_selection(popsize,pop,fitvalue); %復(fù)制
[newpop]=my_sga_haimingcrossover(popsize,chromlength,newpop,pc); %交叉
[newpop]=my_sga_mutation(popsize,chromlength,newpop,pm,dna_best);%變異
fitvalue_tem=my_sga_calfitvalue(newpop,popsize); %計算變異后群體中每個個體的適應(yīng)度
% newpop
[newpop]=my_sga_care(popsize,newpop,fitvalue_tem,dna_best);%%根據(jù)變異后的適應(yīng)度替換最差的個體
% newpop
fitvalue=my_sga_calfitvalue(newpop,popsize); %計算群體中每個個體的適應(yīng)度
new_max_fitvalue=max(fitvalue);
if bestfit>value_best %保存數(shù)代遺傳之后最好的種群
value_best=bestfit;
pop_best=bestindividual;
dai_best=i;
end
error(i)=abs(new_max_fitvalue-old_max_fitvalue);
if error(i)<=0.00001
cont=cont+1;
else
cont=0;
end
if cont==30
quit_dai(j)=i;
% i
break;
else
% pop_temp=bestindividual;
% value_temp=bestfit;
pop=newpop;
old_max_fitvalue=new_max_fitvalue;
end
% i=i+1;
end
% pop1_range_min(j)=(min(pop(1,:))-1048)/1000; %第一個實驗函數(shù)
% pop1_range_max(j)=(max(pop(1,:))-1048)/1000;
% %
% pop2_range_min(j)=(min(pop(2,:))-1048)/1000;
% pop2_range_max(j)=(max(pop(2,:))-1048)/1000;
% pop1_range_min(j)=(min(pop(1,:))-3000)/1000; %第二個實驗函數(shù)
% pop1_range_max(j)=(max(pop(1,:))-3000)/1000;
%
% pop1_range_min(j)=min(pop(1,:))/1000; %第三個實驗函數(shù)
% pop1_range_max(j)=max(pop(1,:))/1000;
% newpop
% newpop;
% pop_best
pop_best_real=(pop_best-30000)./1000;%第一個測試函數(shù)
% pop_best_real=(pop_best-1048)./1000; %第二個測試函數(shù)
% pop_best_real=pop_best/1000; %第三個測試函數(shù)
% pop_best=dec2bin(pop_best,9);
% value_best
% dai_best
% value_best_real
tol_pop_best_real(:,j)=pop_best_real;
tol_value_best(j)=87000000-value_best;
tol_dai_best(j)=dai_best;
j=j+1;
end
toc;
%
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -