BAB 4
IMPLEMENTASI DAN PENGUJIAN SISTEM
4.1 Implementasi Sistem
4.1.1 Implementasi Algoritma Ant Colony Optimization
Proses yang dilakukan pertama kali adalah yaitu melacak posisi koordinat sebuah ponsel. Koordinat yang berhasil dilacak kemudian akan disimpan kedalam
database. Data dapat dilihat seperti pada Tabel 4.1.
Tabel 4.1. Koordinat Ponsel Yang Terlacak Oleh Apliaksi Mobile Tracking
ID NAMA
Lat Long
Alamat 1
Donny Sanjaya 3,5855251 98,6312905 Jl. Merpati
2 Ridho Satrya Akbar
3,5678042 98,6422931 Jl. Setia Budi 3
Rajab Sihotang 3,5731014 98,6535551 Jl. Mesjid
4 Chandra Kurniawan
3,5673288 98,6607754 Jl. Jamin Ginting
Jika masing-masing koordinat diatas digambarkan pada tampilan graf maka dapat kita lihat titik yang akan dilewati dalam pencarian jarak terdekat. Waypoint
menunjukkan lokasi dari suatu tempat, dan dihitung menggunakan latitude lintang dan longitude bujur. Untuk perhitungan yang lebih tepat dari jarak antara dua tempat
yang jauh, rumus jarak lingkaran besar dapat digunakan. Rumus yang menggunakan sifat trigonometri dari suatu koordinat termasuk sinus, cosinus, arccosinus dan
perkiraan jari-jari bumi, maka jarak dari suatu tempat dapat dihitung.
Universitas Sumatera Utara
Langkah-langkah untuk menghitung jarak antara dua waypoint adalah sebagai berikut :
Mengkonversi bujur dan lintang dua waypoint dari representasi desimal ke radian dibagi dengan 180 π, atau 57,29578.
1. Jarak antara Jl. Merpati1 dan Jl. Setia Budi2
Pengukuran lintang dan bujur untuk Jalan Merpati adalah Lintang 3,5855251, Bujur 98,6312905
Pengukuran bujur dan lintang untuk Jalan Setia Budi adalah Lintang 3,5678042, Bujur 98,6422931
Bagi dengan 180 π, sehingga diperoleh Jalan Merpati :
Lintang radian = 0,062579218
Bujur radian = 1,721440765
Jalan Setia Budi : Lintang radian
= 0,06226993 Bujur radian
= 1,721632796
Hitung jarak dua waypoints dengan rumus =
sin . sin
+ cos . cos
. cos − .
D = Acossin0,062579218 . sin0,06226993 + cos0,062579218 .cos0,06226993 .
cos1,721632796-1,721440765 . 6371 Maka jarak =
2,318 km
2. Jarak antara Jalan Setia Budi2 dan Jalan Mesjid3
Pengukuran bujur dan lintang untuk Jalan Setia Budi adalah Lintang 3,5678042, Bujur 98,6422931
Pengukuran lintang dan bujur untuk Jalan Mesjid adalah Lintang 3,5731014, Bujur 98,6535551
Universitas Sumatera Utara
Bagi dengan 180 π, sehingga diperoleh Jalan Setia Budi :
Lintang radian = 0,06226993
Bujur radian = 1,721632796
Jalan Mesjid : Lintang radian
= 0,062362384 Bujur radian
= 1,721829355
Hitung jarak dua waypoints dengan rumus =
sin . sin
+ cos . cos
. cos − .
D = Acossin0,06226993 . sin0,062362384+ cos0,06226993 .cos0,062362384 .
cos1,721829355-1,721632796 . 6371 Maka jarak =
1,382 km
3. Jarak antara Jalan Mesjid3 dan Jalan Jamin Ginting4
Jalan Mesjid : Lintang radian
= 0,062362383938 Bujur radian
= 1,721829355293 Jalan Jamin Ginting : Lintang radian
= 0,062261633061 Bujur radian
= 1,721955373301 Maka jarak = 1,027 km
4. Jarak antara Jalan Merpati1 dan Jalan Jamin Ginting4
Jalan Merpati : Lintang radian
= 0,062579218408 Bujur radian
= 1,721440764716 Jalan Jamin Ginting : Lintang radian
= 0,062261633061 Bujur radian
= 1,721955373301 Maka jarak = 3,847 km
5. Jarak antara Jalan Setia Budi 2 dan Jalan Jamin Ginting 4
Jalan Setia Budi : Lintang radian
= 0,062269930356 Bujur radian
= 1,721632796312
Universitas Sumatera Utara
Jalan Jamin Ginting : Lintang radian = 0,062261633061
Bujur radian = 1,721955373301
Maka jarak = 2,052 km
6. Jarak antara Jalan Merpati 1 dan Jalan Mesjid 3
Jalan Merpati : Lintang radian
= 0,062579218408 Bujur radian
= 1,721440764716 Jalan Mesjid :
Lintang radian = 0,062362383938
Bujur radian = 1,721829355293
Maka jarak = 2,830 km Tampilan graf dapat dilihat pada Gambar 4.1.
Gambar 4.1 Graf Dengan Empat Vertex
Dari graf diatas, jarak antar kota dapat ditampilkan dimasukan kedalam sebuah tabel. Kemudian akan dicari route terpendeknya.
Tabel 4.2 Jarak Antar Kota
Kota ke- 1
2 3
4 1
2,318 2,830
3,847 2
2,318 1,381
2,052 3
2,830 1,381
1,027 4
3,847 2,052
1,027
1 2
4 3
2,318 km
2,830 km 3,847 km
2,052 km
1,027 km 1,381 km
Universitas Sumatera Utara
Berikut ini langkah-langkah perhitungan route terpendek menggunakan algoritma semut.
Parameter–parameter yang digunakan adalah: Alfa α = 1.00
Beta β = 1.00 Rho ρ = 0.50
τij awal = 0.01 Maksimum siklus NCmax = 1
Tetapan siklus semut Q = 1 Banyak semut m = 3
Dari jarak kota yang telah diketahui dapat dihitung visibilitas antar kota ηij = 1dij
Tabel 4.3 Visibilitas Antar Kota
Kota ke- 1
2 3
4 1
0,431406 0,353357
0,259943 2
0,431406 0,724113
0,487329 3
0,353357 0,724113
0,97371 4
0,259943 0,487329
0,97371
Intensitas feromon antar titik τij akan diperlihatkan pada table 4.4 dibawah ini :
Tabel 4.4 Feromon Antar Titik
Kota ke- 1
2 3
4 1
0,01 0,01
0,01 2
0,01 0,01
0,01 3
0,01 0,01
0,01 4
0,01 0,01
0,01
Nilai dari parameter visibilitas η dan intensitas feromon τ ini nantinya akan digunakan dalam persamaan probabilitas dan merupakan parameter yang
mempengaruhi semut dalam pemilihan titik berikutnya aturan transisi.
Universitas Sumatera Utara
Mencari titik tujuan berikutnya dengan perhitungan probabilitas :
Siklus ke-1 Semut ke – 1:
- Daftar semut 1 ke tujuan
- Probabilitas dari kota 1 ke setiap kota berikutnya dapat dihitung dengan persamaan
, = ,
. η , ∑
, . η , Σ[τ
r,u
]
α
.[η
r,u
]
β
= 0.010 + 0.010,431406 + 0.010,353357 + 0.010,259943 = 0,01045
dengan demikian dapat dihitung probabilitas dari kota 1 menuju setiap kota = Kota 1 = 0.00
Kota 2 = 0.011.00 . 0,4314061.00 0,01045 = 0,412829 Kota 3 = 0.011.00 . 0,3533571.00 0,01045 = 0,338141
Kota 4 = 0.011.00 . 0,2599431.00 0,01045 = 0.248749
- Probabilitas Komulatif = 0,000
0,413 0,751 1,000 -
Bilangan Random = 0.679 -
Memeriksa qk-1 r ≤ qk → Kota yang dipilih adalah 3 -
Daftar semut = 1 3 -
Melakukan pembaruan lokal feromon menggunakan persamaan 3: τ t,v ← 1−ρ .τ t,v+Δτ t,v
Δτ t,v =
++
.,
Δτ 1,3 =
,-. . 0
=
,.
=0,088 τ 1,3 ← 1−0,50 .0,01+0,088
τ 1,3 ← 0,093 Menghitung probabilitas dari titik 3 ke titik berikutnya:
, = ,
. η , ∑
, . η , Σ[τ
r,u
]
α
.[η
r,u
]
β
= 0.010,353357 + 0.010,724113 + 0.010,97371 = 0,0205118
Universitas Sumatera Utara
Kota 1 = 0.011.00 . 0, 3533571.00 0,0205118 = 0,172270 Kota 2 = 0.011.00 . 0,7241131.00 0,0205118 = 0,353023
Kota 3 = 0 Kota 4 = 0.011.00 . 0, 973711.00 0,0205118 = 0,474707
- Probabilitas Komulatif = 0,172270
0,525292758 0,525292758 1,000 -
Bilangan Random = 0.479 -
Memeriksa qk-1 r ≤ qk → Kota yang dipilih adalah 2 -
Daftar semut = 1 3 2 -
Melakukan pembaruan lokal feromon menggunakan persamaan 3: τ t,v ← 1−ρ .τ t,v+Δτ t,v
Δτ t,v =
++
.,
Δτ 3,2 =
,.- . 0
=
1,1 0
=0,1810 τ 3,2 ← 1−0,50 .0,01+0,1810
τ 3,2 ← 0,186
Titik tujuan selanjutnya hanya ke titik 4 -
Daftar semut = 1 3 2 4 -
Melakukan pembaruan lokal feromon menggunakan persamaan 3: τ t,v ← 1−ρ .τ t,v+Δτ t,v
Δτ t,v =
++
.,
Δτ 2,4 =
,1 . 0
=
-, -
=0,1218 τ 2,4 ← 1−0,50 .0,01+ 0,1218
τ 2,4 ← 0,1268
Semut ke – 2: -
Daftar semut 1 ke tujuan -
Probabilitas dari kota 1 ke setiap kota berikutnya dapat dihitung dengan persamaan , =
, . η ,
∑ , . η ,
Universitas Sumatera Utara
Σ[τ
r,u
]
α
.[η
r,u
]
β
= 0.010 + 0.010,431406 + 0.010,353357 + 0.010,259943 = 0,01045
dengan demikian dapat dihitung probabilitas dari kota 1 menuju setiap kota = Kota 1 = 0.00
Kota 2 = 0,412829 Kota 3 = 0,338141
Kota 4 = 0.248749 -
Probabilitas Komulatif = 0,000 0,413 0,751 1,000
- Bilangan Random = 0.497
- Memeriksa qk-1 r ≤ qk → Kota yang dipilih adalah 2
- Daftar semut = 1 2
- Melakukan pembaruan lokal feromon menggunakan persamaan 3:
τ t,v ← 1−ρ .τ t,v+Δτ t,v Δτ t,v =
++
.,
Δτ 1,2 =
,. - . 0
=
2, 3
=0,1078 τ 1,2 ← 1−0,50 .0,01+0,1078
τ 1,2 ← 0,1128 Menghitung probabilitas dari titik 2 ke titik berikutnya:
, = ,
. η , ∑
, . η , Σ[τ
r,u
]
α
.[η
r,u
]
β
= 0.010,431406 + 0.010 + 0.010,724113 + 0.010,487329 = 0,01643
Kota 1 = 0.011.00 . 0,4314061.00 0,01643 = 0,0087 Kota 2 = 0.00
Kota 3 = 0.011.00 . 0,7241131.00 0,01643 = 0,5926 Kota 4 = 0.011.00 . 0,4873291.00 0,01643 = 0.3988
- Probabilitas Komulatif = 0,263
0,263 0,703 1,000 -
Bilangan Random = 0.598 -
Memeriksa qk-1 r ≤ qk → Kota yang dipilih adalah 3 -
Daftar semut = 1 2 3 -
Melakukan pembaruan lokal feromon menggunakan persamaan 3: τ t,v ← 1−ρ .τ t,v+Δτ t,v
Universitas Sumatera Utara
Δτ t,v =
++
.,
Δτ 2,3 =
, .- . 0
=
0,11 0
=0,21966 τ 2,3 ← 1−0,50 .0,01+0,21966
τ 2,3 ← 0,2247 Titik tujuan selanjutnya hanya ke titik 4
- Daftar semut = 1 2 3 4
- Melakukan pembaruan lokal feromon menggunakan persamaan 3:
τ t,v ← 1−ρ .τ t,v+Δτ t,v Δτ t,v =
++
.,
Δτ 3,4 =
, 3 . 0
=
0, -
=0,2434 τ 3,4 ← 1−0,50 .0,01+ 0,2434
τ 3,4 ← 0,2484
Semut ke – 3: -
Daftar semut 1 ke tujuan -
Probabilitas dari kota 1 ke setiap kota berikutnya dapat dihitung dengan persamaan , =
, . η ,
∑ , . η ,
Σ[τ
r,u
]
α
.[η
r,u
]
β
= 0.010 + 0.010,431406 + 0.010,353357 + 0.010,259943 = 0,01045
dengan demikian dapat dihitung probabilitas dari kota 1 menuju setiap kota = Kota 1 = 0.00
Kota 2 = 0,412829 Kota 3 = 0,338141
Kota 4 = 0.248749 -
Probabilitas Komulatif = 0,000 0,413 0,751 1,000
- Bilangan Random = 0.721
- Memeriksa qk-1 r ≤ qk → Kota yang dipilih adalah 3
- Daftar semut = 1 3
- Melakukan pembaruan lokal feromon menggunakan persamaan 3:
τ t,v ← 1−ρ .τ t,v+Δτ t,v
Universitas Sumatera Utara
Δτ t,v =
++
.,
Δτ 1,3 =
,-. . 0
=
,.
=0,088 τ 1,3 ← 1−0,50 .0,01+0,088
τ 1,3 ← 0,093
Menghitung probabilitas dari titik 3 ke titik berikutnya: , =
, . η ,
∑ , . η ,
Σ[τ
r,u
]
α
.[η
r,u
]
β
= 0.010,353357 + 0.010,724113 + 0.010,97371 = 0,0205118
Kota 1 = 0,172270 Kota 2 = 0,353023
Kota 3 = 0 Kota 4 = 0,474707
- Probabilitas Komulatif = 0,172270 0,525292758 0,525292758 1,000
- Bilangan Random = 0.519
- Memeriksa qk-1 r ≤ qk → Kota yang dipilih adalah 2
- Daftar semut = 1 3 2
- Melakukan pembaruan lokal feromon menggunakan persamaan 3:
τ t,v ← 1−ρ .τ t,v+Δτ t,v Δτ t,v =
++
.,
Δτ 3,2 =
,.- . 0
=
1,1 0
=0,1810 τ 3,2 ← 1−0,50 .0,01+0,1810
τ 3,2 ← 0,186 Titik tujuan selanjutnya hanya ke titik 4
- Daftar semut = 1 3 2 4
- Melakukan pembaruan lokal feromon menggunakan persamaan 3:
τ t,v ← 1−ρ .τ t,v+Δτ t,v Δτ t,v =
++
.,
Universitas Sumatera Utara
Δτ 2,4 =
,1 . 0
=
-, -
=0,1218 τ 2,4 ← 1−0,50 .0,01+ 0,1218
τ 2,4 ← 0,1268
Hasil rute semut pada siklus 1 adalah rute: Hasil pencarian dari siklus pertama seperti yang terlihat pada tabel 4.5 berikut:
Tabel 4.5 Hasil Siklus I Algoritma Semut
Semut Route
Panjang Semut 1
1 3 2 4 6,263 Km
Semut 2 1 2 3 4
4,726 Km Semut 3
1 3 2 4 6,263 Km
Melakukan pembaruan global feromon menggunakan persamaan 4 τ t,v←1−α .τ t,v +α.Δτ t,v
Δτ t,v = 4 5
67 8
9:; =, ∈ = = A:; Melakukan pembaruan global untuk rute terbaik pada siklus I:
Rute terbaik adalah 1 2 3 4 dengan panjang
5
67
= 4,726 FG, sehingga diperoleh Δτ t,v =
0,3 H
= 0,2116 τ t,v←1−α .τ t,v +α.Δτ t,v
τ 1,2←1−0,1 . 0,1128 +0,1. 0,2116
τ 1,2←0,12268 τ 2,3←1−0,1 . 0,2247 +0,1.
0,2116 τ 2,3←
0,22339 τ 3,4←1−0,1 . 0,248 +0,1.
0,2116 τ 3,4←
0,24436 Melakukan pembaruan global untuk rute lainnya:
τ t,v←1−α .τ t,v +α.Δτ t,v Δτ t,v = 0
τ 1,3←1− 0,1 0,093 +0,1.0 τ 1,3←0,0837
Universitas Sumatera Utara
τ 2,4←1− 0,1 0,126 +0,1.0 τ 2,4←0,1143
Intensitas feromon pada setiap titik setelah diperbaharui τij hasil dari siklus I akan ditunjukkan oleh tabel 4.6 di bawah ini.
Tabel 4.6 Feromon Antar Titik Pada Graf
1 2
3 4
1 -
0,12268 0,0837
2 0,12268
- 0,22339
0,1143 3
0,0837 0,22339
- 0,24436
4 0,1143
0,24436 -
Dari tabel diatas terlihat bahwa terjadi perubahan nilai feromon. Untuk titik yang sering dikunjungi oleh semut terjadi penambahan intensitas feromon, sedangkan
pada titik yang jarang dikunjungi semut terjadi pengurangan nilai intensitas feromon evaporasi. Nilai intensitas feromon yang baru inilah yang akan digunakan untuk
melakukan perhitungan pada siklus berikutnya.
Untuk melakukan perhitungan perjalanan, kemudian melakukan pencarian jalur terdekat, penulis melakukannya dengan cara mengimplementasikan kode
program yang dapat dilihat seperti pada Tabel 4.7.
Tabel 4.7. Kode Program Untuk Penentuan Route Terpendek Baris
Kode Kode Program
1 2
3 4
5 6
7 8
9
10 11
12 13
14 15
16 function AntColonymode {
var alfa = 1.0;
var beta = 1.0;
var rho = 0.5;
var asymptoteFactor = 0.01; var pher
= new Array; var nextPher
= new Array; var prob
= new Array; var numAnts
= 20; var numWaves
= 20; for var i = 0; i numActive; ++i {
pher[i] = new Array; nextPher[i] = new Array;
}
Universitas Sumatera Utara
17 18
19 20
21 22
23 24
25 26
27 28
29 30
31 32
33 34
35 36
37 38
39 40
41 42
43 44
45 46
47 48
49 50
51 52
53 54
55 56
57 58
59 60
61 62
63 64
65 66
67 68
69 70
71 72
73 74
75 76
for var i = 0; i numActive; ++i { for var j = 0; j numActive; ++j {
pher[i][j] = 1; nextPher[i][j] = 0.0;
} }
var lastNode = 0; var startNode = 0;
var numSteps = numActive - 1; var numValidDests = numActive;
if mode == 1 { lastNode = numActive - 1;
numSteps = numActive - 2; numValidDests = numActive - 1;
}
for var wave = 0; wave numWaves; ++wave { for var ant = 0; ant numAnts; ++ant {
var curr = startNode; var currDist = 0;
for var i = 0; i numActive; ++i { visited[i] = false;
} currPath[0] = curr;
for var step = 0; step numSteps; ++step {
visited[curr] = true; var cumProb = 0.0;
for var next = 1; next numValidDests; ++next {
if visited[next] { prob[next] =
Math.powpher[curr][next], alfa Math.powdur[curr][next], 0.0 - beta;
cumProb += prob[next]; }
} var guess = Math.random cumProb;
var nextI = -1; for var next = 1; next
numValidDests; ++next { if visited[next] {
nextI = next; guess -= prob[next];
if guess 0 { nextI = next;
break; }
} }
currDist += dur[curr][nextI]; currPath[step+1] = nextI;
curr = nextI; }
currPath[numSteps+1] = lastNode; currDist += dur[curr][lastNode];
k2-rewire:
Universitas Sumatera Utara
77 78
79 80
81 82
83 84
85 86
87 88
89 90
91 92
93 94
95 96
97 98
99
100 101
102 103
104 105
106 107
108 109
110 111
112 113
114 115
116 117
118 119
120 121
122 123
124 125
126 127
128 129
130 131
132 133
134 135
136 var lastStep = numActive;
if mode == 1 { lastStep = numActive - 1;
} var changed = true;
var i = 0; while changed {
changed = false; for ; i lastStep - 2 changed;
++i { var cost =
dur[currPath[i+1]][currPath[i+2]]; var revCost =
dur[currPath[i+2]][currPath[i+1]]; var iCost =
dur[currPath[i]][currPath[i+1]]; var tmp, nowCost, newCost;
for var j = i+2; j lastStep changed; ++j {
nowCost = cost + iCost + dur[currPath[j]][currPath[j+1]];
newCost = revCost + dur[currPath[i]][currPath[j]]
+ dur[currPath[i+1]][currPath[j+1]];
if nowCost newCost { currDist += newCost - nowCost;
Reverse the detached road segment.
for var k = 0; k Math.floorj-i2; ++k {
tmp = currPath[i+1+k]; currPath[i+1+k] = currPath[j-
k]; currPath[j-k] = tmp;
} changed = true;
--i; }
cost += dur[currPath[j]][currPath[j+1]];
revCost += dur[currPath[j+1]][currPath[j]];
} }
} if currDist bestTrip {
bestPath = currPath; bestTrip = currDist;
} for var i = 0; i = numSteps; ++i {
nextPher[currPath[i]][currPath[i+1]] += bestTrip - asymptoteFactor bestTrip numAnts
currDist - asymptoteFactor bestTrip; }
} for var i = 0; i numActive; ++i {
Universitas Sumatera Utara
137 138
139 140
141 142
143 144
for var j = 0; j numActive; ++j { pher[i][j] = pher[i][j] 1.0 - rho + rho
nextPher[i][j]; nextPher[i][j] = 0.0;
} }
} }
Keterangan: 1.
Baris 1 sd 144: Blok Algoritma Ant Colony Optimization dalam penentuan route terpendek .
Sebagai contoh, beberapa koordinat ponsel yang digunakan dapat dilihat pada Gambar 4.1, kemudian dihitung menggunakan algortima ACO untuk menhgasilkan
rute perjalanan tercepat, output yang dihasilkan dapat dilihat seperti pada Gambar 4.2.
Gambar 4.2 Posisi Koordinat Dalam Google Maps
Universitas Sumatera Utara
Gambar 4.3 Route Perjalanan
Pada tampilan Export merupakan hasil perhitungan jarak terdekat antar kota sesuai urutan pada menu export to csv, merupakan durasi perjalanan masing-masing
kota yang ditampilkan dalam matrix. Tampilan Export dapat dilihat pada Gambar 4.4.
Gambar 4.4 Export
4.2. Pengujian Sistem