420 likes | 1.01k Views
Algoritma Genetik – by Ignas Lamabelawa. Penyelesaian TSP dengan Algoritma Genetik. sebuah persoalan optimasi untuk mencari rute terpendek bagi seorang pedagang keliling ( salesman ) Persoalan optimasi yang ingin dicapai ialah rute yang dilalui dan biaya yang digunakan paling minimum.
E N D
AlgoritmaGenetik – by IgnasLamabelawa Penyelesaian TSP denganAlgoritmaGenetik
sebuah persoalan optimasi untuk mencari rute terpendek bagi seorang pedagang keliling (salesman) Persoalan optimasi yang ingin dicapai ialah rute yang dilalui dan biaya yang digunakan paling minimum pENGERtian tsp
Bila dipandang dari sudut komputasinya, algoritma ini dapat diselesaikan dengan cepat walaupun dengan menggunakan algoritma brute force sekalipun, jika kota-kota yang akan dikunjunginya sedikit. Namun, jika kota-kota yang akan dikunjungi banyak, maka algoritma seperti Brute Force tidaklah menjadi pilihan lagi. Sebab, Algoritma Brute Force sendiri memiliki kompleksitas O(n!) Permasalahan
Salah satu cara untuk menyelesaikan TSP yaitu dengan menggunakan Algoritma Brute Force. Hal yang dilakukan ialah dengan cara mengenumerasi seluruh kemungkinan rute yang akan ditempuh Metodepenyelesain tsp konvensional
Beberapa metode telah dikembangkan untuk memecahkan persoalan ini namun belum ditemukan algoritma penyelesaian yang optimal. Salah satu algoritma yang muncul untuk menyelesaikan persoalan ini ialah Algoritma Genetika Metodepenyelesaian - algortimagenetik
Jumlah node (n)ada 5 buah, Jumlah kemungkinan jalur = (n-1)! / 2 Jumlahjalur 4! /2 = 12 buah Dimisalkantitikasal A dantitikakhiradalah A Makajumlahjalurdanpanjanglintasannyaadalah : Penyelesaian 1
Lintasan 1 = (a b c d e a) atau (a e d c b a) memiliki panjang lintasan = 7 + 7 + 4 + 6 + 9 = 33 Lintasan 2 = (a b c e d a) atau (a d e c b a) memiliki panjang lintasan = 7 + 7 + 3 + 6 + 9 = 32 Lintasan 3 = (a b d c e a) atau (a e c d b a) memiliki panjang lintasan = 7 + 2 + 4 + 3 + 9 = 25 Lintasan 4 = (a b d e c a) atau (a c e d b a) memiliki panjang lintasan = 7 + 2 + 6 + 3 + 5 = 23 Lintasan 5 = (a b e c d a) atau (a d c e b a) memiliki panjang lintasan = 7 + 8 + 3 + 4 + 9 = 31 Lintasan 6 = (a b e d c a) atau (a c d e b a) memiliki panjang lintasan = 7 + 8 + 6 + 4 + 5 = 30 Lintasan 7 = (a c b d e a) atau (a e d b c a) memiliki panjang lintasan = 5 + 7 + 2 + 6 + 9 = 29 Lintasan 8 = (a c b e d a) atau (a d e b c a) memiliki panjang lintasan = 5 + 7 + 8 + 6 + 9 = 35 Lintasan 9 = (a c d b e a) atau (a e b d c a) memiliki panjang lintasan = 5 + 4 + 2 + 8 + 9 = 28 Lintasan 10 = (a d b c e a) atau (a e c b d a) memiliki panjang lintasan = 9 + 2 + 7 + 3 + 9 = 30 Lintasan 11 = (a d b e c a) atau (a c e b d a) memiliki panjang lintasan = 9 + 2 + 8 + 3 + 5 = 27 Lintasan 12 = (a d c b e a) atau (a e b c d a) memiliki panjang lintasan = 9 + 4 + 7 + 8 + 9 = 37 Lintasan yang jaraknya paling pendekadalah : 4 yaitu 23 Penyelesaian 2
Dari hasil ke-12 enumerasi di atas didapatkan panjang jalur lintasan paling minimum yaitu 23. Jumlah enumerasi dari algoritma ini ialah (n - 1)! yang akan memerlukan waktu yang sangat lama untuk mendapatkan panjang lintasan paling minimum jika nilai n bernilai sangat besar. hasil
Dengancontoh yang samadiatas, tahap2 penyelesaian TSP dengan AG adalah : Inisialisasi Evaluasikromosom SeleksiKromosom PindahSilang (crossover) Mutasi Penyelesaiandenganag
Dipilih secara random ada 6 buah populasi dalam satu generasi, yaitu : Kromosom[1] = [B D E C] Kromosom[2] = [D B E C] Kromosom[3] = [C B D E] Kromosom[4] = [E B C D] Kromosom[5] = [E C B D] Kromosom[6] = [C D E B] Inisialisasi
Menghitung nilai fitness dari tiap kromosom yang telah dibangkitkan pada langkah 1 di atas, dengan menghitung bobot dari setiap lintasan : Fitness[1] = AB+BD+DE+EC+CA = 7 + 2 + 6 + 3 + 5 = 23 Fitness[2] = AD+DB+BE+EC+CA = 9 + 2 + 8 + 3 + 5 = 27 Fitness[3] = AC+CB+BD+DE+EA = 5 + 7 + 2 + 6 + 9 = 29 Fitness[4] = AE+EB+BC+CD+DA = 9 + 8 + 7 + 4 + 9 = 37 Fitness[5] = AE+EC+CB+BD+DA = 9 + 3 + 7 + 2 + 9 = 30 Fitness[6] = AC+CD+DE+EB+BA = 5 + 4 + 6 + 8 + 7 = 30 Evaluasikromosom
Q[i] = 1 / Fitness[i] Q[1] = 1 / 23 = 0,043 Q[2] = 1 / 27 = 0,037 Q[3] = 1 / 29 = 0,034 Q[4] = 1 / 37 = 0,027 Q[5 = 1 / 30 = 0,033 Q[6] = 1 / 30 = 0,033 Total = 0,043 + 0,037 + 0,034 + 0,027 + 0,033 + 0,033 = 0,207 seleksi
Untuk mencari probabilitas kita menggunakan rumus berikut : P[i] = Q[i] / Total (2) P[1] = 0,043 / 0,207 = 0,208 P[2] = 0,037 / 0,207 = 0,179 P[3] = 0,034 / 0,207 = 0,164 P[4] = 0,027 / 0,207 = 0,130 P[5] = 0,033 / 0,207 = 0,159 P[6] = 0,033 / 0,207 = 0,159 Probabilitas
Dengan C[1] = 0,028 C[2] = 0,028+0,179 = 0,387 C[3] = 0,387+0,164 = 0,551 C[4] = 0,551+0,130 = 0,681 C[5] = 0,681+0,159 = 0,840 C[6] = 0,840+0,159 = 1 ProbabilitaskUMULATIF
metode roulette wheel Bilabilangan random R[i] yang dihasilkansbb : R[1] = 0,314 R[2] = 0,111, R[3] = 0,342, R[4] = 0,743 R[5] = 0,521, R[6] = 0,411 Induk yang dipilihdengan C[k-1]<R[k]<C[k] menghasilkan : C[2],C[[1],C[3],C[5],C[[4],C[]
Kromosom[1] = [D B E C] Kromosom[2] = [B D E C] Kromosom[3]= [C B D E] Kromosom[4] = [E C B D] Kromosom[5] = [E B C D] Kromosom[6] = [C D E B] Populasibaru yang terbentuk
Misalparameter crossoverprobability (ρc) = 25%. Berarti jika bilangan random dihasilkan < 0.25 maka akan dipilih menjadi induk baru. Hasil 6 bilangan random yang dihasilkan adalah : R[1] = 0,451 , R[2] = 0,211 , R[3] = 0,202 , R[4] = 0,877 , R[5] = 0,771 ,R[6] = 0,131 , Kromosom ke-k yang dipilih sebagai induk jika R[k] < ρc. Maka yang akan dijadikan induk adalah kromosom[2], kromosom[3], dan kromosom[6]. Pindahsilang(crossover)
Proses crossover : Kromosom[2] = Kromosom[2] >< Kromosom[3] = [B D E C] >< [C B D E] = [B D C E] Kromosom[3] = Kromosom[3] >< Kromosom[6] = [C B D E] >< [C D E B] = [C D E B] Kromosom[6] = Kromosom[6] >< Kromosom[2] =[C D E B] >< [B D E C] = [C D B E] Proses crossover :
Kromosom[1] = [D B E C] diambil dari kromosom induk 1 Kromosom[2] = [B D C E] diambil dari hasil crossover kromosom 2 dan 3 Kromosom[3] = [C D E B] diambil dari hasil crossover kromosom 3 dan 6 Kromosom[4] = [E C B D] diambil dari kromosom induk 4 Kromosom[5] = [E B C D] diambil dari kromosom induk 5 Kromosom[6] = [C D B E] diambil dari hasil crossover kromosom 6 dan 2 Hasil crossover
Panjang total gen = jumlah gen dalam 1 kromosom * jumlah Kromosom (3) = 4 * 6 = 24 Misal probabilitas mutasi (ρm) = 20 %, maka jumlah gen yang akan dimutasi adalah = 0,2*24 = 4,8 = 5 .Posisi tersebut didapat dari pembangkitan 5 bilangan acak, mis bilangan acak yang dihasilkan adalah 0,1 maka posisi gen yang akan dimutasi adalah posisi no 3, dimana 0.1 < 3/24 Mis 5 buah posisi gen yang akan dimutasiadalah 3, 7, 10, 20, 24. mutasi
Kromosom[1] = [D B CE] Kromosom[2] = [B D EC] Kromosom[3] = [C ED B] Kromosom[4] = [E C B D] Kromosom[5] = [D B C E] Kromosom[6] = [E D B C] Prosesmutasi
Kelebihan algoritma genetika dibandingkan metode pencarian konvensiona pada TSP yaitu 1. Solusi dapat diperoleh kapanpun karena solusi dihasilkan pada generasi ke berapapun 2. Algoritma genetika tidak harus membutuhkan waktu yang lama karena tidak semua kemungkinan dicoba, tergantung pada kriteria berakhirnya. 3. Algoritma pencarian konvensional dilakukan apabila jumlah n kecil, tapi jika n nya banyak maka akan memakan banyak waktu untuk penyelesaian dibandingkan algoritma genetik Kesimpulan
Ada 10 kota yang dipetakandalamtitikkoordinat sebagaiberikut : Kota(x,y) = [1 3;1 7; 3 9; 5 3; 7 1; 9 5; 9 9; 11 1;15 7; 19 3]; Contoh program tsp denganmatlab
function Populasi = TSPInisialisasiPopulasi(UkPop,JumGen) for i=1:UkPop, [Xval,Ind] = sort(rand(1,JumGen)); Populasi(i,:) = Ind; end 1. Inisialisasi
Misalkan diambil ukuran populasi atau jumlahkromosomdalampopulasi = 20 Jumlah gen dalam kromosom/ jumlahkota = 10 >> TSPinisialisasiPopulasi(20,10) Y = 8 7 3 2 4 5 1 9 6 10 10 3 5 2 6 8 9 4 1 7 1 9 8 10 7 3 6 5 2 4 10 8 1 7 6 5 3 4 2 9 2 8 1 7 6 9 4 3 10 5 2 8 1 3 9 10 4 5 7 6 1 5 8 10 6 3 4 9 2 7 7 3 4 8 10 9 1 5 2 6 5 10 4 2 6 9 1 3 8 7 10 1 4 3 5 2 7 6 9 8 5 3 1 2 6 4 7 10 9 8 4 8 1 10 7 2 3 9 6 5 10 4 6 8 2 5 9 1 7 3 6 1 3 2 4 5 8 9 10 7 6 7 2 8 3 9 10 5 4 1 10 6 3 4 9 2 5 7 1 8 4 7 6 5 10 2 3 1 8 9 2 9 10 5 6 8 4 3 7 1 6 9 1 7 3 4 2 8 5 10 1 9 7 8 10 4 3 5 2 6 Implementasi
function fitness = TSPEvaluasiIndividu(Kromosom,JumGen,XYkota) TB = 0; For i=1:JumGen-1, TB = TB + norm(XYkota(Kromosom(ii),:) - XYkota(Kromosom(i+1),:)); end % Jalurharuskembalikekotaasal TB = TB + norm(XYkota(Kromosom(JumGen),:) - XYkota(Kromosom(1),:)); fitness = 1 / TB; 2. Hitungnilai fitness
>> TSPEvaluasiIndividu(Y,10,XYkota) TB = 105.3432 ans = 0.0095
function LFR = LinearFitnessRanking(UkPop,Fitness,MaxF,MinF) [SF,IndF] = sort(Fitness); % LinearFitness = nilai fitness baruhasil pen-skala-an for rr=1:UkPop, LFR(IndF(UkPop-rr+1)) = MaxF-(MaxF-MinF)*((rr-1)/(UkPop-1)); end LINEARFITNESSRANKING
function Pindex = RouletteWheel(UkPop,LinearFitness); JumFitness = sum(LinearFitness); KumulatifFitness = 0; RN = rand; ii = 1; while ii <= UkPop, KumulatifFitness = KumulatifFitness + LinearFitness(ii); if (KumulatifFitness/JumFitness) > RN, Pindex = ii; break; end ii = ii + 1; end ROULETTE WHEEL
function Anak = TSPPindahSilang(Bapak,Ibu,JumGen) cp1 = 1 + fix(rand*(JumGen-1)) cp2 = 1 + fix(rand*(JumGen-1)) while cp2==cp1, cp2 = 1 + fix(rand*(JumGen-1)) end if cp1 < cp2, cps = cp1; cpd = cp2; else cps = cp2; cpd = cp1; end Anak(1,cps+1:cpd) = Ibu(cps+1:cpd); Anak(2,cps+1:cpd) = Bapak(cps+1:cpd); C=Anak(1,cps+1:cpd) D=Anak(2,cps+1:cpd) SisaGenbapak = []; SisaGenIbu = []; for ii=1:JumGen, if ~ismember(Bapak(ii),Anak(1,:)), SisaGenbapak = [SisaGenbapakBapak(ii)]; end if ~ismember(Ibu(ii),Anak(2,:)), SisaGenIbu = [SisaGenIbuIbu(ii)]; end end SGB=SisaGenbapak SGI=SisaGenIbu Anak(1,cpd+1:JumGen) = SisaGenbapak(1:JumGen-cpd); Anak(1,1:cps) = SisaGenbapak(1+JumGen-cpd:length(SisaGenbapak)); Anak(2,cpd+1:JumGen) = SisaGenIbu(1:JumGen-cpd); Anak(2,1:cps) = SisaGenIbu(1+JumGen-cpd:length(SisaGenIbu)); PINDAH SILANG
>> B=TSPInisialisasiPopulasi(1,10) B =2 8 1 3 9 10 4 5 7 6 >> I=TSPInisialisasiPopulasi(1,10) I = 1 5 8 10 6 3 4 9 2 7 cp1 = 8;cps=4 cp2 = 4;cpd=8 anak1( 5:8 ) = bariske 5-8 dariibu 6 3 4 9 sisanyadiambildariSisa Gen Bapak yang tidaksamadengan anak1 yang terbentukdiatas: 2 8 1 10 5 7 Denganperincian Anak1(9:10)=sisa gen bapak(1:10-8) = 2 8 Anak1(1:4)=sisag gen bapak(3:6) = 1 10 5 7 Anak2 = 9 10 4 5 Anak2(5:8) = 9 10 4 5 Sisa gen ibu = 1 8 6 3 2 7 Anak2(9:10)= 1 8 Anak2(1:4)= 6 3 2 7 Anak 1 : 1 10 5 7 6 3 4 9 2 8 Anak 2 : 6 3 2 7 9 10 4 5 1 8
function MutKrom = TSPMutasi(Kromosom,JumGen,Pmutasi) MutKrom = Kromosom; For i=1:JumGen, if rand < Pmutasi, TM2 = 1 + fix(rand*JumGen); while TM2==i, TM2 = 1 + fix(rand*JumGen); end temp = MutKrom(i); MutKrom(i) = MutKrom(TM2); MutKrom(TM2) = temp; end end mutasi
>> TSPMutasi(Y,10,0.005) ans = 8 7 3 2 4 5 1 9 6 10 10 3 5 2 6 8 9 4 1 7 1 9 8 10 7 3 6 5 2 4 10 8 1 7 6 5 3 4 2 9 2 8 1 7 6 9 4 3 10 5 2 8 1 3 9 10 4 5 7 6 1 5 8 10 6 3 4 9 2 7 7 3 4 8 10 9 1 5 2 6 5 10 4 2 6 9 1 3 8 7 10 1 4 3 5 2 7 6 9 8 5 3 1 2 6 4 7 10 9 8 4 8 1 10 7 2 3 9 6 5 10 4 6 8 2 5 9 1 7 3 6 1 3 2 4 5 8 9 10 7 6 7 2 8 3 9 10 5 4 1 10 6 3 4 9 2 5 7 1 8 4 7 6 5 10 2 3 1 8 9 2 9 10 5 6 8 4 3 7 1 6 9 1 7 3 4 2 8 5 10 1 9 7 8 10 4 3 5 2 6 Hasilmutasi
JalurTerbaik = 4 5 8 10 9 6 7 3 2 1