You are on page 1of 5

LAPORAN TUGAS 1 MATA KULIAH KECERDASAN MESIN DAN ARTIFISIAL

PENYELESAIAN MASALAH TSP DENGAN SIMULATED ANNEALING

KELOMPOK 62 (IF 33 04) ANGGOTA : IRSYAD KAMALUDIN ALPHA FERRY C.N. DWI CAHYO NUGROHO FIONE KUSUMASINDRA 113090246 113090247 113090248 113090249

FAKULTAS INFORMATIKA INSTITUT TEKNOLOGI TELKOM MARET 2012

DESAIN
Kasus yang diangkat dalam tugas ini adalah permasalahan TSP atau Travelling Salesman Problem, yaitu pencarian rute pada sejumlah kota yang diberikan dengan syarat semua kota harus dikunjungi satu kali, mulai dari kota tertentu dan kembali ke kota tersebut. Inti dari permasalahannya adalah bagaimana menemukan total biaya yang paling minimum , dalam hal ini adalah jarak. Daftar jumlah kota yang diberikan ada tiga jenis yaitu 16 kota (ulysses16.tsp), 22 kota (ulysses22.tsp) dan 52 kota (berlin52.tsp). Untuk mendapatkan total jarak yang minimum akan dilakukan pencarian dengan salah satu metode Informed Search yaitu Simulated Annealing. Simulated Annealing mengadopsi dari cara proses pembentukan kristal dari dalam sebuah materi. Algoritma simulated annealing ini tidak sepenuhnya greedy dan dapat bersifat sama seperti bruteforce ketika suhu awal diberi nilai yang terlalu tinggi. Akurasi yang didapat jika menggunakan algoritma simulated annealing tidak selalu 100%. Kelebihannya, kita dapat menemujan solusi optimal tanpa harus mengeksplorasi semua kemungkinan solusi. Untuk penyelesaian pada masalah TSP dengan algoritma simulated annealing, pertama dibuat variabel current state dimana isinya adalah solusi awal. Ketika solusi awal ini bukan solusi yang optimal maka solusi awal ini bersifat sementara dan kemudian dimasukkan ke variabel best so far. Variabel yang perlu dibuat adalah suhu awal Tawal, suhu akhir Takhir, bilangan sebagai penurun suhu, bilangan k sebagai banyaknya iterasi pada setiap penurunan suhu. Langkah selanjutnya lakukan iterasi dan berhenti ketika suhu awal sama dengan suhu akhir. Jika solusi baru (new state) memiliki jarak yang lebih besar dari solusi awal maka dibuat sebuah bilangan interval [0,1] secara random. Disini kita menggunakan probabilitas untuk menentukan apakah state tersebut layak untuk digunakan sebagai current state, dengan persamaan p(E ) exp(-E/T) atau p(E ) e E / T . Jika bilangan random tersebut kurang dari persamaan tersebut, maka jadikan new state tersebut menjadi current state. Kemudian suhu awal diubah dengan rumus suhu awal = * suhu awal. Untuk mengukur akurasi , dapat digunakan rumus (jarak solusi optimal / jarak solusi yang didapat) * 100% . Ruang solusi atau disebut juga dengan ruang pencarian berpengaruh terhadap kasus ini. Jika ruang solusinya sangat sempit, maka proses pencarian akan lebih mudah karena tidak banyak state yang harus dieksplorasi. Penerapan desain simulated annealing untuk data ulysses16.tsp akan lebih mudah ditemukan akurasi yang lebih bagus jika dibandingkan dengan data berlin52.tsp. Pseudo code algoritma simulated annealing :
CurrentState = Create Initial Solution BESTSOFAR = CurrentState Set Initial Temperature (Tawal&Takhir) while (Tawal>Takhir) do repeat k times if ( k = 1) then NewState = CreateState(BESTSOFAR) else NewState = CreateState(CurrentState) end if E = E(NewState) - E(CurrentState) if (E <= 0) then CurrentState = NewState if( E(NewState) < E(BESTSOFAR) )then BESTSOFAR = NewState end if elseif ( P > random(0, 1) ) then currentState = newState end if end repeat Tawal = * Tawal end while

Ada beberapa cara dalam membuat solusi baru yaitu swap, insert , shift, dll. Yang kita gunakan dalam kasus disini adalah swap atau shift. Prosesnya jika swap atau pertukaran, misal jika S = 1-2-3-4-5-6 maka S1 = 1-4-3-2-5-6. Kemudian jika shift atau pergeseran, missal S = 1-2-3-4-5-6 maka S1 = 1-6-2-3-4-5.

IMPLEMENTASI
Beberapa fungsi/prosedur yang ada di algoritma simulated annealing antara lain adalah CreateState, NewState. Kemudian pendeklarasian variabel-variabel seperti Tawal, Takhir, k dan . Fungsi untuk menghitung jarak:
function [Totjarak] = CountR(State,N) Totjarak = 0; % inisialisasi for i=1:(N-1) jarak = sqrt((State(i).x - State(i+1).x)^2 + (State(i).y - State(i+1).y)^2); Totjarak = Totjarak + jarak; end jarak = sqrt((State(N).x - State(1).x)^2 + (State(N).y - State(1).y)^2); Totjarak = Totjarak + jarak; end

Fungsi untuk membuat NextState:


function [ newState ] = NextState( State ,N,cmd) for i=1:N % membuat duplikat dari State Awal dan akan dioutputkan newState(i) = struct('id',State(i).id,'x',State(i).x,'y',State(i).y); end; total = 0; for i=1:(N-1) jarak(i) = sqrt((State(i).x - State(i+1).x)^2 + (State(i).y - State(i+1).y)^2); total = jarak(i) + total; end jarak(N) = sqrt((State(N).x - State(1).x)^2 + (State(N).y - State(1).y)^2); total = jarak(N) + total; total = total/N; a=1; b=1; c=1; while a>N || b>N || a==b || a==1 || b==1 || a==c || b==c || c>N || c==1 a=round((N+1)-(rand(1))*(N-1)); % mengacak nilai pointer a b=round((N+1)-(rand(1))*(N-1)); % mengacak nilai pointer b c=round((N+1)-(rand(1))*(N-1)); if cmd == 1 newState(a) = struct('id',State(b).id,'x',State(b).x,'y',State(b).y); newState(b) = struct('id',State(c).id,'x',State(c).x,'y',State(c).y); newState(c) = struct('id',State(a).id,'x',State(a).x,'y',State(a).y); else if b>a for i=(b-1):-1:a newState(i+1) = struct('id',State(i).id,'x',State(i).x,'y',State(i).y); end; newState(a) = struct('id',State(b).id,'x',State(b).x,'y',State(b).y); else for i= a:-1:b+1 newState(i-1) = struct('id',State(i).id,'x',State(i).x,'y',State(i).y); end; newState(a) = struct('id',State(b).id,'x',State(b).x,'y',State(b).y); end; end end

Membuat record data kota:


JumlahKota = dataKota(end,1) for i=1:JumlahKota City(i) = struct('id',dataKota(i,1),'x',dataKota(i,2),'y',dataKota(i,3)); end for i=1:JumlahKota Solusi(i) = struct('id',dataSolusi(1,i),'x',0,'y',0); end for i=1:JumlahKota Solusi(i) = struct('id',Solusi(i).id,'x',City(Solusi(i).id).x,'y',City(Solusi(i).id).y); End

Inisialisasi variabel:
case '1' Tawal = 10; k = 10; a = 0.035529; case '2' Tawal = 36; k = 18; a = 0.06529; case '3' Tawal = 76; k = 25; a = 0.16529;

Fungsi untuk CreateState:


function [ newState ] = CreateState( State ,N) for i=1:N % membuat duplikat dari State Awal dan akan dioutputkan newState(i) = struct('id',State(i).id,'x',State(i).x,'y',State(i).y); end; random = randperm(N-1)+1; for i=2:N newState(i) = struct('id',State(random(i-1)).id,'x',State(random(i1)).y);

Menghitung akurasi:
end

1)).x,'y',State(random(i-

end; akurasi = (JarakSolusi/CountR(BestSoFar,JumlahKota))*100;

ANALISIS HASIL
Dalam penyelesaian masalah TSP ini, yang dianalisis atau yang harus dipertimbangkan adalah nilai T (temperatur) atau suhu, kemudian nilai k dan nilai . Variabel variabel tersebut berpengaruh terhadap hasil solusi yang didapat, dalam hal waktu pencarian ataupun jumlah solusi yang dibangkitkan. Terlebih nantinya akan berpengaruh terhadap akurasi. a. Nilai k Salah satu komponen dalam simulated annealing adalh nilai k yaitu jumlah iterasi pada setiap temperatur. Nilai k yang terlalu besar dapat mengakibatkan proses pencarian menjadi lebih panjang dan lama karena banyak solusi yang akan dieksplorasi dan jumlah solusi yang dibangkitkan akan hampir menyamai bruteforce. Dalam kasus TSP ini, jika kita menggunakan satu nilai k yang sama untuk ulysses16.tsp, ulysses22.tsp dan berlin52.tsp, maka jumlah solusi yang dibangkitkan untuk 16 kota akan menghasilkan hasil yang terlalu banyak jika dibandingkan dengan 52 kota. Jadi, penentuan nilai k memperhatikan juga ruang solusi yang dimiliki. Jika pada temperatur rendah, sebaiknya gunakan iterasi yang besar sehingga semua dapat dieksplorasi sedangkan pada temperatur tinggi gunakan iterasi yang sedikit. b. Nilai Semakin besar nilai yang digunakan maka semakin lama pula proses penurunan temperatur untuk mencapai kondisi berhenti. Maka disini kami menggunakan nilai yang relative kecil. Dalam percobaan sebelumnya nilai yang kami gunakan sekitar 0,4 sangat berpengaruh terhadap jumlah solusi yang dieksplorasi sehingga solusinya kami gunakan nilai yang jauh lebih kecil agar cepat menemukan solusi dengan jumlah solusi yang dibangkitkan tidak terlalu banyak. c. Nilai temperatur
end

Nilai temperatur awal akan dipengaruhi oleh nilai yang akan menurunkan temperatur tersebut hingga temperatur akhir. Pemberian nilai temperatur yang terlalu tinggi atau rendah akan percuma saja, karena menghasilkan jumlah solusi yang dibangkitkan terlalu banyak. Tidak ada metode akurat untuk menentukan temperatur awal untuk semua masalah. Jadi dalam kasus ini kami memperhatikan juga terhadap nilai melalui berbagai percobaan.

KESIMPULAN
Pemberian nilai T, k dan diatur berbeda-beda pada tiap jumlah kota karena harus memperhatikan ruang solusi yang dimiliki. Semakin tinggi nilai dan k semakin banyak pula jumlah solusi yang dibangkitkan. Jumlah solusi yang dibangkitkan merupakan indikator terhadap keefektifan pencarian solusi karena jika terlalu banyak solusi yang dibangkitkan, maka simulated annealing tidak lagi efektif karena hasil itu hampir menyamai bruteforce. Di bawah ini merupakan potongan hasil 20 kali beruntun running program tiap jumlah kota, yang manampilkan akurasi rata-rata program : 16 kota :
Tawal = 10; k = 10; a = 0.035529;

22 kota :

Tawal = 36; k = 18; a = 0.06529;

52 kota :

Tawal = 76; k = 25; a = 0.16529;

*Note : Printscreen hasil sekali running dengan 20 kali hasil beruntun terdapat di File Lampiran yang ada di dalam CD.

You might also like