NIM : G74160063
Dinamika viskositas air µ ( 10-3 N.s/m2 ) bergantung pada suhu T (oC) terlihat dari data eksperimen
sebagai berikut :
T 0 5 10 20 30 40
µ 1.787 1.519 1.307 1.002 0.7975 0.6529
PSO.m
clear; %Menghapus variable tersimpan
clc; %Menghapus riwayat Command Window
dim = 6; %Dimensi
N = 100; %Jumlah partiekl
max_iter = 50; %Maksimum iterasi
best = 10^-2; %Batas Error
total_iter = 0; %Total Iterasi
format shortg
% Tebakan nilai awal parameter yang dicari
a1min = 1.0; a1max = 2.0;
a2min = -9e-02; a2max = -1e-02;
a3min = 1e-03; a3max = 5e-03;
a4min = -9e-05; a4max = -1e-05;
a5min = 1e-07; a5max = 3e-07;
a6min = -9e-10; a6max = -1e-10;
a1 = a1min + rand(N,1)*(a1max-a1min);
a2 = a2min + rand(N,1)*(a2max-a2min);
a3 = a3min + rand(N,1)*(a3max-a3min);
a4 = a4min + rand(N,1)*(a4max-a4min);
a5 = a5min + rand(N,1)*(a5max-a5min);
a6 = a6min + rand(N,1)*(a6max-a6min);
%Inisialisasi posisi awal setiap partikel
X = [a1 a2 a3 a4 a5 a6];
%Inisialisasi kecepatan awal setiap partikel
V = rand(N,dim);
FIterasi = zeros(max_iter,1); %Matrix of FGbest
XbestIterasi = zeros(max_iter,dim); %Matrix of Gbest
f_xy = ones(1,N); %Matrix of Fitness
%Hitung nilai fungsi fitness untuk setiap partikel
tic
for i=1:max_iter
%Add total_iter
total_iter = total_iter + 1;
for j=1:N
f_xy(j) = fitness_soal1(X(j,:));
end
%f_xy dimutlakan
f_xy = abs(f_xy);
%Menentukan Pbest
if i <=1
FPbest = f_xy';
Pbest = X;
else
for j=1:N
if (f_xy(j) < FPbest(j))
FPbest(j) = f_xy(j);
Pbest(j,:)= X(j,:);
end
end
end
%Menetukan Gbest
[FGbest,baris] = min(FPbest);
Gbest = Pbest(baris,:);
FIterasi(i)=FGbest;
XbestIterasi(i,:)= Gbest;
%Show iteration and FGlobal best into Command Window
fprintf('Iteration : %d | Error = %.4f\n', i, FGbest);
%Error check
if FGbest <= best
break
end
%Hitung kecepatan (v) partikel
c1=.5; c2=.5; w=.1;
for j=1:N
V(j,:) = w.*V(j,:) +c1*rand.*(Pbest(j,:)-X(j,:)) + c2*rand.*(Gbest
- X(j,:));
%Update posisi partikel
X(j,:) = X(j,:) + V(j,:);
end
end
%Cek hasil
fprintf('\nBest value of a1 = %d \nBest value of a2 = %d \nBest value of a3
= %d \nBest value of a4 = %d \nBest value of a5 = %d \nBest value of a6
= %d \n\n',Gbest(1),Gbest(2),Gbest(3),Gbest(4),Gbest(5),Gbest(6));
fprintf('Number of particle : %d\nTotal iteration : %d\n',N,total_iter);
%Time
times = toc;
fprintf('Time : %.3f seconds \n', times);
GSA.m
clear; %Menghapus variable tersimpan
clc; %Menghapus riwayat Command Window
dim = 6; %Dimensi
N = 100; %Jumlah partiekl
max_iter = 50; %Maksimum iterasi
Error_best = 10^-2; %Batas Error
total_iter = 0; %Total Iterasi
Rpower = 1;
Rnorm = 2;
ElitistCheck = 1;
format shortg
% Tebakan nilai awal parameter yang dicari
a1min = 1.0; a1max = 2.0;
a2min = -9e-02; a2max = -1e-02;
a3min = 1e-03; a3max = 5e-03;
a4min = -9e-05; a4max = -1e-05;
a5min = 1e-07; a5max = 3e-07;
a6min = -9e-10; a6max = -1e-10;
a1 = a1min + rand(N,1)*(a1max-a1min);
a2 = a2min + rand(N,1)*(a2max-a2min);
a3 = a3min + rand(N,1)*(a3max-a3min);
a4 = a4min + rand(N,1)*(a4max-a4min);
a5 = a5min + rand(N,1)*(a5max-a5min);
a6 = a6min + rand(N,1)*(a6max-a6min);
%Inisialisasi posisi awal setiap partikel
X = [a1 a2 a3 a4 a5 a6];
%Inisialisasi Matriks yang akan digunakan
V=zeros(N,dim);
FIterasi=zeros(max_iter,1);
XbestIterasi=zeros(max_iter,dim);
f_xy = ones(1,N);
tic
%Mencari Nilai Fitness
for iterasi=1:max_iter
total_iter = total_iter + 1;
for j=1:N
f_xy(j) = fitness_soal1(X(j,:));
end
f_xy = abs(f_xy);
lihat = [X f_xy'];
%Mencari Nilai Best
if i <=1
[Fbest L_Xbest] = min(f_xy);
Xbest = X(L_Xbest,:);
else
for j=1:N
if (f_xy(j) < Fbest);
Fbest = f_xy(j);
Xbest = X(j,:);
end
end
end
FIterasi(iterasi)=Fbest;
XbestIterasi(iterasi,:)=Xbest;
fprintf('Iteration : %d | Error = %.4f\n', iterasi, Fbest);
%Mencari Nilai Worst
Fmax=max(f_xy); Fmin=min(f_xy); Fmean=mean(f_xy);
[i N]=size(f_xy);
%Menghitung m
if Fmax==Fmin
M=ones(N,1);
else
best=Fmin;
worst=Fmax;
M=(f_xy-worst)./(best-worst);
end
%Menghitung M
M=M./sum(M);
%Menghitung konstanta Gravitasi
alfa=20;G0=100;
G=G0*exp(-alfa*iterasi/max_iter);
[N,dim]=size(X);
final_per=2;
if ElitistCheck==1
kbest=final_per+(1-iterasi/max_iter)*(100-final_per);
kbest=round(N*kbest/100);
else
kbest=N;
end
kbest = kbest;
M=M;
[Ms ds]=sort(M,'descend');
for i=1:N
E(i,:)=zeros(1,dim);
for ii=1:kbest
j=ds(ii);
if j~=i
R=norm(X(i,:)-X(j,:),Rnorm);
for k=1:dim
E(i,k)=E(i,k)+rand*(M(j))*((X(j,k)-X(i,k))/(R^Rpower+eps));
end
end
end
end
%Menghitung percepatan
a=E.*G;
%Error check
if Fbest < Error_best
break
end
[N,dim] = size(X);
V = rand(N,dim).*V + a; %Menghitung kecepatan
X = X + V; %Update X untuk iterasi berikutnya
end
%Cek hasil
fprintf('\nBest value of a1 = %d \nBest value of a2 = %d \nBest value of a3
= %d \nBest value of a4 = %d \nBest value of a5 = %d \nBest value of a6
= %d \n\n',Xbest(1),Xbest(2),Xbest(3),Xbest(4),Xbest(5),Xbest(6));
fprintf('Number of particle : %d\nTotal iteration : %d\n',N,total_iter);
%Time
times = toc;
fprintf('Time : %.3f seconds \n', times);
fungsi_soal1.m
function p = fungsi_soal1(x)
format shortg
%Load data
par = load('Parameter_Soal1.txt');
%Pindahkan data ke parameter
a1 = par(1,1);
a2 = par(1,2);
a3 = par(1,3);
a4 = par(1,4);
a5 = par(1,5);
a6 = par(1,6);
%Fungsi yang akan dicari nilai parameternya
p = a1 + a2*x + a3*x.^2 + a4*x.^3 + a5*x.^4 + a6*x.^5;
end
fitness_soal1.m
function f_xy = fitness_soal1(X)
%parameter yang di cari
a1 = X(1,1);
a2 = X(1,2);
a3 = X(1,3);
a4 = X(1,4);
a5 = X(1,5);
a6 = X(1,6);
Parm_cari = [a1 a2 a3 a4 a5 a6];
save Parameter_Soal1.txt Parm_cari -ASCII
x = (0:1:40);
p = fungsi_soal1(x);
Eks_Data = load ('Data.txt');
x_data = Eks_Data (:,1);
p_data = Eks_Data (:,2);
jj = 1;
for ii=1:length(x)
if x_data(jj)>=x(ii) && x_data(jj)<=x(ii)
x_sim(jj)= x(ii);
p_sim(jj)= p(1,ii);
jj=jj+1;
if jj>length(p_data),break,end
else
end
end
%Hitung nilai error simulasi dan eksperimen
cek = [x_sim' x_data p_sim' p_data];
Error = ((p_data-p_sim')).^2;
f_xy = sum(Error);
end
GSA
_____5 iterasi terakhir_____
Iteration : 46 | Error = 0.0368
Iteration : 47 | Error = 0.0368
Iteration : 48 | Error = 0.0368
Iteration : 49 | Error = 0.0368
Iteration : 50 | Error = 0.0368
2
Tiga organisme pembawa penyakit membusuk secara eksponensial di air danau memenuhi model
berikut :
Perkirakan populasi awal setiap organisme (A, B, dan C) yang diperoleh dari hasil pengukuran berikut:
t (jam) 0.5 1 2 3 4 5 6 7 9
p(t) 6.0 4.4 3.2 2.7 2.2 1.9 1.7 1.4 1.1
PSO.m
clear; %Menghapus variable tersimpan
clc; %Menghapus riwayat Command Window
dim = 3; %Dimensi
N = 250; %Jumlah partiekl
max_iter = 500; %Maksimum iterasi
best = 9*10^-2; %Batas Error
total_iter = 0; %Total Iterasi
format shortg
% Tebakan nilai awal parameter yang dicari
Amin = 0; Amax = 10;
Bmin = 0; Bmax = 10;
Cmin = 0; Cmax = 10;
A = Amin + rand(N,1)*(Amax-Amin);
B = Bmin + rand(N,1)*(Bmax-Bmin);
C = Cmin + rand(N,1)*(Cmax-Cmin);
%Inisialisasi posisi awal setiap partikel
X = [A B C];
%Inisialisasi kecepatan awal setiap partikel
V = rand(N,dim);
FIterasi = zeros(max_iter,1); %Matrix of FGbest
XbestIterasi = zeros(max_iter,dim); %Matrix of Gbest
f_xy = ones(1,N); %Matrix of Fitness
%Hitung nilai fungsi fitness untuk setiap partikel
tic
for i=1:max_iter
%Add total_iter
total_iter = total_iter + 1;
for j=1:N
f_xy(j) = fitness_soal2(X(j,:));
end
%f_xy dimutlakan
f_xy = abs(f_xy);
%Menentukan Pbest
if i <=1
FPbest = f_xy';
Pbest = X;
else
for j=1:N
if (f_xy(j) < FPbest(j))
FPbest(j) = f_xy(j);
Pbest(j,:)= X(j,:);
end
end
end
%Menetukan Gbest
[FGbest,baris] = min(FPbest);
Gbest = Pbest(baris,:);
FIterasi(i)=FGbest;
XbestIterasi(i,:)= Gbest;
%Show iteration and FGlobal best into Command Window
fprintf('Iteration : %d | Error = %.4f\n', i, FGbest);
%Error check
if FGbest <= best
break
end
%Hitung kecepatan (v) partikel
c1=.8; c2=.5; w=.8;
for j=1:N
V(j,:) = w.*V(j) +c1*rand.*(Pbest(j,:)-X(j,:)) + c2*rand.*(Gbest -
X(j,:));
%Update posisi partikel
X(j,:) = X(j,:) + V(j,:);
end
end
%Cek hasil
fprintf('\nPopulasi awal A = %.4f \nPopulasi awal B = %.4f \nPopulasi awal
C = %.4f \n\n',Gbest(1),Gbest(2),Gbest(3));
fprintf('Number of particle : %d\nTotal iteration : %d\n',N,total_iter);
%Time
times = toc;
fprintf('Time : %.3f seconds \n', times);
GSA.m
clear; %Menghapus variable tersimpan
clc; %Menghapus riwayat Command Window
dim = 3; %Dimensi
N = 250; %Jumlah partiekl
max_iter = 50; %Maksimum iterasi
Error_best = 9*10^-2; %Batas Error
total_iter = 0; %Total Iterasi
Rpower = 1;
Rnorm = 2;
ElitistCheck = 1;
format shortg
% Tebakan nilai awal parameter yang dicari
Amin = 0; Amax = 10;
Bmin = 0; Bmax = 10;
Cmin = 0; Cmax = 10;
A = Amin + rand(N,1)*(Amax-Amin);
B = Bmin + rand(N,1)*(Bmax-Bmin);
C = Cmin + rand(N,1)*(Cmax-Cmin);
%Inisialisasi posisi awal setiap partikel
X = [A B C];
%Inisialisasi Matriks yang akan digunakan
V=zeros(N,dim);
FIterasi=zeros(max_iter,1);
XbestIterasi=zeros(max_iter,dim);
f_xy = ones(1,N);
tic
%Mencari Nilai Fitness
for iterasi=1:max_iter
total_iter = total_iter + 1;
for j=1:N
f_xy(j) = fitness_soal2(X(j,:));
end
f_xy = abs(f_xy);
lihat = [X f_xy'];
%Mencari Nilai Best
if i <=1
[Fbest L_Xbest] = min(f_xy);
Xbest = X(L_Xbest,:);
else
for j=1:N
if (f_xy(j) < Fbest);
Fbest = f_xy(j);
Xbest = X(j,:);
end
end
end
FIterasi(iterasi)=Fbest;
XbestIterasi(iterasi,:)=Xbest;
fprintf('Iteration : %d | Error = %.4f\n', iterasi, Fbest);
%Mencari Nilai Worst
Fmax=max(f_xy); Fmin=min(f_xy); Fmean=mean(f_xy);
[i N]=size(f_xy);
%Menghitung m
if Fmax==Fmin
M=ones(N,1);
else
best=Fmin;
worst=Fmax;
M=(f_xy-worst)./(best-worst);
end
%Menghitung M
M=M./sum(M);
%Menghitung konstanta Gravitasi
alfa=20;G0=100;
G=G0*exp(-alfa*iterasi/max_iter);
[N,dim]=size(X);
final_per=2;
if ElitistCheck==1
kbest=final_per+(1-iterasi/max_iter)*(100-final_per);
kbest=round(N*kbest/100);
else
kbest=N;
end
kbest = kbest;
M=M;
[Ms ds]=sort(M,'descend');
for i=1:N
E(i,:)=zeros(1,dim);
for ii=1:kbest
j=ds(ii);
if j~=i
R=norm(X(i,:)-X(j,:),Rnorm);
for k=1:dim
E(i,k)=E(i,k)+rand*(M(j))*((X(j,k)-X(i,k))/(R^Rpower+eps));
end
end
end
end
%Menghitung percepatan
a=E.*G;
%Error check
if Fbest < Error_best
break
end
[N,dim] = size(X);
V = rand(N,dim).*V + a; %Menghitung kecepatan
X = X + V; %Update X untuk iterasi berikutnya
end
%Cek hasil
fprintf('\nPopulasi awal A = %.4f \nPopulasi awal B = %.4f \nPopulasi awal
C = %.4f \n\n',Xbest(1),Xbest(2),Xbest(3));
fprintf('Number of particle : %d\nTotal iteration : %d\n',N,total_iter);
%Time
times = toc;
fprintf('Time : %.3f seconds \n', times);
fungsi_soal1.m
function p = fungsi_soal2(t)
format shortg
%Load data
par = load('Parameter_Soal2.txt');
%Pindahkan data ke parameter
A = par(1,1);
B = par(1,2);
C = par(1,3);
%Fungsi yang akan dicari nilai parameternya
p = A*exp(-1.5*t) + B*exp(-0.3*t) + C*exp(-0.05*t);
end
fitness_soal1.m
function f_xy = fitness_soal2(X)
%parameter yang di cari
A = X(1,1);
B = X(1,2);
C = X(1,3);
Parm_cari = [A B C];
save Parameter_Soal2.txt Parm_cari -ASCII
t = (0:0.5:10);
p = fungsi_soal2(t);
Eks_Data = load ('Data2.txt');
t_data = Eks_Data (:,1);
p_data = Eks_Data (:,2);
jj = 1;
for ii=1:length(t)
if t_data(jj)>=t(ii) && t_data(jj)<=t(ii)
t_sim(jj)= t(ii);
p_sim(jj)= p(1,ii);
jj=jj+1;
if jj>length(p_data),break,end
else
end
end
%Hitung nilai error simulasi dan eksperimen
cek = [t_sim' t_data p_sim' p_data];
Error = ((p_data-p_sim')).^2;
f_xy = sum(Error);
end
GSA
Iteration : 10 | Error = 0.1171
Iteration : 11 | Error = 0.1171
Iteration : 12 | Error = 0.0976
Iteration : 13 | Error = 0.0976
Iteration : 14 | Error = 0.0643
Populasi awal A = 4.0868
Populasi awal B = 2.7988
Populasi awal C = 1.5930
Number of particle : 250
Total iteration : 14
Time : 144.453 seconds