2.1. Algoritma Exhaustive.
Pada prinsipnya metode ini merupakan penggabungan antara depth first search dengan pelacakan mundur (backtracking), yaitu pelacakan yang bergerak ke belakang menuju pada suatu keadaan awal. Nilai dari pengujian yang dilakukan adalah ‘ya’ atau ‘tidak’. Dengan kata lain metode ini adalah pencarian buta yang mencari semua kemungkinan yang ada dari permasalahan yang diproses.
Secara garis besar cara algoritma ini bekerja sebagai berikut:
1. Bangkitkan semua kemungkinan solusi (membangkitkan suatu titik tertentu atau lintasan tertentu dari keadaan awal).
2. Uji untuk melihat apakah node tersebut benar-benar merupakan solusi yang diharapkan dengan cara membandingkan node tersebut atau node akhir dari suatu lintasan yang dipilih degan kumpulan tujuan yang diharapkan.
3. Jika solusi tersebut memenuhi syarat yang diinginkan, keluar. Jika tidak, ulangi kembali langkah yang pertama untuk mencari kemungkinan yang lain.
2.1.1. Aplikasi algoritma Exhaustive Travelling Salesman Problem.
Seorang salesman ingin mengunjungi n kota. Jarak antar tiap-tiap kota diasumsikan sudah diketahui. Kita ingin mengetahui rute terpendek dimana setiap kota hanya boleh dikunjungi tepat satu kali. Misalkan ada 13 kota dengan jarak antara tiap-tiap kota seperti terlihat pada gambar 2.1
Gambar 2.1 Contoh kasus Travelling Salesman Problem.
Pencarian dengan menggunakan algoritma ini dapat digambarkan seperti pada gambar 2.2 di bawah ini:
Gambar 2.2 Penyelesaian Kasus Travelling Salesman Problem.
Dari gambar di atas dapat kita lihat betapa banyak kemungkinan rute yang ditemukan. Kasus tersebut akan lebih rumit lagi apabila setiap titik atau kota yang disinggahi dapat dilalui, jumlah kemungkinan yang ditemukan akan jauh lebih banyak karena tidak ada batasan jalan yang dapat dilalui. Gambar 2.3 berikut ini merupakan contoh kasus dimana setiap kota dapat dilewati melalui kota manapun tanpa ada batasan titik tertentu yang tidak dapat diakses:
Gambar 2.3 Contoh kasus TSP dimana setiap kota dapat dilalui.
Penyelesaian dengan menggunakan algoritma Exhaustive dilakukan dengan membangkitkan solusi-solusi yang mungkin dengan menyusun kota-kota dalam urutan abjad, yaitu:
● A – B – C – D
● A – B – D – C
● A – C – B – D
● A – C – D – B
● A – D – B – C
● A – D – C – D
● B – A – C – D
● dan seterusnya (Gambar 2.4)
Gambar 2.4 Contoh Pencarian dengan Algoritma Exhasutive dengan tree.
Misalkan pertama-tama kita mulai dari node A. Secara urut maka akan terpilih keadaan awal adalah lintasan ABCD dengan panjang lintasan (bobot) sebesar 19. Kemudian kita melakukan backtracking untuk mendapatkan lintasan berikutnya yaitu lintasan ABDC dengan bobot 18. Demikian seterusnya dilakukan pencarian semua rute yang mungkin hingga tidak ada rute lain lagi yang dapat ditemukan. Hasil pencarian secara lengkap tampak seperti tabel 2.1.
Tabel 2.1 Pencarian dengan Algoritma Exhasutive Pencarian ke- Lintasan Panjang Lintasan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA CDAB CDBA DABC DACB DBAC DBCA DCAB DCBA
19 18 12 13 16 18 17 21 15 18 14 13 15 14 20 16 21 18 20 15 15 12 17 19
2.2 Algoritma Genetika
Algoritma genetika adalah algoritma pencarian heuristik yang didasarkan pada mekanisme evolusi biologis. Keberagaman pada evolusi biologis adalah variasi dari kromosom dalam individu organisme. Variasi kromosom ini akan mempengaruhi laju reproduksi dan tingkat kemampuan organisme untuk
tetap hidup. Pada dasarnya ada 4 kondisi yang sangat mempengaruhi proses evaluasi, yakni sebagai berikut:
1. Kemampuan organisme untuk melakukan reproduksi.
2. Keberadaan populasi organisme yang bisa melakukan reproduksi.
3. Keberagaman organisme dalam suatu populasi.
4. Perbedaan kekuatan dan kemampuan organisme untuk bertahan hidup.
Individu yang lebih kuat (fit) akan memiliki tingkat survival atau tingkat daya berthan hidup yang lebih tinggi. Selain itu individu yang semakin kuat akan memiliki tingkat reproduksi yang lebih tinggi jika dibandingkan dengan individu yang kurang fit. Pada kurun waktu tertentu (sering dikenal dengan istilah generasi), populasi secara keseluruhan akan memuat lebih banyak organisme yang fit.
2.2.1. Sejarah Berkembangnya Algoritma Genetika
Ide Komputasi Evolusi diperkenalkan oleh I. Rechenberg pada tahun 1960-an melalui karyanya yang berjudul "Evolution strategies" (judul aslinya Evolutionsstrategie). Ide tersebut kemudian dikembangkan oleh peneliti-peneliti lainnya. Salah satu perkembangan dari ide Komputasi Evolusi ini adalah Algoritma Genetika yang pertama kali dikembangkan oleh John Holland dari Universitas Michigan pada tahun 1975. Penelitian ini kemudian ditulis dalam sebuah buku yang berjudul "Adaption in Natural and Artificial Systems". John Holland mengatakan bahwa setiap masalah yang berbentuk adaptasi (alami maupun buatan) dapat diformulasikan dalam terminologi genetika. Algoritma Genetika adalah simulasi dari operasi genetika atas kromosom.
2.2.2. Struktur Umum Algoritma Genetika
Pada algoritma ini teknik pencarian dilakukan sekaligus atas sejumlah solusi yang mungkin yang dikenal dengan istilah populasi. Di dalam populasi tersebut terdapat individu yang disebut dengan istilah kromosom. Kromosom- koromosom tersebut merupakan suatu solusi yang masih berbentuk simbol, biasanya adalah bilangan biner. Kromosom-kromosom ini akan mengalami evolusi melalui sejumlah iterasi yang disebut dengan generasi. Dalam setiap generasi kromosom akan mengalami proses evaluasi dengan menggunakan alat
ukur yang disebut dengan fungsi fitness. Dalam algoritma genetik, istilah kromosom merujuk pada kandidat solusi dari suatu masalah, sering dilambangkan sebagai sebuah string yang terdiri dari bit. Gen adalah sebuah bit tunggal atau sebuah blok yang terdiri dari bit-bit yang berdampingan yang melambangkan elemen tertentu dari kandidat solusi. Crossover adalah pertukaran material genetik antara kromosom dari parent. Mutasi adalah menukar sebuah allele pada locus (posisi) random dengan dengan allele lainnya, misal 0 menjadi 1.
Setiap generasi akan menghasilkan kromosom-kromosom baru yang dibentuk dari generasi sebelumnya dengan menggunakan operator reproduksi (reproduction), kawin silang (crossover), dan juga mutasi (Mutation). Nilai fitness dalam suatu kromosom akan menunjukkan kualitas kromosom dalam populasi tersebut. Generasi berikutnya dikenal dengan istilah anak (offspring) yang terbentuk dari gabungan 2 kromosom generasi sekarang yang bertindak sebagai induk (parent) dengan menggunakan operator penyilangan (crossover).
Generasi-generasi baru dibentuk dengan cara:
● Melakukan proses seleksi sesuai dengan nilai obyektif dari kromosom parent dan juga kromosom offspring.
● Membuang beberapa kromosom sehingga jumlah populasi akan kembali menjadi kromosom.
Demikian generasi yang baru terus dihasikan sesuai dengan besar generasi yang ditentukan dan setelah melalui beberapa generasi maka algoritma ini akan konvergen ke kromosom terbaik.
Secara garis besar gambar diagram alir dari algoritma genetika sebagai berikut:
Gambar 2.5. Diagram Alir Algoritma Genetika.
Pada gambar diatas dapat dilihat mengenai cara kerja secara umum dari algoritma genetika. Penjelasan-penjelasan mengenai setiap bagian-bagiannya akan dijelaskan lebih lanjut.
Kromosom-kromosom yang mempunyai nilai obyektif yang baik akan memiliki probabilitas yang lebih tinggi untuk terseleksi. Setelah beberapa kali proses generasi tersebut dilakukan, algoritma genetika akan menunjukkan kromosom yang terbaik, yang diharapkan merupakan solusi yang optimal ataupun mendekati optimal dari permasalahan yang ada.
Dalam algoritma genetika yang perlu diperhatikan adalah representasi kromosom. Representasi kromosom merupakan bagaimanan cara pengkodean suatu alternatif solusi itu menjadi kromosom yang akan diproses menggunakan algoritma genetika. Hal yang dilakukan dahulu adalah menentukan jenis kromosom yang akan digunakan, kemudian teknik pengkodean solusi ke bentuk kromosom dan sebaliknya. Jenis kromosom banyak macamnya, antara lain bit string, bilangan real, array, matriks, dan lain-lain. Jenis kromosom yang sering digunakan dalam algoritma genetika adalah dengan menggunakan bit string.
Kromosom bit string merupakan sederetan bilangan biner dengan panjang bit tertentu. Representasi bit string adalah representasi kromosom paling sederhana dalam algoritma genetika. Keunggulan pemakaian kromosom berjenis bit string ini adalah:
● Mudah penggunaannya dalam hal dekode kromosom ke solusi.
● Pemakaian kromosom bit string diasumsikan sudah cukup mampu dalam pemecahan masalah ini.
2.2.3 Komponen-komponen Utama Algoritma Genetika
Ada 6 komponen utama dalam algoritma genetika, yaitu teknik pengkodean, prosedur inisialisasi, fungsi evaluasi, seleksi, operator genetika yang terdiri atas crossover dan mutasi serta penentuan parameter.
2.2.3.1 Teknik Pengkodean (encoding)
Salah satu masalah yang harus diperhatikan saat akan memulai penggunaan Algoritma Genetik adalah encoding. Encoding adalah bagaimana suatu kromosom dilambangkan dalam bahasa pemrograman. Encoding sangat tergantung pada masalah yang akan dipecahkan.
2.2.3.1.1. Pengkodean Biner (Binary Encoding)
Binary encoding adalah encoding yang paling umum digunakan , karena sebagian besar karya awal algoritma genetik dikerjakan dengan menggunakan encoding jenis ini.
Dalam binary encoding setiap kromosom adalah sebuah string yang terdiri dari serangkaian bit, 0 atau 1. Berikut ini adalah contoh dari binary encoding:
Kromosom A 101100101100101011100101 Kromosom B 111111100000110000011111
Binary encoding memberikan banyak kemungkinan kromosom yang dihasilkan, bahkan dengan jumlah allele yang sedikit. Dilain pihak encoding ini seringkali kurang tepat untuk beberapa problem dan kadangkala harus dilakukan koreksi setelah crossover dan/atau mutasi.
2.2.3.1.2. Pengkodean Permutasi (Permutation Encoding)
Pengkodean permutasi digunakan pada masalah pengurutan, seperti pada travelling salesman problem atau pada masalah pengurutan tugas/pekerjaan.
Dalam pengkodean permutasi, setiap kromosom adalah string dari angka, yang mewakili angka dalam suatu urutan tertentu (sequence). Berikut ini adalah contoh dari pengkodean permutasi:
Kromosom A 1 5 3 2 6 4 7 9 8 Kromosom B 8 5 6 7 2 3 1 4 9
Pengkodean permutasi hanya berguna untuk masalah pengurutan (ordering problem). Meskipun digunakan untuk problem ini tetap diperlukan koreksi terhadap beberapa jenis crossover dan mutasi, agar kromosom tetap konsisten.
2.2.3.1.3. Pengkodean Nilai (Value Encoding)
Pengkodean nilai secara langsung dipergunakan pada problem yang memakai nilai yang kompleks (seperti bilangan real).
Dalam pengkodean nilai, setiap kromosom adalah string dari nilai. Nilai dapat berupa apa saja yang berhubungan dengan problem, dari bilangan, bilangan real, karakter atau obyek yang kompleks. Berikut ini adalah contoh dari pengkodean permutasi:
Kromosom A 1.2324 5.3243 0.4556 2.3293 2.4545 Kromosom B ABDJEIFJDHDIERJFDLDFLFEGT Kromosom C (back), (back), (right), (forward), (left)
Pengunaan pengkodean nilai seringkali memerlukan penggunaan crossover dan mutasi yang spesifik untuk problem tersebut.
2.2.3.1.4. Pengkodean Pohon (Tree Encoding)
Pengkodean pohon dipergunakan terutama untuk menyelesaikan program atau expresi dengan menggunakan genetic programming.
Dalam pengkodean pohon setiap kromosom adalah sebuah tree dari beberapa obyek, seperti fungsi atau command dalam bahasa pemrograman.
Berikut ini adalah contoh dari pengkodean pohon:
Kromosom A Kromosom B
(+ x ( / 5 y ) ) (do_until step wall )
Pengkodean pohon baik untuk evolving programs. Bahasa Pemrograman LISP sering dipergunakan untuk hal ini, karena program yang dikembangkan dengan menggunakan bahasa tersebut direpresentasikan dalam bentuk ini dan dapat ditelusuri dengan mudah sebagai tree, sehingga crossover dan mutasi dapat dilakukan dengan mudah.
2.2.3.2 Inisialisasi
Ukuran populasi tergantung pada masalah yang akan dipecahkan dan jenis operator genetika yang akan diimplementasikan. Setelah ukuran populasi ditentukan, kemudian harus dilakukan proses inisialisasi terhadap kromosom yang terdapat pada populasi tersebut. Inisialisasi kromosom dilakukan secara acak, namun demikian harus tetap memperhatikan domain solusi dan kendala permasalahan yang ada.
2.2.3.3 Fungsi Evaluasi
Ada 2 hal yang harus dilakukan dalam melakukan evaluasi kromosom, yaitu evaluasi fungsi obyektif (fungsi tujuan) dan konversi fungsi obyektif ke dalam fungsi fitness. Secara umum fungsi fitness diturunkan dari fungsi obyektif dengan nilai yang tidak negatif. Apabila tenryata fungsi obyektive memiliki nilai negatif, maka perlu ditambahkan suatu konstanta C agar nilai fitness yang terbentuk menjadi tidak negatif. Fungsi fitness itu sendiri didapatkan dari 1 / total jarak.
2.2.3.4 Seleksi (Parent Selection)
Ada beberapa metode yang dipergunakan dalam memilih induk (parent) yang akan mengalami proses perkawinan. Setiap metode memiliki kelebihan dan kekurangan sendiri. Berikut ini adalah beberapa metode pemilihan induk:
2.2.3.4.1. Seleksi Roda Roulette (Roulette Wheel Selection)
Induk (parent) dipilih berdasarkan fitness mereka. Semakin baik sebuah kromosom, semakin besar kemungkinan untuk dipilih. Seperti sebuah roulette wheel dimana diletakan semua kromosom dalam suatu populasi, setiap kromosom
memiliki luas daerah menurut fungsi fitness-nya, seperti pada gambar 2.1 berikut ini.
Gambar 2.6. Roulette Whell Selection
Kemudian dilakukan undian untuk melakukan seleksi. Kromosom dengan fitness yang lebih baik memiliki kemungkinan lebih besar untuk terpilih.
Hal ini dilakukan dengan algoritma sebagai berikut.
1. [Penjumlahan] Hitung jumlah fitness dari semua kromosom dalam populasi - sum S.
2. [Seleksi] Generate random number dengan interval (0,S) - r.
3. [Pengulangan] Lakukan looping pada populasi untuk menelusuri kromosom yang ada, dan menjumlahkan fitness dari kromosom yang ditelusuri, jika jumlah fitness kromosom yang ditelusuri lebih besar dari r, hentikan penelusuran dan kembalikan nilai/posisi kromosom terakhir yang fitness-nya dijumlahkan
Langkah pertama hanya dilakukan satu kali untuk setiap populasi.
2.2.3.4.2. Seleksi Ranking (Rank Selection)
Dalam seleksi roulette whell akan timbul permasalahan apabila nilai fitness dari kromosom-kromosom yang ada berbeda terlalu jauh, karena kromosom dengan nilai fitness yang jauh lebih besar dari kromosom lain akan mempunyai kemungkinan yang sangat besar untuk terpilih sedangkan kromosom yang lain mungkin tidak akan terpilih sama sekali. Sebagai contoh, jika kromosom terbaik mempunyai nilai fitness 90% dari luas keseluruhan roda roulette, maka kromosom-kromosom yang lain akan mempunyai kemungkinan yang sangat kecil untuk terpilih.
Dengan seleksi ranking (rank selection), pertama-tama dilakukan pengurutan populasi, dan kemudian urutan setiap kromosom dalam populasi menjadi acuan dalam menentukan nilai fitnessnya. Kromosom terburuk akan menerima nilai fitness 1, berikutnya akan menerima nilai 2, dan seterusnya dengan kromosom terbaik akan mempunyai nilai fitness N (jumlah total kromosom dalam suatu populasi). Dalam gambar 2.2 berikut dapat dilihat bagaimana perbedaan antara penggunaan seleksi roulette wheel dan seleksi ranking.
Gambar 2.7. Rank Selection
Setelah dilakukan pengurutan, semua kromosom mempunyai kemungkinan untuk terpilih. Tetapi metode ini dapat memperlambat penyelesaian problem karena kromosom terbaik tidak berbeda terlalu jauh nilai fitness-nya dengan kromosom lainnya.
2.2.3.4.3. Steady-State Selection
Sebenarnya metode ini bukan ditujukan untuk memilih parents. Metode ini didasari pemikiran bahwa sebagian besar dari kromosom seharusnya dapat bertahan sampai generasi berikutnya.
Sehingga algorima genetik akan bekerja dengan cara berikut ini. Dalam setiap generasi dipilih beberapa kromosom yang baik (nilai fitness tinggi) untuk menciptakan offspring yang baru. Dan kemudian beberapa kromosom yang buruk (nilai fitness rendah) akan disingkirkan untuk kemudian digantikan dengan
offspring yang telah diciptakan. Sedangkan kromosom-kromosom yang lain akan dipertahankan untuk membentuk generasi berikutnya.
2.2.3.4.4. Elitism
Ketika populasi baru diciptakan dengan operasi crossover dan mutasi, terdapat kemungkinan, kita akan kehilangan kromosom terbaik. Elitism adalah sebuah metode, dimana akan dilakukan penyalinan kromosom terbaik (atau beberapa kromosom terbaik) ke dalam populasi baru. Anggota populasi yang lain tetap diciptakan dengan metode yang biasa. Elitism dapat memberikan peningkataan yang cukup berarti pada kecepatan algoritma genetik, karena dapat mencegah kehilangan solusi terbaik yang telah ditemukan.
2.2.3.5 Crossover
Operator untuk melakukan rekombinasi yaitu operasi kawin silang (crossover). Operasi crossover mempunyai peran yang paling penting dalam algoritma genetik karena didalamnya terdapat proses perkawinan (persilangan) gen antara dua individu (parent) yang menghasilkan dua individu baru (offspring) pada generasi berikutnya.
2.2.3.5.1 Single Point Crossover
Sebuah titik crossover dipilih secara acak (random), nilai titik crossover ini berada antara satu sampai dengan jumlah gen yang ada dalam kromosom dengan catatan nilai titik crossover tidak boleh sama dengan satu atau sama dengan jumlah gen, string pada posisi permulaan suatu kromosom sampai titik crossover akan disalin dari parent pertama, sedangkan sisanya (dari titik crossover sampai akhir) akan disalin dari parent yang lainnya. Berikut ini adalah contoh dari single point crossover:
Nilai random titik crossover = 4
Parent Offspring
0 1 1 0 1 0 0 1 1 0 0 1
1 0 0 1 0 1 1 0 0 1 1 0
2.2.3.5.2. Two Point Crossover
Pada two point crossover akan dipilih dua titik sebagai titik crossover, string pada posisi permulaan kromosom sampai dengan titik crossover pertama akan disalin dari parent pertama, bagian kromosom yang terletak diantara titik crossover pertama dan titik crossover kedua akan disalin dari parent kedua, sedangkan sisanya yang terletak antara titik crossover kedua sampai akhir dari kromosom akan disalin dari parent pertama. Berikut ini adalah contoh dari two point crossover:
Nilai random titik crossover pertama = 3 Nilai random titik crossover kedua = 5
Parent Offspring
0 1 1 0 1 0 0 1 1 1 0 0
1 0 0 1 0 1 1 0 0 0 1 1
2.2.3.5.3. Uniform Crossover
Pada uniform crossover, masing-masing gen dalam suatu kromosom akan disalin secara acak (random) dari parent pertama dan parent kedua dari kromosom tersebut. Berikut ini adalah contoh dari uniform point crossover:
Parent Offspring
0 1 1 0 1 0 + 1 0 0 1 0 1 0 0 0 0 0 1 + 1 1 1 0 1 0
2.2.2.3.4. Arithmetic Crossover
Pada aritmathic crossover, proses crossover untuk membentuk offspring baru akan dilakukan dengan melakukan operasi aritmatika tertentu pada kedua parent-nya. Berikut ini adalah contoh dari aritmethic crossover:
Parent Offspring
2.2.3.6. Mutasi (Mutation)
Proses mutasi adalah juga merupakan salah satu dari operator genetika yang akan menghasilkan perubahan secara acak pada suatu kromosom. Proses mutasi ini memakai sistem perubahan suatu bit, artinya pada satu kromosom terdapat banyak bit yang mana setiap bit akan mendapatkan kesempatan yang sama dalam proses mutasi tersebut sehingga dinamakan mutasi bit. Probabilitas terjadinya mutasi pada setiap gen ditentukan oleh nilai Pm yang diinputkan melalui PC dimana nilai mutasi tersebut jika terlalu besar membuat hasilnya menjadi kurang atau tidak baik dan jika terlalu kecil maka hasilnya juga menjadi kurang atau tidak baik. Oleh karena itu nilai mutasi yang baik adalah nilai mutasi yang tidak terlalu besar dan tidak terlalu kecil. Cara termudah untuk melakukan mutasi adalah dengan mengubah satu atau lebih bit dalam kromosom dimana hal ini tergantung dari nilai mutasi (mutation rate). Dalam algoritma genetika proses mutasi tersebut mempunyai peran yang besar yaitu untuk menggantikan bit-bit yang hilang dari populasi akibat proses seleksi sehingga pada bit-bit tersebut dapat diproses ulang dan untuk menghasilkan bit-bit baru yang tidak ada pada populasi awal. Perlu diingat kembali bahwa proses mutasi dalam satu kromosom yangberisi beberapa bit ini tidak hanya memutasi satu bit saja namun dapat lebih dari satu bit ataupun tidak ada proses mutasi sama sekali. Berikut ini adalah contoh proses mutasi:
Nilai random mutasi (m) = 4 dan 6
Parent A B Offspring B A B4 B1 B5 B2 B6 B3 B4 B1 B5 B3 B6 B2
2.2.3.7 Penentuan Parameter
Yang disebut parameter disini adalah parameter kontrol algoritma genetika yaitu ukuran populasi (popsize), peluang crossover (Pc ) dan probabilitas mutasi (Pm). Nilai parameter ini ditentukan juga berdasarnya permasalahan yang akan dipecahkan. Ukuran populasi sebaiknya tidak lebih kecil dari 30 untuk sembarang jenis permasalahan.
Parameter yang dibutuhkan di-input-kan oleh user, parameter tersebut antara lain:
• Crossover probability adalah probabilitas akan terjadinya suatu crossover.
Jika tidak terjadi crossover maka offspring akan merupakan salinan utuh dari parent-nya. Jika terjadi crossover maka offspring dibentuk dari bagian-bagian kromosom parent-nya. Jika crossover probability adalah 100%, maka berarti seluruh generasi baru dibentuk melalui proses crossover. Jika 0 %, maka seluruh generasi baru merupakan copy dari populasi terdahulu (tapi bukan berarti generasi baru adalah sama dengan yang lama, karena generasi yang dikopikan dipilih acak melalui metode pemilihan tertentu). Crossover dilakukan dengan harapan kromosom baru akan memiliki bagian yang baik dari kromosom lama, dan mungkin akan menjadi lebih baik. Tetapi juga merupakan ide yang baik untuk membiarkan beberapa bagian terbaik dari populasi untuk survive ke generasi selanjutnya
• Mutation probability adalah kemungkinan mutasi akan terjadi. Jika tidak ada mutasi maka offspring akan disalin sesuai dengan hasil crossover (hasil salin).
Jika terjadi mutasi maka akan terjadi perubahan pada bagian dari offspring tersebut. Mutasi tidak boleh terjadi terlalu sering, karena itu akan membuat algoritma genetik menjadi pencarian secara acak (random search).
• Population size adalah jumlah kromosom dalam suatu populasi dalam satu generasi. Jika jumlah kromosom terlalu sedikit maka hanya terdapat sedikit pilihan untuk melakukan crossover dan hanya sebagian kecil dari ruang cari (search space) yang akan dijelajahi. Jika jumlah kromosom terlalu banyak akan memperlambat algoritma genetik. Penelitian menunjukkan bahwa setelah batas tertentu penambahan jumlah kromosom tidak bermanfaat, karena tidak akan mempercepat penyelesaian masalah.
• Jumlah Maksimal Generasi adalah jumlah generasi yang akan dibentuk sebelum algoritma genetik dihentikan prosesnya dan hasilnya akan dianggap sebagai hasil terbaik. Ada dua cara untuk menentukan terminasi dari algoritma genetik, yaitu dengan menetapkan jumlah generasi yang akan dibentuk dan dengan membandingkan hasil dari beberapa generasi, jika hasil tidak mengalami perbaikan dalam beberapa generasi maka hasil dianggap maksimal.
2.3 Algoritma Neural Network Hopfield
Algoritma Neural Network Hopfield pertama kali dikenalkan oleh John Hopfield dari California Institute of Technology pada tahun 1982. John Hopfield merancang sebauh jaringan syaraf tiruan yang kemudian dikenal dengan nama jaringan Hopfield. Dalam jaringan Hopfield semua neuron berhubungan penuh.
Neuron yang satu mengeluarkan output dan kemudian menjadi input untuk semua neuron yang lain. Proses penerimaan sinyal antara neuron ini secara feedback tertutup terus menerus sampai dicapai kondisi stabil.
Dalam model diskritnya, jaringan Hopfield bobot sinaptiknya menggunakan vektor biner berdimensi n atau a{0,1}n . Model semacam ini berisi n neuron dan jaringannya terdiri dari n(n-1) interkoneksi dua jalur. Secara matematis konsep di atas dapat disajikan dalam matriks simetris n×n dengan diagonal utamanya bernilai 0. Dengan kata lain, setiap neuron tidak memberi input kepada dirinya sendiri.
Kemampuan jaringan syaraf tiruan untuk mengenali pola ditentukan dengan rumus 0,15 × n. n adalah banyaknya dimensi yang digunakan. Misalkan dimensi yang digunakan adalah 100 maka pola yang akan dikenali sebanyak 15 buah. Dimensi adalah suatu vektor yang mewakili banyaknya baris dan kolom yang digunakan. Dari contoh di atas berarti baris yang digunakan berjumlah 100 dan kolom yang digunakan berjumlah 100 juga.
Jaringan syaraf tiruan digunakan untuk mengenali berbagai input atau masukan yang diberikan kepadanya. Misalnya, jaringan tersebut dilatih untuk mengenali berbagai versi angka 2. Setelah mengalami cukup latihan, maka jaringan itu dapat menghasilkan angka 2 secara sempurna dari masukan angka 2 yang rusak atau kena distorsi.
Berikut di bawah ini adalah contoh jaringan Hopfield dengan 9 neuron atau node, yaitu dari node A sampai node I.
Tabel 2.2. Matriks yang menunjukkan bobot setiap neuron
A B C D E F G H I A 0 -1 1 -1 1 1 1 -3 3 B -1 0 -3 -1 1 1 -3 1 -1
C 1 -3 0 1 -1 -1 3 -1 1 D -1 -1 1 0 -3 1 1 1 -1 E 1 1 -1 -3 0 -1 -1 -1 1 F 1 1 -1 1 -1 0 -1 -1 1 G 1 -3 3 1 -1 -1 0 -1 1 H -3 1 -1 1 -1 -1 -1 0 -3
I 3 -1 1 -1 1 1 1 -3 0
Hasil aplikasi dari matriks di atas dapat dilihat pada contoh berikut ini:
Mulai a b
A=1 A=1 A=1
B=1 B⇒0 B=0
C=1 C=1 C=1
D=1 D⇒0 D=0
E=1 E⇒0 E⇒1
F=1 F⇒0 F=0
G=1 G=1 G=1
H=1 H⇒0 H=0
I=1 I=1 I=1
Menurut prosedur yang diajukan oleh Hopfield, bobot sinaptiknya dari setiap neuron dibangkitkan dari operasi logika dari vektor-vektor biner yang disimpan pada jaringan tersebut. Dalam contoh ini, diasumsikan ada tiga 9 dimensi vektor yaitu a, b dan g. Ketiga vektor dimensi tersebut adalah:
α = 101 010 101 β = 110 011 001 γ = 010 010 010
Apabila setiap nilai 0 diganti dengan nilai -1, maka akan diperoleh untuk bipolar dari masing-masing vektor, sehingga:
α′ = 1-11 -11-1 1-11 β′ = 11-1 -111 -1-11 γ′ = -11-1 -11-1 -11-1
Untuk menghitung bobot matriks diperoleh dengan cara mengalikan setiap vektor dengan dirinya sendiri dan kemudian dijumlahkan:
W = α′ α + β β′ + γ γ′ (2.1)
Apabila diagonal utama dari matriks W ini dibuat 0, maka akan diperoleh bobot sinaptik dari jaringan tersebut. Nilai dari jaringan tersebut. Nilai dari setiap elemen matriks merupakan bobot yang dikenakan pada proses pengiriman sinyal dari sumbu vertikal ke sumbu horizontal yang terkait dengan elemen tersebut.
2.3.1 Arsitektur Jaringan Syaraf Tiruan Hopfield
Model atau arsitektur dari jaringan Hopfield ditunjukkan pada gambar 2.8., dimana dalam gambar tersebut terdapat suatu jaringan yang terdiri dari N buah simpul yang mengandung nonlinearitas hard limiter dan input serta output biner yang dapat bernilai 1 atau -1.
Gambar 2.8. Arsitektur Jaringan Hopfield.
Dari gambar diatas, dapat dijelaskan bahwa output setiap simpul diumpan balikkan kepada input dari simpul-simpul lainnya melalui bobot koneksi Wij yang tetap. Nilai Wij mula-mula diinisialisasi menggunakan algoritma Hopfield untuk sebuah pola yang masuk.
Pola yang tidak dikenal dimasukkan ke dalam jaringan sekali saja pada waktu kondisi nol. Kemudian jaringan akan beriterasi sampai output yang dihasilkan bersifat konvergen. Konvergen adalah pola output yang tidak berubah sampai iterasi selesai. Pola yang dinyatakan oleh simpul-simpul output setelah jaringan konvergen adalah output jaringan syaraf tiruan.
2.3.2. Algoritma Jaringan Syaraf Tiruan Hopfield
Ada beberapa versi dari algoritma jaringan Hopfield. Untuk deskripsi dan algoritma hopfield (1982) menggunakan input vektor yang berupa angkatan biner. Untuk menyimpan sekumpulan pola biner digunakan notasi s(p), p=1,..,P, dimana:
s(p) = (s1(p),...,si(p),....,sn (p)) (2.2) Sedangkan untuk menyimpan bobot matriks W={Wij}, dengan notasi:
Wij =
∑
[2s
i(p)−1][2s
j(p)−1] untuk i ≠ j dan Wij = 0 (2.3)Sedangkan versi dari deskripsi algoritma Hopfield lainnya (1984) menggunakan input vektor yang berupa angka bipolar. Untuk menyimpan sekumpulan pola bipolar digunakan notasi s(p), p=1 dimana:
s(p) = (s1(p),...,si(p),....,sn (p)) (2.4) Sedangkan untuk menyimpan bobot matriks W={Wij}, dengan notasi:
Wij =
∑
p [
s
i(p)s
j(p)] untuk i ≠ j dan Wij = 0 (2.5) Adapun algoritma Hopfield dari kedua penjelasan diatas dan apabila diterapkan pada pola angka yang berjumlah 10 buah yang berupa angka 0 sampai dengan 9 adalah sebagai berikut:1.Menciptakan vektor pola ke-p, yang merupakan himpunan n simpul untuk pola yang ke-p.
s(p) = (s1(p), s2(p),...,si(p),....,sn (p)) (2.6) Dengan p adalah jumlah pola. Misalkan ada pola sebanyak 10 buah yaitu dari angka 0 sampai dengan 9.
2.Menciptakan matriks koneksi sebagai tempat pola contoh yaitu angak 0 sampai pola angka 9 yang disimpan dalam suatu konstanta.
Siapkan S(p) untuk p= 1..10
Inisialisasi matriks W (orde n × n) untuk menyimpan pola
Wij =
∑
≠=
=
j i p p
j i
p10
s s
j1 1( )* ( )
0 (2.7)
Dengan:
p = jumlah pola
Wij = bobot koneksi dari simpul ke i simpul j
c(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1 sj (p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1 3. Mengerjakan langkah-langkah ini selama pola belum konvergen .
Langkah a untuk tiap vektor x (x1,x2,x3,...,xn) Langkah b inisialisasi pola input yang tidak diketahui
Y = X (i=1..n) (2.8)
Langkah c kerjakan langkah b sampai semua pola diuji Langkah d
∑
=+
= n
j j ji
i
i
x y W
in
y
1
) (
_ (2.9)
Langkah e Determine Activation (Sinyal output)
=
≥<
−
0 1
0 1
_ _
in y
in y
ini
i
jika jika
y
i (2.10)Oi selalu berharga 0
Langkah f hasil dari output Yi berlaku untuk semua pola lain Langkah g uji pola sampai konvergen
2.3.3 Kapasitas Penyimpanan
Dalam mengenali pola yang telah diberi gangguan atau derau, Hopfield memberikan rumus yaitu sebagai berikut:
P ≈ 0.15×n, dimana n adalah jumlah neuron yang ada dalam jaringan.
Tetapi dalam jaringan Hopfield memiliki dua keterbatasan yaitu sebagai berikut:
1. Jika terlalu banyak pola yang disimpan, maka jaringan akan konvergen kepada pola palsu yang berbeda dengan semua pola yang diberikan.
Untuk menghindarkan hal tersebut, Hopfield memberikan rumus empiris s<0.15n atau jumlah pola pelatihan harus lebih kecil daro 0.15 kali jumlah simpul dalam jaringan.
2. Jika pola-pola contoh terlalu banyak memiliki kesamaan maka jaringan menjadi tidak stabil yaitu jaringan akan konvergen dengan pola lain.
2.3.4 Fungsi Energi
Fungsi energi dari jaringan Hopfield adalah:
y x y
y W
y
ij
i j i j ij i i i i i
E
∑∑ ∑ ∑
≠
+
−
−
= 0.5
θ
(2.11)Jika perubahan aktivasi pada jaringan disimbolkan dengan ∆ yi, maka perubahan energi adalah
x y
y w
ij j ij i i
E ∆
+ −
−
=
∆
∑ θ
(2.12)Jika yi bernilai positif, maka perubahan energi akan menjadi 0. Kondisi akan terjadi jika:
∑
<+
j j ij i
i
y w
x θ
(2.13)Yi akan bernilai negatif jika ∆E < 0
Jika yi bernilai nol, maka perubahan energi akan menjadi positif. Kondisi akan terjadi apabila:
∑
>+
j j ij i
i
y w
x θ
(2.14)Yi akan bernilai positif jika ∆E < 0
2.3.5. Neural Network Hopfield untuk Travelling Salesman Problem
Dalam jaringan syaraf tiruan Hopfield, jaringan terdiri atas sejumlah neuron yang mewakilkan sejumlah titik-titik dimana setiap neuron terhubung satu dengan yang lain. Setiap hubungan yang ada memiliki tingkatan bobot (dalam hal ini jarak antar titik) yang menjadi perbandingan pemilihan rute dalam pemecahan kasus ini.
Karakteristik dalam jaringan syaraf tiruan Hopfield yang perlu untuk dilakukan pendekatan adalah meminimalisasi nilai fungsi energi E sekecil mungkin. Meskipun jaringan dapat dengan mudah menghasilkan nilai fungsi energi yang minimum tersebut, namun belum tentu jaringan dapat menghasilkan nilai fungsi energi minmum yang terkecil. Atau dengan kata lain algoritma Hopfield ini merupakan salah satu algoritma yang bagus, namun bukan yang terbaik dalam kasus Travelling Salesman Problem.
Berikut adalah rimus-rumus yang digunakan dalam pendekatan untuk mecari nilai fungsi energi E yang minimum:
● Rumus untuk mencari update dari nilai ui:
( ) ux ux
ux
i t+1 = i(t)+∆ i (2.15)● Rumus untuk mencari Vi dari nilai ui yang didaptkan dari rumus diatas:
( ) x
1/2(
1 tanh(x
)) x
vx
i=g i u i = + λu i (2.16)● Rumus untuk menghitung fungsi energi E
( )
∑ ∑∑
∑∑∑ ∑∑ ∑ ∑∑
= ≠= = + −
= =
≠= = =
≠= = =
+ +
+ +
=
n X
n
X YY
n
i i i i
n x
n i
n
jj
n i
n X
n
X YY
n X
n
i i i
i j j
i
vy vy
dxyvx
vx vy vx vy
vx vx
D
C B
E A
1 1 1 1 12
2
1 1 1 1 1 1 1 1
2
2 2
2
(2.17) Dari rumus-rumus di atas dilakukan perhitungan terhadap nilai fungsi energi E hingga didapatkan nilai E yang minimum. Apabila telah didapatkan nilai fungsi energi yang minumum, diharapkan hasil dari proses algoritma ini memberikan hasil yang paling optimum.