Implementasi Algoritma Semut Implementasi Proses

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