1. FONKSİYON İÇİN ÇÖZÜMLER
MATLAB
SCRİPT KODU:
function z = Pfunction(x,y)
z = (4 - 2.1*x.^2 + x.^4/3).*x.^2 + x.*y +(-4+4*y.^2).*y.^2;
end
oldBest_Person=100;
for t=1:10
iteration=500;
Parent_No=10;
Child_No=5;
Gama=1;
fprintf('\n
Parent_No=%d, Child_No=%d, İterasyon=%d, Gama=%d \n',Parent_No,Child_No,iteration,Gama);
seed=t;
for
i=1:Parent_No
%Ebeveynler belirleniyor.
P_X(i) = rand()*((rand()>0.5)*2-1)*3;
P_Y(i) = rand()*((rand()>0.5)*2-1)*2;
%Ebeveynlerin uygunluğu
hesaplanıyor.
P_Fitness(i)=Pfunction(P_X(i),P_Y(i));
end
for
m=1:iteration
S=0; %succes
variable
k=1;
%Her bir ebeveynden çocuk
üretme.
for i=1:Parent_No
for j=1:Child_No
% Move Hareket
Miktarı Belirleniyor.
Move_X =
rand()*((rand()>0.5)*2-1)*Gama;
Move_Y =
rand()*((rand()>0.5)*2-1)*Gama;
% Ebeveynlerden
çocuklar üretiliyor.
C_X(k) = P_X(i) + Move_X;
C_Y(k) = P_Y(i) + Move_Y;
%Sınırların dışına
çıkılması engelleniyor.
if C_X(k)<-3 || C_X(k)>3
C_X(k) =
rand()*((rand()>0.5)*2-1)*3;
end
if C_Y(k)<-2 || C_Y(k)>2
C_Y(k) =
rand()*((rand()>0.5)*2-1)*2;
end
% Çocukların
uygunluk değerleri hesaplanıyor.
C_Fitness(k) =
Pfunction(C_X(k),C_Y(k));
% Succes değerinin
belirlenmesi.
if P_Fitness(i) > C_Fitness(k)
S = S+1;
end
k=k+1;
end
end
% Çocukların uygunluk
değerleri küçükten büyüğe sıralanıyor.
C_F = sort(C_Fitness);
C_Fitness_Best= C_F(:,1:Parent_No); %En
uygun çocuklar alınıyor.
% En uygun çocukların
sıralamasına uygun olarak X,Y değerleride sıralanıyor.
for i=1:Parent_No
for j=1:k-1
if C_Fitness_Best(i) == C_Fitness(j)
C_Best_X(i) = C_X(j);
C_Best_Y(i) = C_Y(j);
end
end
end
SR = S/Child_No*Parent_No; %success
rate
if SR>0.2
Gama=0.85*Gama;
elseif SR<0.2
Gama=Gama/0.85;
end
% En uygun çocuklar ve
ebeveynler ile bir aile oluşturuluyor.
F_Fitness = [C_Fitness_Best,
P_Fitness];
F_X = [C_Best_X, P_X];
F_Y = [C_Best_Y, P_Y];
% Bireylerin uygunluk
değerleri küçükten büyüğe sıralanıyor.
F_F = sort(F_Fitness);
F_Fitness_Best= F_F(:,1:Parent_No); %En
iyi bireyler seçiliyor.
% En iyi bireyler
sıralamasına uygun olarak X,Y değerleride sıralanıyor.
for i=1:Parent_No
for j=1:2*Parent_No
if F_Fitness_Best(i) == F_Fitness(j)
F_Best_X(i) = F_X(j);
F_Best_Y(i) = F_Y(j);
end
end
end
% En uygun bireyler yeni
ebeveynler olarak seçiliyor.
P_X = F_Best_X;
P_Y = F_Best_Y;
P_Fitness = F_Fitness_Best;
% Yeni ebevenylerin en
iyisi belirleniyor.
P_F =
sort(P_Fitness);
Best_Person(m) = P_F(1);
% Yakınsama grafiği için
önceki en iyi Ebeveyn ile kıyaslama yapılıyor.
if Best_Person(m) < oldBest_Person
Yakinsama_iterasyonu = m;
oldBest_Person = Best_Person(m);
end
end
% Yeni ebevenylerin en
iyisinin X Y değerleri bulunuyor.
G_P = Best_Person(m);
for
i=1:Parent_No
if G_P == P_Fitness(i)
G_P_X = P_X(i);
G_P_Y = P_Y(i);
end
end
% Her bir Seed değeri
için sonuçlar Ekrana Yazdırılıyor.
fprintf('Seed %d, G_P = %f, GlobalX =
%f, GlobalY = %f \n',seed,G_P,G_P_X,G_P_Y);
end
% Fonksiyon Çizimi
dx = 0.05; %Çizim
Sıklığı
Xlimits = -2:dx:2; %
Çizim X ekseni sınırları
Ylimits = -1.5:dx:1.5; %
Çizim Y ekseni sınırları
[X,Y] =
meshgrid(Xlimits,Ylimits);
Z = Pfunction(X,Y);
subplot(211);
surf(Y,X,-Z);
grid on;
xlabel('x');
ylabel('y');
zlabel('z');
hold on
%bulunan f
değerinin çizilen grafik üzerince işaretlenmesi.
subplot(211);
plot3(G_P_Y,G_P_X,-G_P, 'b*');
%Yakınsama
grafiğinin çizdirilmesi.
it=1:iteration;
subplot(212);
plot(it,Best_Person),xlabel('iterasyon sayısı'), ylabel('Global_Z')
hold on;
plot(Yakinsama_iterasyonu,Best_Person(Yakinsama_iterasyonu),'b*')
grid on;
PROGRAMIN
KOŞTURULMASI:
Örnek:1
Yakınsama
Grafiği:
Örnek:2
Yakınsama Grafiği:
10
Farklı Seed Değeri İçin Sonuçlar:
2. FONKSİYON İÇİN ÇÖZÜMLER
MATLAB
SCRİPT KODU:
function z = Pfunction2(x,y)
z=-( (sin(x) .* (sin((1 * x.^2)/pi)).^20) + (sin(y) .* (sin((2 * y.^2)/pi)).^20) );
end
oldBest_Person=100;
for t=1:1
iteration=1000;
Parent_No=20;
Child_No=10;
Gama=1;
fprintf('\n
Parent_No=%d, Child_No=%d, İterasyon=%d, Gama=%d \n',Parent_No,Child_No,iteration,Gama);
seed=t;
for
i=1:Parent_No
%Ebeveynler belirleniyor.
P_X(i) = rand()*pi;
P_Y(i) = rand()*pi;
%Ebeveynlerin uygunluğu
hesaplanıyor.
P_Fitness(i)=Pfunction2(P_X(i),P_Y(i));
end
for
m=1:iteration
S=0; %succes
variable
k=1;
%Her bir ebeveynden çocuk
üretme.
for i=1:Parent_No
for j=1:Child_No
% Move Hareket
Miktarı Belirleniyor.
Move_X = rand()*((rand()>0.5)*2-1)*Gama;
Move_Y =
rand()*((rand()>0.5)*2-1)*Gama;
% Ebeveynlerden
çocuklar üretiliyor.
C_X(k) = P_X(i) + Move_X;
C_Y(k) = P_Y(i) + Move_Y;
%Sınırların dışına
çıkılması engelleniyor.
if C_X(k)<-3 || C_X(k)>3
C_X(k) = rand()*pi;
end
if C_Y(k)<-2 || C_Y(k)>2
C_Y(k) = rand()*pi;
end
% Çocukların
uygunluk değerleri hesaplanıyor.
C_Fitness(k) =
Pfunction2(C_X(k),C_Y(k));
% Succes değerinin
belirlenmesi.
if P_Fitness(i) > C_Fitness(k)
S = S+1;
end
k=k+1;
end
end
% Çocukların uygunluk
değerleri küçükten büyüğe sıralanıyor.
C_F = sort(C_Fitness);
C_Fitness_Best= C_F(:,1:Parent_No); %En
uygun çocuklar alınıyor.
% En uygun çocukların
sıralamasına uygun olarak X,Y değerleride sıralanıyor.
for i=1:Parent_No
for j=1:k-1
if C_Fitness_Best(i) == C_Fitness(j)
C_Best_X(i) = C_X(j);
C_Best_Y(i) = C_Y(j);
end
end
end
SR = S/Child_No*Parent_No; %success
rate
if SR>0.2
Gama=0.85*Gama;
elseif SR<0.2
Gama=Gama/0.85;
end
% En uygun çocuklar ve
ebeveynler ile bir aile oluşturuluyor.
F_Fitness = [C_Fitness_Best,
P_Fitness];
F_X = [C_Best_X, P_X];
F_Y = [C_Best_Y, P_Y];
% Bireylerin uygunluk
değerleri küçükten büyüğe sıralanıyor.
F_F = sort(F_Fitness);
F_Fitness_Best= F_F(:,1:Parent_No); %En
iyi bireyler seçiliyor.
% En iyi bireyler
sıralamasına uygun olarak X,Y değerleride sıralanıyor.
for i=1:Parent_No
for j=1:2*Parent_No
if F_Fitness_Best(i) == F_Fitness(j)
F_Best_X(i) = F_X(j);
F_Best_Y(i) = F_Y(j);
end
end
end
% En uygun bireyler yeni
ebeveynler olarak seçiliyor.
P_X = F_Best_X;
P_Y = F_Best_Y;
P_Fitness = F_Fitness_Best;
% Yeni ebevenylerin en
iyisi belirleniyor.
P_F =
sort(P_Fitness);
Best_Person(m) = P_F(1);
% Yakınsama grafiği için
önceki en iyi Ebeveyn ile kıyaslama yapılıyor.
if Best_Person(m) < oldBest_Person
Yakinsama_iterasyonu = m;
oldBest_Person = Best_Person(m);
end
end
% Yeni ebevenylerin en
iyisinin X Y değerleri bulunuyor.
G_P = Best_Person(m);
for
i=1:Parent_No
if G_P == P_Fitness(i)
G_P_X = P_X(i);
G_P_Y = P_Y(i);
end
end
% Her bir Seed değeri
için sonuçlar Ekrana Yazdırılıyor.
fprintf('Seed %d, G_P = %f, GlobalX =
%f, GlobalY = %f \n',seed,G_P,G_P_X,G_P_Y);
end
%fonksiyonun
çizdirilmesi
[x,y]=meshgrid(0:0.05:pi,0:0.05:pi);
z=Pfunction2(x,y);
subplot(211);
surf(x,y,z);
hold on
%bulunan f
değerinin çizilen grafik üzerince işaretlenmesi.
subplot(211);
plot3(G_P_X,G_P_Y,G_P, 'b*');
%Yakınsama
grafiğinin çizdirilmesi.
it=1:iteration;
subplot(212);
plot(it,Best_Person),xlabel('iterasyon sayısı'), ylabel('Global_Z')
hold on;
plot(Yakinsama_iterasyonu,Best_Person(Yakinsama_iterasyonu),'b*')
grid on;
PROGRAMIN
KOŞTURULMASI:
Örnek:1
Yakınsama Grafiği:
Örnek:2
Yakınsama Grafiği:
10 Farklı Seed Değeri İçin Sonuçlar:
Hiç yorum yok:
Yorum Gönder