Professional Documents
Culture Documents
%=============================== %
% TUGAS MA5171 METODE OPTIMASI
%
% LANJUT
%
% DOSEN : DR. JANSON NAIBORHU
%
% NAMA : RONI AL MAUDUDI
%
% NIM : 20113026
%
% TRAVEL SALESMAN PROBLEM GENETIC%
% ALGORITHM
%
%=============================== %
format short
clear all;
clc;
cost=[0 806 2275 1100 1340 473.8
1019 1472 1461 523 1563 1508 999.2
1335 950 755 1312 881 1780 2756;
806 0 1474 778 461 1353 1279
2131 571 1169 2340 1819 1394 1210
1374 1609 1388 502 1600 2783;
2275 1474 0 725 1391 918 1271
781 2085 577 650 463 463 1257 1082
871 1587 1566 871 1388;
1100 778 725 0 601 664 521 1078
1130 514 1396 1060 613 363 445 1014
618 522 821 2078;
1340 461 1391 601 0 1227 1123
1774 2409 1033 2557 1712 1227 996
964 1480 786 426 1794 2615;
473.8 1353 918 664 1227 0 1066
1365 2037 341 1381 1306 849 1102
548 378 1433 1517 1366 2585;
1019 1279 1271 521 1123 1066 0
1665 1740 939 2034 1577 1129 912
891 1343 1156 1049 2060 2752;
1472 2131 781 1078 1774 1365
1665 0 2361 825 1115 1080 680 1534
2006 1710 2432 2349 1425 2298;
1461 571 2085 1130 2409 2037
1740 2361 0 1642 2562 2241 1887
1646 2593 3052 2985 3017 2351 4059;
523 1169 577 514 1033 341 939
825 1642 0 986 870 507 930 427 411
1049 1191 826 1964;
1563 2340 650 1396 2557 1381
2034 1115 2562 986 0 1114 1193 1561
1529 2897 1712 2987 1042 4007;
1508 1819 463 1060 1712 1306
1577 1080 2241 870 1114 0 399 1452
1076 2853 1577 1903 862 1910;
999.2 1394 463 613 1227 849
1129 680 1887 507 1193 399 0 1030
683 915 1186 1567 930 1798;
for i=1:6
offs(:,i)=randsample(20,19);
end
for i=1:6
for j=1:20
if offs(:,i)~=j
offs(20,i)=j;
end
end
end
%Inisialisasi selesai%
%Mulai men-generate populasi%
%Menghitung harga tiket pesawat%
iter=1;
while iter <=maxiter
harga=[0;0;0;0;0;0];
harga1=[0;0;0;0;0;0];
pop=offs;
for i=1:6
for j=1:19
harga(i)= harga(i)+
cost(pop(j,i), pop(j+1,i));
end
harga(i)=
harga(i)+cost(pop(20,i),pop(1,i));
end
%Menghitung
energi/kemampuan/fitness%
for i=1:6
fitness(i)=1/harga(i);
end
totalfitness=sum(fitness);
%Menghitung peluang%
for i=1:6
prob(i)=fitness(i)/totalfitness;
end
cek=min(harga);
prob2=sort(prob,'descend');
for i=1:6
for j=1:6
if prob(j)==prob2(i)
popbar(:,i)=pop(:,j);
end
end
end
%Men-generate populasi selesai%
%Memulai seleksi%
cum(1)=prob2(1);
for i=2:6
cum(i)=prob2(i)+cum(i-1);
end
%roulete wheel%
for i=1:6
R(i)=rand(1);
end
for i=1:6
j=2;
if R(i)<=cum(1)
seleksi(i)=1;
else
while j<=6
if R(i)<=cum(j)
seleksi(i)=j;
j=7;
else
j=j+1;
end
end
end
end
%crossover%
for i=1:6
cross(i)=rand(1);
end
cross2=sort(cross,'ascend');
for i=1:3
for j=1:6
if cross2(i)==cross(j)
cr(i)=j;
end
end
end
for i=1:3
popcross(:,i)= popbar(:,i);
end
simpan=popcross;
%crossover%
%persilangan%
for j=1:3
titik(j)=randi([1,20],1);
end
%cross 1 dan 2%
for l=titik(1)+1:20;
popcross(l,1)=simpan(l,2);
popcross(l,2)=simpan(l,1);
end
status=zeros(20,1);
status2=zeros(20,1);
for i=1:titik(1)
j=titik(1)+1;
while j<=20
if
popcross(i,1)==popcross(j,1)
j=titik(1)+1;
while j<=20
if status(j)==0 &&
j<=20
popcross(i,1)=simpan(j,1);
status(j)=1;
j=21;
while j<=20
if status(j)==0 &&
else
j=j+1;
end
end
j=21;
else
j=j+1;
end
end
end
for i=1:titik(1)
j=titik(1)+1;
while j<=20
if
popcross(i,2)==popcross(j,2)
j=titik(1)+1;
while j<=20
if status2(j)==0 &&
j<=20
popcross(i,2)=simpan(j,2);
status2(j)=1;
j=21;
else
j=j+1;
end
end
j=21;
else
j=j+1;
end
end
end
offs(:,1)=popcross(:,1);
offs(:,2)=popcross(:,2);
%cross 1 dan 2%
%cross 2 dan 3%
pocross=simpan;
for l=titik(2)+1:20;
popcross(l,2)=simpan(l,3);
popcross(l,3)=simpan(l,2);
end
status=zeros(20,1);
status2=zeros(20,1);
for i=1:titik(2)
j=titik(2)+1;
while j<=20
if
popcross(i,2)==popcross(j,2)
j=titik(2)+1;
j<=20
popcross(i,2)=simpan(j,2);
status(j)=1;
j=21;
else
j=j+1;
end
end
j=21;
else
j=j+1;
end
end
end
for i=1:titik(2)
j=titik(2)+1;
while j<=20
if
popcross(i,3)==popcross(j,3)
j=titik(2)+1;
while j<=20
if status2(j)==0 &&
j<=20
popcross(i,3)=simpan(j,3);
status2(j)=1;
j=21;
else
j=j+1;
end
end
j=21;
else
j=j+1;
end
end
end
offs(:,3)=popcross(:,2);
offs(:,4)=popcross(:,3);
%cross 2 dan 3%
%cross 1 dan 3%
popcross=simpan;
for l=titik(3)+1:20;
popcross(l,1)=simpan(l,3);
popcross(l,3)=simpan(l,1);
end
status=zeros(20,1);
status2=zeros(20,1);
for i=1:titik(3)
j=titik(3)+1;
while j<=20
if
popcross(i,1)==popcross(j,1)
j=titik(3)+1;
while j<=20
if status(j)==0 &&
j<=20
for i=1:6
mut(i)=randi([1,20],1);
probm(i)=rand(1);
end
save=offs;
for i=1:6
if probm<=pm
if mut(i)~=20
offs(mut(i),i)=save(mut(i)+1,i);
popcross(i,1)=simpan(j,1);
status(j)=1;
j=21;
else
j=j+1;
end
end
j=21;
else
j=j+1;
end
end
end
for i=1:titik(3)
j=titik(3)+1;
while j<=20
if
popcross(i,3)==popcross(j,3)
j=titik(3)+1;
while j<=20
if status2(j)==0 &&
j<=20
popcross(i,3)=simpan(j,3);
status2(j)=1;
j=21;
else
j=j+1;
end
end
j=21;
else
j=j+1;
end
end
end
offs(:,5)=popcross(:,1);
offs(:,6)=popcross(:,3);
%cross 1 dan 3%
%Persilangan selesai%
%Mutasi%
pm=0.25;
offs(mut(i)+1,i)=save(mut(i),i);
else
offs(mut(i),1)=save(mut(1),i);
ofss(mut(1),i)=save(mut(i),i);
end
else
offs(mut(i),i)=offs(mut(i),i);
end
end
save=offs;
for i=1:6
for j=1:19
harga1(i)= harga1(i)+
cost(save(j,i), save(j+1,i));
end
harga1(i)=
harga1(i)+cost(save(20,i),save(1,i)
);
end
harga2=[harga;harga1];
harga3=sort(harga2, 'ascend');
popu=[pop save];
for i=1:12
j=1;
while j<=12
if harga2(j)==harga3(i)
sel(i)=j;
j=13;
else
j=j+1;
end
end
end
for i=1:6
offs(:,i)=popu(:,sel(i));
end
harga1=[0;0;0;0;0;0];
for i=1:6
for j=1:19
harga1(i)= harga1(i)+
cost(offs(j,i), offs(j+1,i));
end
harga1(i)=
harga1(i)+cost(offs(20,i),offs(1,i)
);
end
cek2=min(harga1);
if cek==cek2 && count<=5
hitung=iter;
iter=iter+1;
count=count+1;
else if cek==cek2 && count>5
hitung=iter;
iter=maxiter+1;
else
hitung=iter;
iter=iter+1;
end
end
end
disp(['Banyak Iterasi' '
' 'Harga
Minimum Tiket']);
disp(['
' num2str(hitung) '
' num2str(cek2)]);