Anda di halaman 1dari 13

Nama : Febrian Muhamad Rijal

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

a. Ploting data eksperimen

Gambar 1. Plot Data Eksperimen


b. Memprediksi model persamaan dengan menggunakan interpolasi polynomial
Model persamaan interpolasi polynomial diberikan oleh p(x) = a1p1(x) + a2p2(x) + ... + anpn(x),
dengan n adalah jumlah set data yang dimiliki. Derajat tertinggi yang dapat digunakan dalam
interpolasi sebesar n-1 atau kuarng dari n-1, dalam interpolasi kali ini digunakan derajat tertinggi
sebesar n-1.
Basis polynomial p1,..,.pn dapat diselesaikan dengan beberapa metode yaitu Monomial Basis,
Lagrange Basis, dan Newton Basis. Metode yang digunakan pada interpolasi ini adalah Monomial
Basis yang memberikan pi(x) = Mi(x) = xi-1, i = 1,...,n sehingga persamaan interpolasi polynomial
pertama menjadi P(f|x1,...,xn) = a1 + a2x + a3x2 + a4x5 + ... + anxn-1.
Dengan mengubah persamaan diatas kedalam bentuk matriks, diperoleh :
1 𝑥1 ⋯ 𝑥1𝑛−1 𝑎1 𝑓1
1 𝑥2 ⋯ 𝑥2𝑛−1 𝑎 𝑓
( 2 ) = ( 2)
⋮ ⋮ ⋮ ⋮ ⋮
1 𝑥 ⋯ 𝑥 𝑛−1 𝑎𝑛 𝑓
(
⏟ 𝑛 𝑛 ) 𝑛
𝑉𝑛 (𝑉𝑎𝑛𝑑𝑒𝑟𝑚𝑜𝑛𝑑𝑒 𝑀𝑎𝑡𝑟𝑖𝑥)
Maka nilai parameter a1,a2,a3,...an dapat diselesaikan dengan metode perkalian inverse
matriks.

Kode Matlab Interpolasi Polynomial dengan Monomial Basis


clear; clc;
%Load data
dat = load('Data.txt');
x = dat(:,1);
y = dat(:,2);
N = length(x);
V = zeros(length(x),N);
%Inisialisasi Vn Matriks
for cnt = 1:size(V,2)
V(:,cnt) = x.^(cnt-1);
end
%Perkalian dengan inverse matriks
a = pinv(V)*y;
%Inisialisasi nilai x interpolasi
xt = (0:1:40);
Vt = zeros(length(xt),N);
for cnt = 1:size(Vt,2)
Vt(:,cnt) = xt.^(cnt-1);
end
%Mencari nilai P(x)
yt = Vt*a;
%Menampilkan nilai parameter a1,a1,a3,...,an
fprintf('Polynomial Interpolation Parameter\n');
for ii = 1:length(a)
fprintf('a%d = %d\n',ii,a(ii));
end
%Ploting
plot(xt,yt,'LineWidth',1.5)
hold on
plot(x,y,'bo','MarkerFaceColor','b')
xlabel('\fontname{Times New Roman}T (\circC)');
ylabel('\fontname{Times New Roman}\mu (10^{-3} N.s/m^{2})');
legend('\fontname{Times New Roman}Polynomial
Interpolation','\fontname{Times New Roman}Experiment Data Plot');

Command Window Output


Polynomial Interpolation Parameter
a1 = 1.787000e+00
a2 = -6.018655e-02
a3 = 1.424899e-03
a4 = -2.243333e-05
a5 = 1.852976e-07
a6 = -4.404765e-10

Sehingga didapatkan model persamaan :


p(x) = 1.79 – (6.02×10-2)x + (1.42×10-3)x2 – (2.23×10-5)x3 + (1.85×10-7)x4 – (4.41×10-10)x5

μ(T) = 1.79 – (6.02×10-2)T + (1.42×10-3)T2 – (2.23×10-5)T3 + (1.85×10-7)T4 – (4.41×10-10)T5


Gambar 2. Plot Data Eksperimen dan Interpolasi Polynomial
c. Prediksi parameter a1,a2,a3,a4,a5,a6 dalam persamaan μ(T) = a1 + a2T + a3T2 + a4T3 + a5T4 + a6T5
dengan menggunakan algoritma PSO dan GSA.

Kode Matlab PSO dan GSA

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

Command Window Output


PSO
_____5 iterasi terakhir_____
Iteration : 19 | Error = 0.0393
Iteration : 20 | Error = 0.0116
Iteration : 21 | Error = 0.0116
Iteration : 22 | Error = 0.0116
Iteration : 23 | Error = 0.0072

Best value of a1 = 1.728027e+00


Best value of a2 = -5.481515e-02
Best value of a3 = 1.815953e-03
Best value of a4 = -4.772905e-05
Best value of a5 = 2.437037e-07
Best value of a6 = 6.674749e-09
Number of particle : 100
Total iteration : 23
Time : 136.707 seconds

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

Best value of a1 = 1.909656e+00


Best value of a2 = -6.497992e-02
Best value of a3 = 1.023483e-03
Best value of a4 = -1.198711e-05
Best value of a5 = 2.335688e-07
Best value of a6 = -4.758583e-10
Number of particle : 100
Total iteration : 50
Time : 203.715 seconds

Model persamaan interpolasi polynomial: μ(T)=1.79 – (6.02×10-2)T + (1.42×10-3)T2 – (2.23×10-5)T3


+ (1.85×10-7)T4 – (4.41×10-10)T5
Model persamaan dengan optimasi PSO : μ(T)=1.73 – (5.48×10-2)T + (1.82×10-3)T2 – (4.77×10-5)T3
+ (2.44×10-7)T4 – (6.67×10-9)T5
Model persamaan dengan optimasi GSA: μ(T)=1. 19 – (6.50 ×10-2)T + (1.02×10-3)T2 – (1.20×10-5)T3
+ (2.34×10-7)T4 – (4.76×10-10)T5

Gambar 3. Polynomial Interpolation vs PSO Model Optimization vs GSA Model Optimization

d. Gunakan Interpolasi untuk memprediksi nilai pada T = 7.5 oC.


Dengan memodifikasi kode Matlab pada soal 1(b), didapatkan nilai μ pada suhu T = 7.5 oC
sebesar 1.4069 10-3 N.s/m2.

2
Tiga organisme pembawa penyakit membusuk secara eksponensial di air danau memenuhi model
berikut :

p(t) = Ae-1.5t + Be-0.3t + Ce-0.05t

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

dengan menggunakan algoritma PSO dan GSA.

Kode Matlab PSO dan GSA

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

Command Window Output


PSO
Iteration : 1 | Error = 0.2832
Iteration : 2 | Error = 0.2797
Iteration : 3 | Error = 0.0748

Populasi awal A = 4.3103


Populasi awal B = 2.7452
Populasi awal C = 1.5723
Number of particle : 250
Total iteration : 3
Time : 53.902 seconds

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

Tabel 1. Jumlah populasi awal tiap organisme


Populasi Awal Organisme
A B C
PSO 4.3103 2.7452 1.5723
GSA 4.0868 2.7988 1.5930

Gambar 4. Penurunan populasi organisme Simulasi PSO vs Simulasi GSA

Anda mungkin juga menyukai