36
BAB IV IMPLEMENTASI
Dalam bab ini akan dibahas mengenai implementasi dari sistem berdasarkan dari rancangan yang dibuat pada bab sebelumnya.
4.1 Implementasi Proses
4.1.1 Implementasi Algoritma Semut
Bagian ini menjelaskan pengimplementasian Algoritma semut kedalam program, dimana cara kerja dari algoritma semut sudah dijelaskan pada Bagian
sebelumnya. Langkah pertama dari algoritma Semut adalah penentuan nilai dari Alpa, Beta, Iterasi, Pheronom, banyak Semutm dan beberapa atribut lainya.
Berikut adalah penentuan nilai nilai atribut tersebut,
Nilai – nilai yang dimaskan kedalam atribut diatas adalah nilai yang dimasukan
secara random.
private static double ALPHA = 5;bebas private static double BETA = 2;bebas
private static double RHO = 0.3;antara 0 dan 1 int msemut = 5;bebas
double TAU[][];bebas private static int iterasi = 2;iterasi bebas
double ETA[][]; bebas double Tij = 0.01;
for int i = 0; i jumChecklist; i++ { for int j = 0; j jumChecklist; j++ {
if i == j { feromonAwal[i][j] = 0;
} else { feromonAwal[i][j] = 0.01;
}}} for int i = 0; i jumChecklist; i++ {
for int j = 0; j jumChecklist; j++ { System.out.printferomonAwal[i][j] + ;
System.out.print; }
System.out.println ; }
Selanjutnya dalam melakukan Inisialisasi Parameter adalah menentukan nilai pheronome awal. Pheronome merupakan jejak yang dilalui oleh semut, sehingga
nilai dari pheronome awal adalah nilai yang kecil, dan pada kasus ini dipilih 0,01 sebagai nilai pheronome awal. Pheronome tersebut akan dibentuk kedalam sebuah
matrix dengan ukuran yang menyesuaikan dengan jumlah checklistjumlah toko yang dipilih.
Bagian ini merupakan pencarian jarak antar toko yang dipilih, dimana jarak antar toko tersebut akan digunakan dalam pencarian Visibilitas yang juga
merupakan salah satu parameter yang harus diidentifikasi pada langkah pertama.
Selanjutnya adalah identifikasi visibilitas antar toko, dimana rumus yang digunakan adalah
�
= 1jarak. Karena jarak menggunakan satuan meter maka rumus menjadi 1000jarak. Dimana nilai jarak adalah jarak antar toko circle k.
for int x = 0; x jumChecklist; x++ { for int y = 0; y jumChecklist; y++ {
String baris = simpanTitik[x]; String kolom = simpanTitik[y];
String jarak = CariJarak.getJarakKoneksi.cari_jarak baris, kolom;
getJarak[x][y] = Double.parseDoublejarak; }}
forint a=0; ajumChecklist; a++{ for int b=0; bjumChecklist; b++{
ifa==b{ visibilitasAwal[a][b] = 0;
}else{ visibilitasAwal[a][b] = 1000 getJarak[a][b];
} System.out.printvisibilitasAwal[a][b]+ ;
} System.out.println ;
}
Data tersebut akan terbentuk kedalam matriks dengan ukuran yang disesuaikan dengan jumlah toko yang dipilih.
Bagian ini merupakan langkah selanjutnya dari algoritma semut, yaitu meletakan semut secara random. Semut diletakan berdasarkan atribut sem.
Selanjutnya bagian ini adalah langkah untuk menentukan nilai probabilitas, dimana rumus untuk mencari nilai probabilitas adalah sebagai berikut:
� = {
[Ʈ t ] [� ] ∑[Ʈ t ] [� ]
; � �
� ; � ∉
� Dimana langkah pertama adalah mencari nilai pheronom awal di pankat nilai alfa
kemudian nilai visibilitas awal dipangkat nilai beta. Lalu nilai visibilitas tersebut di total kedalam variabel nextprob. Kemudian nilai nilai yang sudah didapat tersebut
dimasukan kedalam rumus seperti diatas hingga didapat nilai probabilitas dari setiap titik yang dituju semut m.
forj = 0; j jumChecklist; j++{ ifx==0{
visibilitasAkhir[nextI][j] = Math.powferomonAwal[nextI][j], ALPHA Math.powvisibilitasAwal[nextI][j], BETA;
}else{ visibilitasAkhir[nextI][j] = Math.powferomon[nextI][j],
ALPHA Math.powvisibilitasAwal[nextI][j], BETA; }
nextProb = nextProb + visibilitasAkhir[nextI][j]; }
System.out.printlnProb = + nextProb; for j = 0; j jumChecklist; j++ {
probabilitas[nextI][j] = visibilitasAkhir[nextI][j] nextProb;}
For int sem = 1; sem = msemut; sem ++{ ----------------
Tabu[1]=sem; }
Langkah selanjutnya setelah nilai probabilitas didapat adalah mencari nilai probabilitas tertinggi. Nilai probabilitas tertinggi menentukan tujuan selanjutnya
dalam perjalanan semut. Pada langkah tersebut akan memeriksa apakah nilai max lebih kecil dari probabilitas[i][j]. Jika iya nilai max akan diisi dengan nilai dari
probabilitas[i][j] dan nextIsementara diisi oleh nilai j dengan syarat nilai j tidak sama dengan nilai yang sudah disimpan didalam tabulist.
Setelah didapat nilai probabilitas tertinggi maka nilai yang disimpan kedalam nextIsementara akan disimpan kedalam tabulist. Langkah diatas adalah
langkah dari penyimpanan nilai nextIsementara kedalam tabulist.nilai yang didapat tersebut merupakan node selanjutnya dalam perjalanan semut. Dan setiap node
yang didapat akan disimpan kedalam tabu list secara urut berdasakan node pertama yang terpilih.
Selain menyimpan node selanjutnya yang didapat dari pencarian probabilitas, feronom dari node i menuju node j juga perlu di update. Untuk
for j = 0; j jumChecklist; j++ { if nilaiMax probabilitas[nextI][j] {
if j=tabu[0] j=tabu[1] j=tabu[2] j=tabu[3]
j=tabu[4] j=tabu[5] j=tabu[6] { nilaiMax = probabilitas[nextI][j];
nextIsementara = j; } else {
nilaiMax = nilaiMax; nextIsementara = nextIsementara; }
} else { nilaiMax = nilaiMax;
nextIsementara = nextIsementara; }}
nextI = nextIsementara; tabu[t]=nextI;
feromon[nextI][nextIsementara]= RHOferomon[nextI][nextIsementara]+
1000getJarak[nextI][nextIsementara]; PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
menupdate feronome atau jejak yang dilalui semut maka nilai Rho dikalikan dengan nilai feronom awal kemudian ditambahkan dengan nilai visibilitas.
Setelah mengupdate nilai feronom sesuai dengan rute yang dilalui oleh semut ke m, maka data feronom akan diupdate. Dimana nilai feronom yang dilewati
oleh semut nilainya akn disesuaikan dengan nilai feronom yang sudah diupdate sebelumnya, sedangkan yang tidak dilewati maka nilai akan tetap 0.01.
Langkah – langkah tersebut dilakukan berulang hingga semua node berhasil
dikunjungi oleh semut ke m. Lalu semut yang lain juga akan mulai melakukan pencarian rute dengan cara yang sama namun dengan node awal yang berbeda.
Setiap selesai mencari seluruh node dan sudah melakukan pencarian sebanyak iterasi, maka hasil ddari pencarian tersebut akan disimpan. Bagian ini
merupakan penyimpanan urutan node yang disimpan dalam variabel urutan. Data node yang disimpan kedalam urutan adalah data dari simpanTitik yang merupakan
sebuah kode toko. for int iupdt = 0; iupdt jumChecklist; iupdt++ {
for int jupdt = 0; jupdt jumChecklist; jupdt++ { if iupdt == jupdt {
feromon[iupdt][jupdt] = 0; }else ifferomon[iupdt][jupdt] = 0{
feromon[iupdt][jupdt]=feromon[iupdt][jupdt]; feromon[jupdt][iupdt]=feromon[iupdt][jupdt];
}else { feromon[iupdt][jupdt] = 0.01;
}}}
forint c=0; cjumChecklist; c++{ int no=c+1;
urutan=urutan+no+.+simpanTitik[tabu[c]]+ ; }
forint r=1; rjumChecklist; r++{ rute[r]= CariJarak.getJarakKoneksi.
get_RutesimpanTitik[tabu[r-1]], simpanTitik[tabu[r]]; hitungtotal[r]=CariJarak.getJarakKoneksi.
cari_jaraksimpanTitik[tabu[r-1]], simpanTitik[tabu[r]]; hittot[r]=Double.parseDoublehitungtotal[r];
jaraktotal=jaraktotal+hittot[r]; + PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Selanjunya adalah menyimpan data rute yang akan digunakan untuk mencapai node atau toko toko yang didapat oleh semut. Untuk mendapatkan data
rute yang dilalui dibutuhkan kode toko awal dan kode toko tujuan. Dimana dua atribut tersebut digunakan untuk mendapat data rute dari database. Selanjutnya data
rute akan dirangkai kedalam ruteFix. Dimana ruteFix merupakan rangkaian ryte dari gudang hingga toko terakhir yang akan dikunjungi.
Selanjutnya data nama toko juga disimpan kedalam variabel nama toko, dimana data nama toko didapat dari database. Untuk mendapat nama toko
diperlukan kode toko untuk mencari nama toko dalam database. Selanjutnya nama toko yang didapat dimasukan kedalam variabel namaToko.
Setelah data dari jarakTotal, urutanToko, ruteFix dan nama Toko diperoleh maka data tersebut dimasukan kedalam array. Dimana array tersebut disesuaikan
dengan data semut. Sehingga data yang disimpan adalah data milik semut 1 hingga semut ke 5. Oleh karena itu proses yang dilakukan dari Gambar 4.5 meletakkan
semut hingga proses pada Gambar 4.15 data fix akan dilakukan sebanyak jumlah semut yang sudah ditentukan pada gambar 4.1 Inisialisasi. Maka proses ini akan
dilakukan dari semut ke 1 hingga semut ke 5. Sehingga setiap semut akan memiliki hasil rute, jarak, nama toko dan urutan yang berbeda beda.
forint tk=0; tkjumChecklist; tk++{
toko[tk]=CariJarak.getJarakKoneksi.get_TokosimpanTitik[tabu[tk]]; int no = tk+1;
namaToko=namaToko+no+. +toko[tk]+\n; }
JarakTotalAkhir[sem]=jaraktotal; urutanakhir[sem]=urutan;
ruteAkhir[sem]=ruteFix; namaTokoAkhir[sem]=namaToko;
forint s = 1; s=msemut; s++{ ifjaraktotalFix JarakTotalAkhir[s]
JarakTotalAkhir[s]=0{ simpanTitik[tabu[r]] + melewati : +rute[r];
ruteFix=ruteFix+\n+dari +simpanTitik[tabu[r-1]]+ ke +simpanTitik[tabu[r]] + melewati : +rute[r]; }
Setelah seluruh semut melakukan perjalanan dan menemukan rutenya masing masing dalam mengelilingi node, maka akan ditentukan nilai yang terkecil.
Dimana nilai jarak menjadi acuan untuk dipilihnya rute untuk dilalui. Hal ini merupakan Langkah selanjutnya dari algoritma semut dalam menentukan rute.
Program akan mencari jarak terpendek dari kelima semut yang disebar, dan jarak yang paling pendek akan digunakan sebagai rute yang dipilih. Sehingga data semut
ke m akan menjadi hasil akhir dari pencarian rute dalam pendistribusian barang.
Langak terakhir adalah mencetak hasil dari pencarian rute, dan dengan demikian pencarian rute distribusi barang dengan pengopimalisasian algoritma
semut berakhir. Data yang telah diperoleh tersebut kemudian disimpan kedalam database. Diana data tersebut dapat digunakan sebagai lampiran dan acuan dalam
melakukan pendistribusian barang. System.out.printlnHasil akhir;
System.out.printlnJarak: +jaraktotalFix; System.out.printlnuruan:;
System.out.printlnurutanFix; System.out.printlnnama Toko: ;
System.out.printlnnamaTokoFix; System.out.printlnRute: ;
System.out.printlnruteFinal; jaraktotalFix=JarakTotalAkhir[s];
urutanFix=urutanakhir[s]; namaTokoFix=namaTokoAkhir[s];
ruteFinal = ruteAkhir[s];
}else{ jaraktotalFix=jaraktotalFix;
urutanFix=urutanFix; namaTokoFix=namaTokoFix;
ruteFinal=ruteFinal; }} PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
4.2 Implementasi Tampilan Antar Muka