Skenario 1:
- Kasus #1 = 6 kota
- Kasus #2 = 7 kota
- Kasus #3 = 8 kota
- Kasus #4 = 9 kota
- Kasus #5 = 10 kota
KASUS #1: Best Rute = 1 3 5 2 4 6 1 Min-cost = 53 KASUS #2: Best Rute = 1 4 3 7 2 6 5 1 Min-cost = 40 KASUS #3: Best Rute = 1 7 8 2 6 3 5 4 1 Min-cost = 83 KASUS #4: Best Rute = 1 5 7 3 9 6 2 4 8 1 Min-cost = 46 KASUS #5: Best Rute = 1 6 2 7 4 9 3 5 10 8 1 Min-cost = 37
Deskripsi :
Skenario 1 pada soal kecil diatas merupakan best rute dan min-cost untuk masing kasus(1-5) dengan iterasi 100
Source code:
function [bestrute,mincost]=aco(d,iter,n_ants); %input: %d - matrik jarak ukuran n x n %iter -jumlah iterasi (digunakan 200 iterasi) %n_ants- jumlah semut (digunakan 50 ants) m=n_ants; %jumlah semut n=length(d); %jumlah kota. e=.5; %evaporation coefficient. alpha=1; %pangkat untuk ants’ sight. beta=3; %pangkat untuk trace’s effect. for i=1:n %generating sight matrix. for j=1:n if d(i,j)==0 h(i,j)=0; else h(i,j)=1/d(i,j);%inverse distance end end end t=0.01*ones(n); %tho awal, el=.96; %coefficient of common cost elimination. for i=1:iter for i=1:m app(i,1)=1; %semua semut mulai dari kota 1 end %rute semut for i=1:m %untuk semua semut mh=h; %matriks invers jarak for j=1:n-1 %simpul berikutnya c=app(i,j); %memilih satu kota mh(:,c)=0; %jika sdh dipilih maka inv distance=0 temp=(t(c,:).^beta).*(mh(c,:).^alpha) %menghitung tho pheromone s=(sum(temp)) %jumlah tho p=(1/s).*temp; %probabilitas r=rand; s=0; for k=1:n %banyaknya kota s=s+p(k); if r<=s app(i,j+1)=k; %penempatan semut i di simpul berikutnya break end end end end at=app; % hasil rute at=horzcat(at,at(:,1)); % diakhir rute kembali ke kota 1 % menghitung cost for i=1:m s=0; for j=1:n s=s+d(at(i,j),at(i,j+1)); %menghitung jarak rute utk semua semut end f(i)=s; end cost=f; f=f-el*min(f); %eliminasi ongkos . %update ruas dari rute terbaik for i=1:m for j=1:n dt=1/f(i); %inverse jarak total t(at(i,j),at(i,j+1))=(1-e)*t(at(i,j),at(i,j+1))+dt; %updating tau, dimana rute terbaik otomatis %mendapat tambahan pheromone terbesar. end end [mincost(i),number]=min(cost); bestrute(i,:)=at(number,:); iteration(i)=i; end bestrute=bestrute(end,:);
om., gmn cara running programnya??
saya bingung om