Looping 10 times and recording the results

3 ビュー (過去 30 日間)
Metehan Geçer
Metehan Geçer 2022 年 5 月 17 日
回答済み: Voss 2022 年 5 月 18 日
clc;
clear all;
close all;
%PARAMETRELER
MaxIterration=10;
M=3;%kromozom sayısı
Pc=1;%çaprazlama olasılığı
Pm=0.3;%mutasyon olasılığı
alfa1=0.1 ;
alfa2=0.5 ;
popsize=10;
e=0.1
k=3 ;
cozumhafiza=zeros(popsize,M);
fitnesshafiza=zeros(popsize,1);
for i=1 : popsize
%ilk çözüm
x1=('a')*rand(1);
x2=('a')*rand(1);
x3=('a')*rand(1);
cozum00=[x1 x2 x3];
%ilk fitness hesabı
f0=6*x1+6*x2+7*x3;
ceza1=(6*x1+7*x2+7*x3)-(20+2*(1-alfa1));
ceza2=(5*x1+5*x2+9*x3)-(110+11*(1-alfa1));
ceza3=(4*x1+3*x2+8*x3)-(150+15*(1-alfa1));
if ceza1>0
f1=f0-ceza1*2;
end
if ceza2>0
f1=f1-ceza2*2;
end
if ceza3>0
f1=f1-ceza3*2;
end
cozumhafiza(i,: )=cozum00
fitnesshafiza(i,:)=f1
end
ebeveynhafiza=zeros(popsize*2,M);
ebeveynfitnesslar=zeros(popsize*2,1);
for i2=1:popsize*2
A=randi([1,popsize],k,1);
B=fitnesshafiza(A);
C=cozumhafiza(A,:);
B2=sort(B);
ebeveynfitness=B2(k,1);
[mm,i4]=max(B);
%ebeveyn sıra numarası bulma
%A(i,1);
%fprintf('Ebeveyn sirasi: %d\n ',round(A(i,1)));
%cozumhafiza(A(i,1),[1,2,3]);
ebeveynkromozom=cozumhafiza(A(i4,1),[1,2,3]);
ebeveynhafiza(i2,:)=ebeveynkromozom;
ebeveynfitnesslar(i2,:)=ebeveynfitness;
end
ebeveynhafiza;
ebeveynfitnesslar;
%Tam aritmetik yapılsın
cocuklar=zeros(popsize,3);
for i3=1:popsize
anne=ebeveynhafiza(i3*2-1,:);
baba=ebeveynhafiza(i3*2,:);
cocuk=anne;
rassal=randi (3);
cocuk(1,rassal)=anne(1,rassal)*alfa2+baba(1,rassal)*(1-alfa2);
cocuklar(i3,:)=cocuk ;
end
cocuklar
for i4=1:popsize
rassal2=rand
if rassal2<Pm
rassal1=randi(3)
rassal3=('a')*rand(1)
cocuklar(i4,rassal1)=rassal3
end
end
for i5=1:popsize
x1=cocuklar(i5,1);
x2=cocuklar(i5,2);
x3=cocuklar(i5,3);
f2=6*x1+6*x2+7*x3;
ceza1=(6*x1+7*x2+7*x3)-(20+2*(1-alfa1));
ceza2=(5*x1+5*x2+9*x3)-(110+11*(1-alfa1));
ceza3=(4*x1+3*x2+8*x3)-(150+15*(1-alfa1));
if ceza1>0
f3=f2-ceza1*2;
end
if ceza2>0
f3=f3-ceza2*2;
end
if ceza3>0
f3=f3-ceza3*2;
end
cocukfitnesslar(i5,1)=f3
end
cocukfitnesslar
ebeveynfitnesslar
%çevresel seçim(EN İYİ 10 TANEYİ SEÇ)
C4=popsize-popsize*e;
B1=[fitnesshafiza,cocukfitnesslar]
B2=sort(B1)
B3=flipud(B2)
N1=B3(1:C4)
%ELİTİZM
C4=popsize-popsize*e
C1=[fitnesshafiza]
C2=sort(C1)
C21=C2(C4+1:end) %%ELİTİZM UYGULANACAK BİREYLERİN FİTNESSLARI
C3=find(C1==C21(1:end)) %%elitizm uygulanacakların hangi sırada olduğu
N2=cozumhafiza(C3,:)
yenipopulasyon=[N1,C21]
What I want is for it to loop 10 times and record the results. In other words, the new population values("yenipopulasyon values ") will go to the beginning of the loop and re-enter the loop and memorize the results. Can you help me ?

回答 (1 件)

Voss
Voss 2022 年 5 月 18 日
clc;
clear all;
close all;
%PARAMETRELER
MaxIterration=10;
M=3;%kromozom sayısı
Pc=1;%çaprazlama olasılığı
Pm=0.3;%mutasyon olasılığı
alfa1=0.1 ;
alfa2=0.5 ;
popsize=10;
e=0.1
k=3 ;
for iteration = 1:MaxIterration
cozumhafiza=zeros(popsize,M);
fitnesshafiza=zeros(popsize,1);
for i=1 : popsize
%ilk çözüm
x1=('a')*rand(1);
x2=('a')*rand(1);
x3=('a')*rand(1);
cozum00=[x1 x2 x3];
%ilk fitness hesabı
f0=6*x1+6*x2+7*x3;
ceza1=(6*x1+7*x2+7*x3)-(20+2*(1-alfa1));
ceza2=(5*x1+5*x2+9*x3)-(110+11*(1-alfa1));
ceza3=(4*x1+3*x2+8*x3)-(150+15*(1-alfa1));
if ceza1>0
f1=f0-ceza1*2;
end
if ceza2>0
f1=f1-ceza2*2;
end
if ceza3>0
f1=f1-ceza3*2;
end
cozumhafiza(i,: )=cozum00
fitnesshafiza(i,:)=f1
end
ebeveynhafiza=zeros(popsize*2,M);
ebeveynfitnesslar=zeros(popsize*2,1);
for i2=1:popsize*2
A=randi([1,popsize],k,1);
B=fitnesshafiza(A);
C=cozumhafiza(A,:);
B2=sort(B);
ebeveynfitness=B2(k,1);
[mm,i4]=max(B);
%ebeveyn sıra numarası bulma
%A(i,1);
%fprintf('Ebeveyn sirasi: %d\n ',round(A(i,1)));
%cozumhafiza(A(i,1),[1,2,3]);
ebeveynkromozom=cozumhafiza(A(i4,1),[1,2,3]);
ebeveynhafiza(i2,:)=ebeveynkromozom;
ebeveynfitnesslar(i2,:)=ebeveynfitness;
end
ebeveynhafiza;
ebeveynfitnesslar;
%Tam aritmetik yapılsın
cocuklar=zeros(popsize,3);
for i3=1:popsize
anne=ebeveynhafiza(i3*2-1,:);
baba=ebeveynhafiza(i3*2,:);
cocuk=anne;
rassal=randi (3);
cocuk(1,rassal)=anne(1,rassal)*alfa2+baba(1,rassal)*(1-alfa2);
cocuklar(i3,:)=cocuk ;
end
cocuklar
for i4=1:popsize
rassal2=rand
if rassal2<Pm
rassal1=randi(3)
rassal3=('a')*rand(1)
cocuklar(i4,rassal1)=rassal3
end
end
for i5=1:popsize
x1=cocuklar(i5,1);
x2=cocuklar(i5,2);
x3=cocuklar(i5,3);
f2=6*x1+6*x2+7*x3;
ceza1=(6*x1+7*x2+7*x3)-(20+2*(1-alfa1));
ceza2=(5*x1+5*x2+9*x3)-(110+11*(1-alfa1));
ceza3=(4*x1+3*x2+8*x3)-(150+15*(1-alfa1));
if ceza1>0
f3=f2-ceza1*2;
end
if ceza2>0
f3=f3-ceza2*2;
end
if ceza3>0
f3=f3-ceza3*2;
end
cocukfitnesslar(i5,1)=f3
end
cocukfitnesslar
ebeveynfitnesslar
%çevresel seçim(EN İYİ 10 TANEYİ SEÇ)
C4=popsize-popsize*e;
B1=[fitnesshafiza,cocukfitnesslar]
B2=sort(B1)
B3=flipud(B2)
N1=B3(1:C4)
%ELİTİZM
C4=popsize-popsize*e
C1=[fitnesshafiza]
C2=sort(C1)
C21=C2(C4+1:end) %%ELİTİZM UYGULANACAK BİREYLERİN FİTNESSLARI
C3=find(C1==C21(1:end)) %%elitizm uygulanacakların hangi sırada olduğu
N2=cozumhafiza(C3,:)
yenipopulasyon(iteration,:)=[N1,C21]
end

カテゴリ

Help Center および File ExchangeSpline Postprocessing についてさらに検索

タグ

製品


リリース

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by