Anda di halaman 1dari 129

PENERAPAN ALGORITMA GENETIKA PADA APLIKASI

REKOMENDASI TEMPAT WISATA DI JAKARTA BERBASIS


WEB
LAPORAN KULIAH KERJA PRAKTEK
Oleh :

1
2
3

1211500952
1211501885
1211502750

Triana Nopitasari
Ivanny Silviana Santoso
Zolandia Ramanda

FAKULTAS TEKNOLOGI INFORMASI


UNIVERSITAS BUDI LUHUR
JAKARTA
SEMESTER GASAL
2014 / 2015

ii

ABSTRAKSI
Mayoritas masyarakat zaman sekarang mempunyai waktu luang yang sangat terbatas
untuk melakukan liburan seperti berkeliling tempat-tempat wisata di Jakarta. Belum lagi
minimnya informasi mengenai harga, rating dan waktu yang harus ditempuh untuk menuju ke
tempat wisatanya. Dengan waktu yang luang yang terbatas masyarakat ingin melakukan
hiburan ke banyak tempat dan dengan biaya seminimal mungkin agar mereka bisa
menggunakan waktu mereka dengan sebaik baiknya. Dengan permasalahan tersebut maka
masyarakat membutuhkan solusi untuk mengoptimalkan waktu luang mereka menjadi lebih
efisien dengan biaya yang seminimal mungkin.
Pada penelitian ini dirancang suatu sistem dan program yang dapat melakukan
Rekomendasi Tempat Wisata yang baik menggunakan Algoritma Genetika. Pada Algoritma
Genetika dilakukan metode seleksi Roulette Wheel untuk memilih individu yang akan dipilih
untuk melakukan rekombinasi, Crossover, mutasi pada setiap individu dan dilakukan seleksi
feasible untuk mengecek gen yang memiliki waktu melebihi waktu yang diinput user serta
dilakukan update generasi untuk mendapat individu yang baik.
Hasil dari optimasi rekomendasi tempat wisata adalah menghasilkan nama-nama
tempat wisata yang direkoendasikan dimana semakin banyak generasi yang diinput maka
semakin tinggi pula nilai fitness yang dihasilkan dan biayanya juga semakin minimal. Pada
waktu 3 jam, estimasi waktu 60 menit, dan generasi 50 memiliki nilai fitness 2842.03569065.
Aplikasi ini dibuat menggunakan bahasa pemrograman PHP dan database MySQL.
Dipilih bahasa pemrograman PHP karena dapat diakses langsung ke internet sehingga
memudahkan user untuk mengakses aplikasi rekomendasi tempat wisata di manapun dan
kapanpun.
Dengan dikembangkannya aplikasi ini, diharapkan dapat membantu para masyarakat
yang memerlukan rekomendasi tempat unuk berlibur secara optimal dan mendapatkan
informasi yang diinginkan dengan lebih cepat.
Kata kunci : Algoritma Genetika, Roulette Wheel, Crossover, Mutasi
Xiii+66 halaman; 52 Gambar; 16 Tabel

iii

KATA PENGANTAR
Dengan mengucapkan puji dan syukur kita panjatkan kehadirat Tuhan Yang Maha Esa
yang telah memberikan rahmat dan ridho-Nya sehungga kami dapat menyelesaikan laporan
Kuliah Kerja Praktek (KKP) yang berjudul Penerapan Algoritma Genetika Pada Aplikasi
Rekomendasi Tempat Wisata Di Jakarta Berbasis Web dengan baik.
Dalam kesempatan kali ini, penulis akan menyampaikan ucapan terima kasih kepada
pihak-pihak yang senantiasa mendukung, membantu dan membimbing dalam penyelesaian
kuliah kerja praktek antara lain:
1. Tuhan Yang Maha Esa atas nikmat, rahmat dan ridho-Nya sehingga pada akhirnya kami
dapat menyelesaikan laporan Kuliah Kerja Praktek (KKP) ini dengan tepat waktu.
2. Orang tua kami tercinta yang telah memberikan dorongan semangat positif serta nasehat,
doa dan materil kepada kami.
3. Bapak Prof. Ir. Suryo Hapsoro Tri Utomo, Ph.D, selaku Rektor Universitas Budi Luhur.
4. Bapak Goenawan Brotosaputro, S.Kom, M.Sc, selaku Dekan Fakultas Teknologi Informasi
Universitas Budi Luhur
5. Bapak Ainur Rony, S.Kom, M.T.I, selaku ketua Program Studi Teknik Informatika
Universitas Budi Luhur.
6. Bapak Achmad Solichin, S.Kom, M.T.I, selaku dosen pembimbing yang telah memberi
arahan dan masukan kepada kami.
7. Ibu Faizah, selaku dosen Universitas Gadjah Mada yang senantiasa membingbing kami
dalam menyelsaikan permasalahan algoritma pada laporan Kuliah Kerja Praktek kami.
8. Bapak Azhari SN, selaku dosen Universitas Gadjah Mada yang telah memberikan kami
banyak ilmu mengenai penulisan laporan yang baik dan benar.
9. Universitas Gadjah Mada yang telah memberikan kami ide-ide menarik dalam penetuan
topik untuk laporan Kuliah Kerja Praktek ini.
10. Seluruh dosen Fakultas Teknologi Informasi Universitas Budi Luhur yang telah berjasa
dalam memberikan ilmu-ilmu yang bermanfaat.
11. Teman-teman KUTI 2012 yang telah menemani, membantu dan memberikan semangat
kepada kami.
12. Semua pihak yang turut membantu, termasuk teman-teman mahasiswa lain yang ikut
serta memberikan semangat dan nasehat sehingga laporan Kuliah Kerja Praktek ini dapat
terselesaikan.
Akhir kata dengan segala kerendahan hati, kami memohon maaf atas semua kekurangan
yang terdapat dalam laporan ini sehingga kami sangat mengharapkan semua kritik dan saran
yang sifatnya membangun agar kami dapat memperbaiki laporan Kuliah Kerja Praktek ini.
Besar harapan kami agar laporan Kuliah Kerja Praktek ini dapat bermanfaat bagi semua pihak.
Jakarta, Februari 2015
Penulis

iv

DAFTAR TABEL

Tabel 2.1: Contoh kromosom dengan pengkodean biner ....................................... 5


Tabel 2.2: Contoh kromosom dengan pengkodean permutasi ................................ 6
Tabel 2.3: Contoh kromosom dengan pengkodean nilai ........................................ 6
Tabel 2.4: Contoh populasi dan nilai fitness pada seleksi roda roulette ................... 7
Tabel 2.5: Contoh crossover satu titik.................................................................. 9
Tabel 2.6: Contoh crossover banyak titik ............................................................. 9
Tabel 2.7: Contoh crossover seragam.................................................................. 9
Tabel 2.8: Contoh crossover aritmatik ................................................................. 9
Tabel 2.9: Contoh crossover untuk pengkodean permutasi ................................... 10
Tabel 2.10: Contoh mutasi untuk pengkodean biner ............................................ 11
Tabel 2.11: Contoh mutasi untuk pengkodean permutasi ..................................... 11
Tabel 2.12: Contoh mutasi untuk pengkodean nilai.............................................. 11
Tabel 3.1: Spesifikasi Tabel Asal ........................................................................ 24
Tabel 3.2: Spesifikasi Tabel Kunjung .................................................................. 25
Tabel 3.4: Spesifikasi Tabel Login ...................................................................... 26
Tabel 4.2: Hasil Pengujian Untuk 10 Jam ............................................................ 63

DAFTAR GAMBAR

Gambar 2.1: Contoh Probabilitas pada roda roulette ............................................. 7


Gambar 2.2: Flowchart langkah-langkah algoritma genetika ................................. 13
Gambar 2.3: Contoh graf TSP dengan 3 kota ...................................................... 15
Gambar 2.4: Contoh graf TSP dengan 4 kota ...................................................... 15
Gambar 2.5: Contoh sirkuit Hamilton pada graf TSP dengan 4 kota ...................... 15
Gambar 2.5: Contoh graf TSP dengan 5 kota ...................................................... 16
Gambar 2.6: Contoh banyak graf TSP dengan 5 kota ........................................... 16
Gambar 3.1: Kromosom dengan Pengkodean Biner ............................................. 19
Gambar 3.2: Rancangan Enchanced Entity Relationship Diagram .......................... 23
Gambar 3.3: Rancangan Transformasi EER-Diagram ke LRS ................................ 24
Gambar 3.4: Rancangan Logical Record Structure ............................................... 24
Gambar 3.5: Rancangan Layar Menu Home ........................................................ 26
Gambar 3.6: Rancangan Layar Menu Rekomendasi Tempat Wisata ....................... 27
Gambar 3.7: Rancangan Layar Menu Daftar Tempat Wisata ................................. 28
Gambar 3.8: Rancangan Layar Menu Help .......................................................... 28
Gambar 3.9: Rancangan Layar Menu Tentang Program........................................ 29
Gambar 3.10: Rancangan Layar Menu credit ....................................................... 29
Gambar 3.11: Rancangan Layar Menu License .................................................... 30
Gambar 3.12: Rancangan Layar Menu Login ....................................................... 30
Gambar 3.13: Rancangan Layar Menu Home Admin ............................................ 31
Gambar 3.14: Rancangan Layar Menu Master Tempat Asal .................................. 32
Gambar 3.15: Rancangan Layar Menu Master Tempat Tujuan .............................. 33
Gambar 3.16: Rancangan Layar Menu Master Tempat Kunjung ............................ 33
Gambar 3.17: Flowchart Menu Utama ................................................................ 34
Gambar 3.18: Flowchart Menu Rekomendasi Tempat Wisata ................................ 35
Gambar 3.19: Flowchart Menu Daftar Tempat Wisata .......................................... 36
Gambar 3.20: Flowchart Menu Help ................................................................... 37
Gambar 3.21: Flowchart Menu About ................................................................. 38
Gambar 3.22: Flowchart Proses Login................................................................. 39

vi

Gambar 3.23: Flowchart Form Menu Utama Admin .............................................. 40


Gambar 3.24: Flowchart Form Daftar Tempat Wisata Admin ................................ 41
Gambar 3.25: Flowchart Form Master Tempat Asal .............................................. 42
Gambar 3.26: Flowchart Form Master Tempat Tujuan.......................................... 43
Gambar 3.27: Flowchart Form Master Tempat Kunjung........................................ 44
Gambar 4.1: Tampilan Layar Form Menu Utama Frontend .................................... 52
Gambar 4.2: Tampilan Layar Form Menu Rekomendasi Tempat Wisata ................. 52
Gambar 4.3: Tampilan Layar Form Menu Rekomendasi Tempat Wisata di generate 53
Gambar 4.4: Tampilan Layar Form Menu Daftar Tempat Wisata Peta .................... 53
Gambar 4.5: Tampilan Layar Form Menu Daftar Tempat Wisata List ..................... 54
Gambar 4.6: Tampilan Layar Form Menu Help..................................................... 54
Gambar 4.7: Tampilan Layar Form Menu Tentang Program .................................. 55
Gambar 4.8: Tampilan Layar Form Menu Credit................................................... 56
Gambar 4.9: Tampilan Layar Form Menu License ................................................ 56
Gambar 4.10: Tampilan Layar Form Menu Login ................................................ 57
Gambar 4.11: Tampilan Layar Form Menu Login Saat Diisi ................................... 57
Gambar 4.20: Tampilan Layar Form Menu Login Salah......................................... 58
Gambar 4.21: Tampilan Layar Form Menu Utama Admin ...................................... 58
Gambar 4.22: Tampilan Layar Form Menu Daftar Tempat Wisata Peta Admin ........ 59
Gambar 4.23: Tampilan Layar Form Menu Daftar Tempat Wisata List Admin ......... 59
Gambar 4.24: Tampilan Layar Form Menu Master Tempat Asal............................. 60
Gambar 4.25: Tampilan Layar Form Menu Master Tempat Tujuan ........................ 61
Gambar 4.26: Tampilan Layar Form Menu Master Tempat Kunjung....................... 62

vii

DAFTAR SIMBOL
1. Diagram ERD

Entity (Entitas)
Merupakan sekumpulan orang, tempat obyek yang menampilkan
data dicatat atau disimpan

Relationship (Hubungan)
Menggambarkan hubungan yang terjadi pada dua entitas atau
lebih

Cardinality (Kardinalitas)
Menggambarkan tingkat hubungan yang terjadi pada dua buah
entitas

Weak Entity (Entitas Lemah)


Merupakan entitas yang tidak memiliki primary key dan tergantung
pada primary key entitas lain

Weak Relationship (Hubungan Lemah)


Menggambarkan hubungan yang terjadi pada dua entitas atau
lebih yang bersifat lemah

Garis
Menunjukkan garis penghubung
2. Flowchart
Terminator
Digunakan untuk menggambarkan kegiatan awal atau akhir dari
suatu proses

viii

Process
Digunakan untuk menggambarkan suatu proses

Input /Output
Digunakan untuk menggambarkan suatu kegiatan masukkan
maupun keluaran.

Decision
Digunakan untuk menggambarkan suatu keputusan atau tindakan
yang harus diambil pada suatu kondisi tertentu.

Predifined Process
Digunakan untuk menggambarkan suatu kegiatan atau proses.

Line Connector
Digunakan untuk menghubungkan satu simbol dengan simbol yang
lain pada halaman modul yang lainnya.

On page Connector
Digunakan untuk menghubungkan satu simbol dengan simbol yang
lainnya pada halaman yang sama
Off page Connector
Digunakan untuk menghubungkan satu simbol dengan simbol yang
lainnya pada halaman yang berbeda.

ix

DAFTAR ISI
LEMBAR JUDUL ... i
LEMBAR PENGESAHAN ...................................................... Error! Bookmark not defined.
ABSTRAKSI .......................................................................................................................ii
KATA PENGANTAR ...........................................................................................................iv
DAFTAR TABEL ................................................................................................................ v
DAFTAR GAMBAR .............................................................................................................vi
DAFTAR SIMBOL ............................................................................................................ viii
DAFTAR ISI ..................................................................................................................... x
BAB I PENDAHULUAN ....................................................................................................... 1
1.

Latar Belakang ...................................................................................................... 1

2.

Perumusan Masalah .............................................................................................. 1

3.

Batasan Masalah ................................................................................................... 1

4.

Maksud dan Tujuan Penulisan ................................................................................ 2

5.

Metode Penelitian ................................................................................................. 2

6.

Sistematika Penulisan ............................................................................................ 2

BAB II LANDASAN TEORI ................................................................................................. 4


1.

Algoritma Genetika ................................................................................................ 4


a.

Pengertian Algoritma Genetika ........................................................................... 4

b.

Struktur Umum Algoritma Genetika .................................................................... 4

c.

Komponen Algoritma Genetika ........................................................................... 5

d.

Langkah-langkah Algoritma Genetika ................................................................ 12

Travelling Salesman Problem (TSP) ...................................................................... 13

2.
a.

Definisi Travelling Salesman Problem (TSP)....................................................... 13

b.

Algoritma TSP ................................................................................................. 14

c.

Implementasi TSP pada kota ............................................................................ 14

3.

Referensi Ilmiah .................................................................................................. 17

BAB III ANALISIS PERMASALAHAN dan PERANCANGAN PROGRAM ................................... 18


1.

2.

Analisis Masalah dan Solusi .................................................................................. 18


a.

Identifikasi Masalah ......................................................................................... 18

b.

Strategi Penyelesaian ...................................................................................... 18


Perancangan Sistem ............................................................................................ 18

xi

a.

Gambaran Umum Sistem ................................................................................. 18

b.

Algoritma Genetika Pada Sistem ....................................................................... 18


1)

Fungsi obyektif ............................................................................................ 18

2)

Pengkodean ................................................................................................ 18

3)

Inisialisasi ................................................................................................... 19

4)

Perbaikan Kromosom ................................................................................... 19

5)

Evaluasi ...................................................................................................... 20

6)

Seleksi ........................................................................................................ 21

7)

Crossover .................................................................................................... 21

8)

Mutasi ......................................................................................................... 22

9)

Seleksi Feasible ........................................................................................... 22

10)
3.

Update Generasi ...................................................................................... 23

Rancangan Basis Data ......................................................................................... 23


a.

EERD (Enchanced Entity Relationship Diagram) ................................................. 23

b.

Transformasi EER-Diagram ke LRS (Logical Record Structure) ............................ 23

c.

LRS (Logical Record Structure) ......................................................................... 24

d.

Spesifikasi Basis Data ...................................................................................... 24

4.

Rancangan Layar ................................................................................................ 26

Frontend ......................................................................................................... 26

a.
1)

Rancangan Layar Menu Utama ..................................................................... 26

2)

Rancangan Layar Menu Rekomendasi Tempat Wisata .................................... 27

3)

Rancangan Layar Menu Daftar Tempat Wisata............................................... 27

4)

Rancangan Layar Menu Help ........................................................................ 28

5)

Rancangan Layar Menu About ...................................................................... 28


a) Rancangan Layar Tentang Program ............................................................. 29
Rancangan Layar Credit ................................................................................... 29
Rancangan Layar License ................................................................................. 30

Backend.......................................................................................................... 30

b.
1)

Rancangan Layar Menu Login ....................................................................... 30

2)

Rancangan Layar Menu Utama Admin ........................................................... 31

3)

Rancangan Layar Menu Master ..................................................................... 31


a) Rancangan Layar Master Tempat Asal ......................................................... 31
b) Rancangan Layar Master Tempat Tujuan ..................................................... 32

xi

xii

c) Rancangan Layar Master Tempat Kunjung ................................................... 33

Flowchart Aplikasi Rekomendasi Tempat Wisata.................................................... 34

5.

Frontend ......................................................................................................... 34

a.
1)

Flowchart Form Menu Utama ........................................................................ 34

2)

Flowchart Form Rekomendasi Tempat Wisata ................................................ 34

3)

Flowchart Form Menu Daftar Tempat Wisata ................................................. 35

4)

Flowchart Menu Help ................................................................................... 37

5)

Flowchart Form Menu About ........................................................................ 37


Backend.......................................................................................................... 38

b.

6.

1)

Flowchart Proses Login ................................................................................ 38

2)

Flowchart Menu Utama Admin ...................................................................... 39

3)

Flowchart Form Menu Daftar Tempat Wisata ................................................. 40

4)

Flowchart Menu Master ................................................................................ 41


a)

Flowchart Form Menu Master Tempat Asal ................................................ 42

b)

Flowchart Form Menu Master Tempat Tujuan ............................................ 43

c)

Flowchart Form Menu Master Tempat Kunjung .......................................... 44

Algoritma Aplikasi Rekomendasi Tempat Wisata .................................................... 45

Frontend ......................................................................................................... 45

a.
1)

Algoritma Menu Utama................................................................................. 45

2)

Algoritma Proses Rekomendasi Tempat Wisata .............................................. 45

3)

Algoritma Proses Daftar Tempat Wisata ........................................................ 45

4)

Algoritma Proses Menu Help ......................................................................... 46

5)

Algoritma Menu About ................................................................................. 46

Backend.......................................................................................................... 46

b.
1)

Algoritma Proses Login ................................................................................ 46

2)

Algoritma Menu Utama................................................................................. 47

3)

Algoritma Proses Daftar Tempat Wisata ........................................................ 47

4)

Algoritma Menu Master ................................................................................ 48


a) Algoritma Menu Master Tempat Asal ........................................................... 48
b) Algoritma Menu Master Tempat Tujuan ....................................................... 49
c) Algoritma Menu Master Tempat Kunjung ..................................................... 49

BAB IV IMPLEMENTASI dan UJI COBA PROGRAM ............................................................. 51


1.

Spesifikasi Hardware dan Software ....................................................................... 51

xii

xiii

a.

2.

Implementasi Aplikasi Rekomendasi Tempat Wisata .......................................... 51


1)

Hardware .................................................................................................... 51

2)

Software ..................................................................................................... 51

Tampilan Layar Program ...................................................................................... 51


a.

Tampilan Layar Form Menu Utama Frontend ..................................................... 51

b.

Tampilan Layar Form Menu Rekomendasi Tempat Wisata .................................. 52

c.

Tampilan Layar Form Menu Daftar Tempat Wisata ............................................ 53

d.

Tampilan Layar Form Menu Help ...................................................................... 54

e.

Tampilan Layar Form Menu About .................................................................... 55


1)

Tampilan Layar Form Menu Tentang Program ............................................... 55

2)

Tampilan Layar Form Menu Credit ................................................................ 55

3)

Tampilan Layar Form Menu License .............................................................. 56

f.

Tampilan Layar Form Menu Login ..................................................................... 57

g.

Tampilan Layar Form Menu Utama Admin ......................................................... 58

h.

Tampilan Layar Form Menu Daftar Tempat Wisata ............................................ 59

i.

Tampilan Layar Form Menu Master ................................................................... 60


1)

Tampilan Layar Form Menu Master Asal ........................................................ 60

2)

Tampilan Layar Form Menu Master Tujuan .................................................... 60

3)

Tampilan Layar Form Menu Master Kunjung .................................................. 61

3.

Hasil Pengujian ................................................................................................... 62

4.

Evaluasi Program ................................................................................................ 64


a.

Kelebihan Program .......................................................................................... 64

b.

Kekurangan Program ....................................................................................... 64

BAB V PENUTUP............................................................................................................. 65
1.

Kesimpulan ......................................................................................................... 65

2.

Saran ................................................................................................................. 65

DAFTAR PUSTAKA .......................................................................................................... 66


LAMPIRAN LISTING PROGRAM ....................................................................................... 67

xiii

BAB I
PENDAHULUAN
1. Latar Belakang
Jakarta adalah ibukota negara Indonesia yang sangat luas padat dan ramai
penduduknya. Tentunya ibukota ini juga memiliki ragam wisata untuk menghibur dan
menghilangkan rasa stress masyarakat. Wisata merupakan kegiatan perjalanan yang
dilakukan oleh seseorang atau sekelompok orang dengan mengunjungi tempat tertentu
untuk tujuan rekreasi, pengembangan pribadi atau mempelajari keunikan daya tarik wisata
yang dikunjungi dalam waktu tertentu. Namun, masyarakat mayoritas adalah penduduk
yang memiliki waktu terbatas untuk refreshing atau mengunjungi tempat wisata yang ada
di Jakarta sehingga sulit untuk menentukan kemana mereka harus pergi menghabiskan
waktu liburannya. Belum lagi minimnya informasi mengenai harga, rating, waktu yang
harus ditempuh untuk menuju ke tempat wisatanya. Hal ini tentu saja merupakan poin
utama kenapa masyarakat malas untuk berpergian ke tempat-tempat wisata yang ada di
Jakarta. Sehingga pencarian rekomendasi menjadi hal yang penting dalam
pengoptimalisasian pencarian tempat wisata di Jakarta.
Oleh sebab itu, untuk memenuhi kebutuhan masyarakat Jakarta dalam
mengoptimalkan pemilihan tempat wisata tersebut dibutuhkan suatu aplikasi yang dapat
menentukan jumlah tempat wisata dalam waktu tertentu sesuai yang dibutuhkan. Aplikasi
tersebut harus dapat memberikan solusi berupa jumlah banyaknya tempat wisata yang
bisa dikunjungi secara optimal.
Algoritma Genetika merupakan salah satu algoritma yang dapat digunakan untuk
menyelesaikan masalah optimasi. Algoritma ini mampu menemukan solusi yang baik
secara heuristik dengan cepat (Suyanto, 2008). Dengan sifatnya yang mampu
menghasilkan solusi yang baik tersebut, Algoritma Genetika diharapkan dapat membantu
memenuhi kebutuhan pengotimalisasian rekomendasi tempat wisata.
Sehingga dengan permasalahan diatas, kami menjadikan masalah pengoptimalisasian
tempat wisata sebagai bahan penulisan laporan Kuliah Kerja Praktek ini. Adapun judul yang
diambil dan dipilih oleh kami adalah Penerapan Algoritma Genetika Pada Aplikasi
Rekomendasi Tempat Wisata Di Jakarta Berbasis Web.
2. Perumusan Masalah
Bagaimana membangun sebuah aplikasi berbasis web untuk menentukan jumlah
tempat wisata yang bisa dikunjungi berdasarkan harga, rating dan waktu tertentu dengan
penerapan Algoritma Genetika.
3. Batasan Masalah
Aplikasi akan dibangun dengan batasan-batasan yang telah ditentukan sebagai
berikut:
a. Lokasi awal sudah ditentukan, yaitu pada Universitas Budi Luhur di Ciledug,
Petukangan.
b. Alat transportasi yang digunakan adalah mobil.
c. Waktu eksekusi program dibatasi sebesar 2 menit.
d. Jumlah waktu yang diinput minimal 2 jam.

4. Maksud dan Tujuan Penulisan


Tujuan dari penulisan Kuliah Kerja Praktek (KKP) ini adalah sebagai salah satu syarat
untuk menempuh tugas akhir (TA) yang telah ditetapkan dalam kurikulum akademik. Di
samping itu, KKP juga memberikan pengalaman bagi mahasiswa untuk menerapkan dan
memperluas wawasan penerapan teori dan pengetahuan yang telah diterima dari materi
perkuliahan. Sehingga mahasiswa mampu mengimplementasikan teori yang telah didapat
di lingkungan kerja setelah menyelesaikan pendidikan.
Selain itu, sesuai dengan perumusan masalah, tujuan dari penyusunan KKP ini adalah
membangun aplikasi berbasis web untuk menentukan jumlah tempat wisata yang bisa
dikunjungi berdasarkan harga, rating dan waktu tertentu dengan penerapan Algoritma
Genetika. Sehingga dapat mempermudah masyarakat dalam berpergian ke tempat wisata
secara optimal.
5. Metode Penelitian
Metode yang dipergunakan dalam penyusunan Kuliah Kerja Praktek (KKP) ini adalah
sebagai berikut :
a. Mengumpulkan data
Metode ini dilakukan untuk mengumpulkan data dengan mencari dan membaca
buku-buku referensi. Serta mencari informasi pembahasan yang sudah ada yang
berkaitan di internet.
b. Analisa data
Tahapan analis bertujuan untuk mencari kebutuhan dan menganalisa kondisi
yang ada.
c. Membuat rancangan sistem
Tahapan rancangan sistem bertujuan untuk menentukan spesifikasi detil dari
sistem sesuai hasil analisa yang dilakukan dengan membuat rancangan layar,
flowchart, database dan lain-lain.
d. Implementasi
Tahapan ini merupakan tahapan untuk mendapatkan atau mengembangkan
perangkat
lunak
(pengkodean
program),
melakukan
pengujian,
dan
diimplementasikan berdasarkan hasil analisa yang dituangkan kedalam kode
program menggunakan bahasa pemprograman berbasis Web dan database MySQL.
e. Uji coba sistem
Setelah sistem selesai dibuat maka dilakukan uji coba terhadap sistem yang
buat.
6. Sistematika Penulisan
Untuk mempermudah dalam penyusunan dan memperoleh gambaran keseluruhan
Kuliah Kerja Praktek ini, maka penulis membuat sistematika penulisan sebagai berikut:
BAB I

PENDAHULUAN
Dalam bab ini membahas mengenai latar belakang penulisan KKP,
permasalahan, batasan masalah, maksud dan tujuan penulisan, metode
penelitian dan sistematika penulisan dalam penyusunan KKP ini.

BAB II

LANDASAN TEORI
Dalam bab ini membahas tentang teori-teori dasar yang berkaitan dengan
pembuatan aplikasi ini, mulai dari teori yang bersifat umum sampai teori
yang membahas tentang perangkat lunak yang digunakan.

BAB III ANALISIS PERMASALAHAN DAN PERANCANGAN PROGRAM


Dalam bab ini, berisi tentang analisis terkait permasalahan dan solusi yang
dibahas dalam KKP, yaitu mencakup tentang analisis masalah dan solusi,
rancangan basis data dalam bentuk class diagram, LRS dan spesifikasi basis
data, rancangan layar, algoritma serta flowchart.
BAB IV

IMPLEMENTASI DAN UJI COBA PROGRAM


Dalam bab ini, berisi mengenai implementasi dan uji program termasuk
lingkungan percobaan, data masukan, langkah pengujian, dan evaluasi
program mengenai kelebihan dan kekurangan program.

BAB V

PENUTUP
Bab ini merupakan bagian terakhir dari penulisan KKP yang kami buat,
dimana memuat tentang kesimpulan dan saran yang dapat berguna bagi
pengembangan aplikasi selanjutnya.

BAB II
LANDASAN TEORI
1. Algoritma Genetika
a. Pengertian Algoritma Genetika
Terdapat beberapa pengertian Algoritma Genetika yang terdapat pada berbagai
buku, antara lain:
1) Algoritma Genetika adalah teknik pencarian stokastik yang berdasar pada
mekanisme seleksi dan genetic alam (Gen, 1997).
2) Algoritma Genetika adalah algoritma pencarian heuristik yang didasarkan atas
mekanisme evolusi biologi (Kusumadewi, 2003).
3) Algoritma Genetika adalah salah satu algoritma yang dapat digunakan untuk
menyelesaikan masalah optimasi. Algoritma ini mampu menemukan solusi yang
baik secara heuristic dengan cepat (Suyanto, 2008).
b. Struktur Umum Algoritma Genetika
Algoritma Genetika memiliki sifat-sifat yang menyerupai mekanisme evolusi
biologi, karena itulah nama-nama proses maupun komponen dalam Algoritma
Genetika sama dengan proses dan komponen-komponen evolusi makhluk hidup,
seperti populasi, kromosom, gen, orang tua, anak, regenerasi, rekombinasi, mutasi,
dan sebagainya.
Dalam Algoritma Genetika, kromosom merupakan kandidat solusi dalam suatu
permasalahan. Satu kromosom menyatakan satu kandidat solusi. Algoritma Genetika
melakukan pencarian sekaligus di sekumpulan kandidat solusi. Kumpulan kandidatkandidat solusi atau kromosom tersebutdisebut dengan populasi (Suyanto, 2008).
Setiap populasi butuh regenerasi. Untuk melakukan regenerasi, harus terjadi
perkawinan atau rekombinasi antara dua orang tua yang menghasilkan anak. Pada
Algoritma Genetika, setiap kromosom dapat menjadi orang tua yang kemudian
melakukan rekombinasi. Namun tidak sembarang kromosom dipilih untuk melakukan
proses rekombinasi. Harus ada suatu proses pemilihan kromosom yang cukup baik
untuk dijadikan orang tua agar nantinya dapat dihasilkan anak yang cukup baik pula.
Dalam kehidupan nyata, proses alam selalu terjadi. Individu yang memiliki kualitas
lebih baik memiliki peluang hidup yang lebih besar daripada yang lain (Suyanto, 2008).
Begitu juga dengan proses dalam Algoritma Genetika. Setelah dihasilkan anak dari
proses rekombinasi, harus ditinjau, apakah anak tersebut memiliki kualitas yang cukup
baik untuk menjadi generasi baru dalam populasi tersebut. Anak dapat dikatakan baik
jika memiliki kualitas yang minimal sama dengan kualitas individu yang sudah ada
dalam populasi. Bila kualitasnya baik, maka anak tersebut dapat menjadi bagian dari
populasi, atau dapat dikatakan mati.
Untuk menjaga agar ukuran populasi tidak berubah, baik bertambah maupun
berkurang, jika terdapat anak yang dapat lolos menjadi anggota populasi, berarti harus
ada anggota populasi lain yang harus dikorbankan. Anggota populasi yang harus mati
adalah anggota populasi yang memiliki kualitas terburuk (Suyanto, 2005). Hal itu
dilakukan untuk menjaga agar kualitas individu-individu dalam populasi tidak menurun.
Selama proses regenerasi, tidak hanya rekombinasi yang dapat terjadi, tapi juga
proses mutasi. Mutasi memiliki peluang jauh lebih kecil dibandingkan kombinasi,
namun mutasi tetap dapat merubah sifat individu. Dalam Algoritma Genetika, mutasi
dapat dilakukan dengan merubah nilai pada suatu gen di dalam kromosom.

Proses-proses di atas menciptakan suatu generasi baru dari suatu populasi.


Generasi-generasi baru akan terus tercipta sampai jumlah generasi tertentu, waktu
proses tertentu, variansi individu-individu dalam populasi tersebut sudah lebih kecil
dari suatu nilai tertentu, atau kriteria lainnya (Suyanto, 2008).
Kualitas suatu individu atau kromosom dalam Algoritma Genetika dinyatakan
sebagai nilai fitness (Suyanto, 2008). Nilai fitness inilah yang mendasari pemilihan
kromosom yang hendak dijadikan orang tua, pemilihan kromosom yang dapat
bertahan di dalam populasi atau mati, juga pemilihan kromosom terbaik yang akan
dijadikan solusi akhir.
Algoritma Genetika banyak menggunakan operator acak untuk penentuan
beberapa hal, seperti inisialisasi populasi awal, yaitu saat populasi awal baru
diciptakan, pemilihan lokasi rekombinasi pada tiap kromosom orang tua, maupun
pemilihan kromosom dan gen yang bermutasi.
c. Komponen Algoritma Genetika
Pada umumnya, terdapat 8 komponen Algoritma Genetika, antara lain
pengkodean, inisialisasi, evaluasi, seleksi, operator genetika, replacement dan
pengujian terhadap kondisi akhir bila permasalahan memiliki batasan-batasan solusi.
1) Pengkodean
Pengkodean merupakan suatu cara untuk merubah solusi menjadi kode-kode
tertentu yang disebut dengan kromosom. Jadi dapat dikatakan bahwa kromosom
merupakan solusi yang dikodekan (Suyanto, 2008). Jenis pengkodean tergantung
pada permasalahan dan solusi yang diinginkan, misalnya pengkodean biner untuk
kromosom yang gen nya berisi nilai-nilai biner, pengkodean integer untuk
kromosom yang gen nya berisi nilai-nilai integer dan berbagai macam jenis
pengkodean lainnya.
Salah satu jenis pengkodean yang sesuai untuk solusi yang berupa urutan
adalah pengkodean permutasi (Gen, 1997). Pada pengkodean jenis ini, setiap
kromosom berisi kombinasi nomor yang harus berbeda satu sama lain, yang
berarti nilai gen satu sama lain dalam satu kromosom harus berbeda. Berikut ini
adalah beberapa jenis pengkodean diantaranya:
a) Pengkodean Biner (Binary Encoding)
Dalam kasus rekomendasi tempat wisata, pengkodean menggunakan
biner lebih sesuai untuk melakukan Algoritma Genetikanya.
Pengkodean biner adalah pengkodean yang paling umum digunakan
karena Algoritma Genetika awalnya menggunakan pengkodean ini. Pada
pengkodean biner setiap kromosom merupakan barisan bit 0 atau 1. Tetapi
pengkodean ini sering tidak sesuai untuk beberapa masalah dan kadang harus
dilakukan koreksi setelah crossover dan mutasi (Obitko, 1998). Contoh
kromosom dengan pengkodean biner dapat dilihat pada tabel.
Tabel 2.1: Contoh kromosom dengan pengkodean biner

Kromosom A

1010111110001101101110

Kromosom B

0001101101110101011011

b) Pengkodean Permutasi (Permutation Encoding)


Kromosom dari pengkodean permutasi ini berupa kumpulan dari nilai
integer yang mewakili suatu posisi dalam sebuah urutan. Pengkodean
permutasi hanya berguna pada masalah pengurutan. Crossover dan mutasi
yang dilakukan pada pengkodean ini harus menghasilkan kromosom yang
memiliki konsistensi urutan (Obitko, 1998). Contoh kromosom dengan
pengkodean permutasi dapat dilihat pada tabel.
Tabel 2.2: Contoh kromosom dengan pengkodean permutasi

Kromosom A

1594872630

Kromosom B

2630159784

c) Pengkodean Nilai (Value Encoding)


Dalam pengkodean nilai, setiap kromosom merupakan barisan dari
beberapa nilai. Nilai bisa berupa apa saja, seperti bilangan biasa, bilangan riil,
karakter, sampai dengan objek yang rumit. Pengkodean nilai sangat baik
untuk beberapa masalah khusus, dilain sisi crossover dan mutasi yang
diperlukan untuk pengkodean ini seringkali memerlukan pengembangan
tersendiri yang lebih spesifik (Obitko, 1998). Contoh kromosom dengan
pengkodean nilai dapat dilihat pada tabel.
Tabel 2.3: Contoh kromosom dengan pengkodean nilai

Kromosom A

1.243, 1.563, 0.569, 8.432, 3.678

Kromosom B

A, B, C, D, G, R, Y, O, P, L, Q, F, W

2) Inisialisasi
Setelah diketahui teknik pengkodean yang sesuai untuk suatu masalah,
langkah yang selanjutnya dilakukan adalah inisialisasi populasi awal. Sejumlah
kromosom diciptakan secara acak sebanyak ukuran populasi yang telah ditentukan
(Gen, 1997). Ukuran populasi merupakan jumlah kromosom dalam satu populasi.
3) Evaluasi
Kromosom-kromosom yang telah tercipta dalam populasi dievaluasi
kualitasnya dengan cara menghitung nilai fitness. Penghitungan nilai fitness dapat
dilakukan dengan banyak cara, sesuai permasalahan dan solusi yang diinginkan.
Sebagai contoh, untuk permasalahan travelling Salesman Problem (TSP), nilai
fitness didapatkan dengan menghitung jarak antar kota sesuai urutan dalam
kromosom.
4) Seleksi
Seleksi merupakan proses pemilihan kromosom dari generasi lama untuk
dijadikan parent yang akan di-crossover untuk membentuk kromosom baru yang
disebut offspring. Seleksi dilakukan dengan memperhatikan fitness dari tiap
kromosom. Semakin tinggi nilai fitness-nya maka semakin besar juga
kemungkinan kromosom tersebut terpilih. Yang menjadi permasalahan adalah

bagaimana cara memilih kromosom untuk dijadikan parent. Ada beberapa jenis
metode seleksi, berikut ini adalah beberepa metode seleksi yang sering digunakan.
a) Seleksi Roda Roulette (Roulette Wheel Selection)
Pada metode ini, individu-individu dipetakan dalam suatu segmen secara
berurutan, hingga tiap-tiap segmen individu memiliki ukuran yang sesuai
dengan nilai fitness-nya. Ukuran segmen dari masing-masing individu adalah
sebesar nilai probabilitasnya, yakni hasil pembagian antara fitness masingmasing individu dengan total fitness dalam populasi (Obitko, 1998). Contoh
populasi beserta nilai fitness-nya dapat dilihat pada tabel, sedangkan
probabilitas terpilihnya dalam roda roulette dapat dilihat pada gambar.
Tabel 2.4: Contoh populasi dan nilai fitness pada seleksi roda roulette

Kromosom Fitness

Probabilitas

15

37.5%

12.5%

10

25%

12.5%

12.5%

12.50%
12.50%

37.50%
25%
12.50%
A

Gambar 2.1: Contoh Probabilitas pada roda roulette


Karena terpilihnya suatu kromosom dalam populasi untuk dapat
berkembang biak adalah sebanding dengan fitness-nya, maka akan terjadi
kecenderungan kromosom yang baik akan terpelihara terus dan membawa ke
hasil optimum local atau sebaliknya jika semua kromosom dalam populasi
mempunyai fitness yang hampir sama, maka seleksi ini akan menjadi seleksi
yang bersifat acak (Kusumadewi, 2003).

b) Seleksi Ranking (Rank Selection)


Metode seleksi roda roulette akan memiliki masalah ketika terdapat
perbedaan fitness yang jauh. Sebagai contoh, jika fitness kromosom terbaik
adalah 90% dari semua roda roulette dapat menyebabkan kromosom yang
lain memiliki kesempatan yang sangat kecil untuk dapat terpilih. Seleksi
ranking terlebih dahulu merangking atau mengurutkan kromosom di dalam
populasi berdasarkan fitness-nya kemudian memberi nilai fitness baru
berdasarkan urutannya. Kromosom dengan fitness terburuk akan memiliki
fitness baru bernilai 1, terburuk kedua bernilai 2 dan seterusnya, sehingga
kromosom yang memiliki fitness terbaik akan memiliki nilai fitness N, dimana
N adalah jumlah kromosom di dalam populasi (Obitko, 1998).
Setelah proses pengurutan dan pemberian nilai fitness baru, setiap
kromosom akan memiliki kesempatan yang lebih adil untuk terpilih. Tetapi
metode ini dapat menyebabkan konvergensi menjadi lambat, karena
kromosom terbaik tidak terlalu berbeda dengan yang lainnya (Obitko, 1998).
5) Crossover

Crossover digunakan untuk membentuk offspring dari penggabungan


kromosom terpilih. Operator ini lebih dominan dibandingkan dengan operator
mutasi. Crossover dilakukan dengan harapan kromosom-kromosom baru akan
mempunyai bagian baik dari kromosom-kromosom lama dan tidak menutup
kemungkinan menjadi kromosom-kromosom yang lebih baik.
Probabilitas crossover menyatakan seberapa sering proses crossover akan
terjadi diantara 2 kromosom parent. Jika terjadi crossover, keturunan dibuat dari
bagian-bagian kromosom parent-nya, namun jika probabilitas crossover 100%
maka keseluruhan keturunan dibuat dengan crossover. Jika probabilitas crossover
0%, maka seluruh generasi baru dibuat dari salinan kromosom-kromosom dari
populasi lama. Meskipun crossover bertujuan untuk mendapatkan kromosom yang
memiliki bagian baik dari parent-nya atau bajkan menjadi lebih baik. Ada baiknya
juga jika kita membiarkan beberapa bagian dari populasi untuk bertahan ke
generasi berikutnya. Dari hasil penelitian yang dilakukan oleh praktisi Algoritma
Genetika terbukti bahwa angka probabilitas crossover sebaiknya cukup tinggi,
yaitu antara 80% sampai 95% untuk memberikan hasil yang baik. Untuk beberapa
masalah tertentu probabilitas crossover 60% memberikan hasil yang lebih baik
(Obitko, 1998).
Berikut ini akan dibahas beberapa jenis variasi crossover dalam Algoritma
Genetika sehubungan dengan jenis pengkodean kromosom yang digunakan.
a) Crossover untuk pengkodean biner
Pengkodean biner merupakan jenis pengkodean yang paling sederhana
sehingga banyak variasi operasi crossover dapat dilakukan. Berikut adalah
jenis crossover yang dilakukan pada laporan kuliah kerja praktek ini.
(1) Crossover satu titik (Single Point Crossover)
Proses crossover satu titik dimulai dengan pemilihan sebuah titik pada
barisan bit kromosom secara acak sebagai titik crossover. Kromosom baru
akan dibentuk dengan menyalin barisan bit parent pertama dari bit
pertama sampai titik crossover, sedangkan sisanya disalin dari parent
kedua (Obitko, 1998). Contoh single point crossover pada pengkodean
biner dapat dilihat pada tabel.

Tabel 2.5: Contoh crossover satu titik

Kromosom parent A

10101110110

Kromosom parent B

10110011010

Kromosom offspring

10101111010

(2) Crossover banyak titik (Multi Point Crossover)


Proses crossover banyak titik diawali dengan pemilihan sejumlah titik
crossover dari barisan bit kromosom secara acak. Kromosom baru akan
dibentuk dengan cara menyalin barisan bit kromosom diantara titik-titik
tersebut secara bergantian dari masing-masing parent (Kusumadewi,
2003). Contoh multi point crossover pada pengkodean biner dapat dilihat
pada tabel.
Tabel 2.6: Contoh crossover banyak titik

Kromosom parent A

10101110110101001

Kromosom parent B

10110011010101010

Kromosom offspring

10101111010101010

(3) Crossover seragam (Uniform Crossover)


Crossover seragam menghasilkan kromosom baru dengan cara
menyalin bit-bit secara acak dari kedua parent-nya (Obitko, 1998). Contoh
uniform crossover pada pengkodean biner dapat dilihat pada tabel.
Tabel 2.7: Contoh crossover seragam

Kromosom parent A

1110110111101101

Kromosom parent B

0011010111100010

Kromosom offspring

0010010111011111

(4) Crossover Aritmatik (Arithmetic Crossover)


Kromosom baru dihasilkan dari operasi aritmatika yang dilakukan
terhadap kedua parent-nya (Obitko, 1998). Contoh arithmetic crossover
pada pengkodean biner dapat dilihat pada tabel.
Tabel 2.8: Contoh crossover aritmatik
Kromosom parent A
11001011

Kromosom parent B

11011111

Kromosom offspring (and)

11001011

10

b) Crossover untuk pengkodean permutasi


Pada pengkodean permutasi, salah satu jenis crossover yang dapat
dipergunakan adalah crossover satu titik karena kesederhanaan prosesnya
dapat menjaga konsistensi urutan nilai pada kromosom. Kromosom baru akan
dibentuk dengan cara menyalin barisan bit parent pertama dari bit pertama
sampai titik crossover, sedangkan sisanya didapatkan dengan cara melihat
satu persatu niali pada parent kedua, jika belum ada pada kromosom
offspring, maka nilai tersebut ditambahkan (Obitko, 1998). Contoh single
parent crossover pada pengkodean permutasi dapat dilihat pada tabel.
Tabel 2.9: Contoh crossover untuk pengkodean permutasi

Kromosom parent A

123456789

Kromosom parent B

453687219

Kromosom offspring (and)

123456789

c) Crossover untuk pengkodean nilai


Semua metode crossover yang terdapat pada pengkodean biner dapat
diterapkan pada pengkodean nilai karena tidak perlu memperhatikan urutan
seperti pada pengkodean permutasi (Obitko, 1998).
6) Mutasi
Mutasi merupakan proses mengubah nilai dari satu atau beberapa gen dalam
suatu kromosom. Tujuannya adalah untuk membantu mempercepat terjadinya
perbedaan diantara semua kromosom dalam populasi sehingga pencarian dapat
menjelajahi seluruh ruang pencarian, tetapi mutasi tidak boleh terlalu sering
dilakukan karena akan membuat Algoritma Genetika berubah menjadi pencarian
acak. Proses mutasi dilakukan secara acak, sehingga tidak menjamin bahwa
setelah proses mutasi akan diperoleh kromosom dengan fitness yang lebih baik
dibandingkan dengan sebelum mutasi. Mutasi sering kali dipergunakan hanya saja
dengan probabilitas mutasi yang kecil.
Probabilitas mutasi menyatakan seberapa sering bagia-bagian kromosom akan
dimutasikan. Jika probabilitas mutasi, bagian kromosom yang terpilih akan diubah,
namun jika probabilitas mutasi 100%, semua kromosom yang diubah. Jika
probabilitas mutasi 0%, tidak ada yang diubah. Probabilitas mutasi dalam
Algoritma Genetika seharusnya diberi nilai yang kecil. Umumnya probabilitas
mutasi diset untuk mendapatkan rata-rata satu mutasi per kromosom, yaitu angka
atau allele =1/(panjang kromosom). Dari hasil penelitian yang sudah dilakukan
oleh praktisi Algoritma Genetikanya ternyata angka probabilitas terbaik antara
0.5% sampai 1%. Mutasi diperlukan untuk menjaga perbedaan kromosom dalam
populasi. Untuk menghindari terjadinya konvergensi premature (Obitko, 1998).
Proses regenerasi tak terbatas hanya proses rekombinasi antara kedua orang
tua saja. Dalam suatu populasi terdapat kemungkinan adanya penyimpangan
suatu gen. Penyimpangan gen seperti itu disebut dengan mutasi. Dalam Algoritma
Genetika, mutasi juga dapat terjadi. Lokasi terjadinya mutasi dipilih secara acak
dengan probabilitas mutasi. Walaupun probabilitasnya cukup kecil, namun mutasi
cukup dapat merubah sifat dari suatu individu atau kromosom.

11

Berikut adalah cara mutasi untuk pengkodean biner yang sering diterapkan
dalam Algoritma Genetika.
a) Mutasi untuk pengkodean biner
Mutasi dalam pengkodean biner merupakan operasi yang sangat
sederhana. Bit pada kromosom yang terpilih secara acak akan menggunakan
skema tertentu nilainya diinversi, 0 menjadi 1 atau sebaliknya, 1 menjadi 0
(Obitko, 1998). Contoh mutasi pada pengkodean biner dapat dilihat pada
tabel.
Tabel 2.10: Contoh mutasi untuk pengkodean biner
Kromosom sebelum mutasi
1101011110
Kromosom sesudah mutasi
1101001110
b) Mutasi untuk pengkodean permutasi
Proses muatasi pada pengkodean biner tidak dapat diterapkan pada
pengkodean permutasi karena konsistensi permutasi harus selalu
diperhatikan. Salah satu cara yang dapat dilakukan adalah memilih dua posisi
gen pada sebuah kromosom dan kemudian saling menukarkannya (Obitko,
1998). Contoh mutasi pada pengkodean permutasi dapat dilihat pada tabel.
Tabel 2.11: Contoh mutasi untuk pengkodean permutasi
Kromosom sebelum mutasi
123456789
Kromosom sesudah mutasi
123956784
c) Mutasi untuk pengkodean nilai
Salah satu bentuk proses mutasi pada pengkodean nilai adalah dengan
memilih sembarang posisi gen pada kromosom, kemudian ditambahkan atau
dikurangkan dengan suatu nilai kecil tertentu yang diambil secara acak
(Obitko, 1998). Contoh mutasi pada pengkodean nilai dapat dilihat pada tabel.
Tabel 2.12: Contoh mutasi untuk pengkodean nilai
Kromosom sebelum mutasi
1.29, 5.68, 2.86, 4.11, 5.55
Kromosom sesudah mutasi (-0.13)
1.29, 5.68, 2.73, 4.22, 5.55
7) Update generasi
Update generasi merupakan pemilihan kromosom untuk membentuk generasi
selanjutnya. Ada dua macam bentuk prosedur untuk membentuk populasi
selanjutnya (Gen dan Cheng, 1997)
a) Elitism
Dalam metode ini, kromosom yang diambil untuk dipakai pada generasi
berikutnya sesuai dengan banyaknya kromosom awal dan mempertahankan
individu dengan fitness terbaik. Kromosom-kromosom tersebut didapat dari
penggabungan kromosom parent awal ditambah dengan kromosom hasil
mutasi. Lalu dipilih kromosom-kromosom dengan fitness tertinggi.
8) Replace
Untuk menjaga agar ukuran populasi tetap sama seperti ukuran populasi awal,
maka harus ada kromosom yang mati untuk memberikan kesempatan kromosom
yang baru tetap hidup. Namun tidak munutup kemungkinan kromosom yang baru

12

tersebut tidak dapat bertahan Karena kualitasnya yang buruk. Oleh karena itu
dibutuhkan skema replacement agar kromosom terbaiklah yang bertahan. Skema
replacement itu disebut dengan replace the worst.
Saat kromosom anak tercipta, nilai fitness kromosom anak akan dievaluasi.
Setelah itu, nilai fitness kromsom anak akan dievaluasi. Setelah itu, nilai fitness
tersebut akan dibandingkan dengan nilai fitness kromsom-kromosom lain dalam
anggota populasi. Bila terdapat beberapa kromosom yang memiliki nilai fitness
yang lebih buruk dari nilai fitness kromosom anak, maka kromosom yang memiliki
nilai fitness terburuk akan digantikan dengan kromosom anak. Sebaliknya, jika
kromosom anak memiliki nilai fitness yang lebih buruk dari nilai fitness semua
kromosom anggota populasi, maka kromosom anak tersebut tidak perlu
dipertahankan.
9) Pengujian Terhadap Kondisi Akhir
Saat proses regenerasi selesai dilakukan, maka populasi pada generasi
tersebut akan diuji apakah sudah memenuhi kondisi akhir. Kondisi akhir bisa
berupa jumlah generasi, waktu proses, variasi individu-individu dalam populasi
tersebut sudah lebih kecil dari suatu nilai tertentu, atau kriteria lainya (Suyanto,
2008).
d. Langkah-langkah Algoritma Genetika
Proses Algoritma Genetika berjalan sesuai dengan langkah-langkah sebagai
berikut (Gen, 1997):
1) Inisialisasi populasi awal secara acak.
2) Evaluasi populasi.
3) Jika kondisi berhenti tidak dipenuhi, maka lakukan prosedur berikut:
a) Seleksi kromosom orang tua.
b) Rekombinasi kromosom.
c) Mutasi kromosom.
d) Evaluasi kromosom
e) Evaluasi kromosom baru.
f) Penggantian populasi lama dengan populasi baru.
g) Kembali ke langkah 3.
Langkah-langkah diatas secara umum dapat digambarkan dengan flowchart
sebagai berikut.

13

Gambar 2.2: Flowchart langkah-langkah Algoritma Genetika


2. Travelling Salesman Problem (TSP)
Penyelesaian dari kasus laporan ini ialah hampir mirip dengan penggunaan metode
Travelling Salesman Problem (TSP) di dalam agoritmanya.
a. Definisi Travelling Salesman Problem (TSP)
(Wisnubhadra, 1997), deskripsi masalah Traveling Salesman Problem (TSP)
merupakan persoalan klasik optimasi yang cukup sederhana, yakni pengantaran atau
perjalanan yang dimulai dan berakhir pada konsumen tertentu. Perjalanan ke setiap

14

konsumen harus dilakukan satu kali. Hasil yang diinginkan adalah perjalanan dengan
jarak tempuh yang terpendek (minimal). (Smith, 1982), Traveling Salesman Problem
(TSP) dapat dengan mudah diubah dalam bentuk network problem dengan formulasi
yang serupa dengan model rute terpendek. Konsumen yang dikunjungi
diidentifikasikan sebagai simpul-simpul (nodes) dari jaringan. (Rabi, 2002), Persoalan
Travelling Salesman (TSP) adalah persoalan optimasi yang dinyatakan sebagai mencari
rute perjalanan termurah untuk mengunjungi konsumen, dimana setiap konsumen
kunjungi secara pasti satu kali.
Travelling Salesman problem (TSP) merupakan masalah kombinasi optimasi dalam
operasi penelitian dan teori ilmu komputer. Dengan daftar kota-kota yang akan
dikunjungi, cara ini sangat tepat untuk menemukan dengan sesingkat mungkin setiap
kota yang akan dikunjungi dengan waktu, dan penggunaan biaya yang tepat, dan
efisien.
Masalah ini pertama kali dirumuskan sebagai masalah matematika pada tahun
1930 dan merupakan salah satu masalah yang paling intensif dalam mempelajari
masalah optimasi, dan digunakan sebagai patokan bagi banyak metode optimasi dalam
jumlah besar dengan cara yang tepat, dan metode yang mudah untuk diketahui,
sehingga beberapa kasus dengan puluhan ribu kota dapat diselesaikan dengan baik.
TSP memiliki beberapa aplikasi, seperti perencanaan, logistik, dan manufaktur. Dalam
aplikasi ini, TSP merupakan konsep jarak perjalanan waktu atau biaya. Dalam banyak
aplikasi, dapat muncul kendala seperti keterbatasan sumber daya atau waktu.
Travelling Salesman Problem (TSP) adalah problem untuk mengoptimasi dan
menemukan perjalanan (tour) yang paling terpendek. TSP adalah problem untuk
menentukan urutan dari sejumlah kota yang harus dilalui oleh salesman, setiap kota
hanya boleh dilalui satu kali dalam perjalanannya, dan perjalanan tersebut harus
berakhir pada kota keberangkatannya dimana salesman tersebut memulai
perjalanannya, dengan jarak antara setiap kota satu dengan kota lainnya sudah
diketahui. Salesman tersebut harus meminimalkan pengeluaran biaya, dan jarak yang
harus ditempuh untuk perjalanannya tersebut.
TSP ini dapat dilakukan secara sederhana dengan beberapa metode algoritma.
TSP adalah salah satu contoh permasalahan kombinatorial dengan kemungkinan
penyelesaian yang sangat banyak.
b. Algoritma TSP
Algoritma exhaustive, yaitu dengan mencari semua kombinasi yang mungkin
terjadi, kemudian memilih kombinasi perjalanan dengan jarak terdekat, algoritma ini
mempunyai kompleksitas n!/2n.
Algoritma exhaustive search untuk persoalan TSP :
1) List semua sirkuit Hamilton dari graf lengkap dengan n buah simpul.
2) Hitung (evaluasi) bobot setiap sirkuit Hamilton yang ditemukan pada langkah 1.
3) Pilih sirkuit Hamilton yang mempunyai bobot paling terkecil.
c. Implementasi TSP pada kota
1) TSP Dengan 3 Kota.
TSP dengan 3 kota tidak perlu diselesaikan menggunakan komputer. TSP
dengan 3 kota (1, 2, 3) hanya mempunyai satu kemungkinan seperti gambar Di
bawah ini :

15

Gambar 2.3: Contoh graf TSP dengan 3 kota


2) TSP Dengan 4 Kota.

Gambar 2.4: Contoh graf TSP dengan 4 kota


Graf di atas memiliki 4!/2(4) = 3 sirkuit Hamilton Misalkan simpul a adalah
kota tempat dimulainya perjalanan (starting city). Enumerasikan semua sirkuit
hamilton sebagai berikut :
I1 = (a, b, c, d, a) atau (a, d, c, b, a) ==> panjang = 10 + 12 + 8 + 15 = 45
I2 = (a, c, d, b, a) atau (a, b, d, c, a) ==> panjang = 12 + 5 + 9 + 15 = 41
I3 = (a, c, b, d, a) atau (a, d, b, c, a) ==> panjang = 10 + 5 + 9 + 8 = 32

Gambar 2.5: Contoh sirkuit Hamilton pada graf TSP dengan 4 kota
Jadi, sirkuit Hamilton terpendek adalah I3 = (a, c, b, d, a) atau (a, d, b, c, a)
dengan panjang sirkuit = 10 + 5 + 9 + 8 = 32.
3) TSP Dengan 5 Kota.

16

Gambar 2.5: Contoh graf TSP dengan 5 kota


Graf di atas memiliki 5!/2(5) = 12 sirkuit Hamilton Misalkan simpul a adalah
kota tempat dimulainya perjalanan (starting city). List semua sirkuit hamilton
sebagai berikut :
I1 = (1, 2, 3, 4, 5,1) atau (1, 5, 4, 3, 2,1)
I2 = (1,2,5,4,3,1) atau (1,3,4,5,2,1)
I3 = (1,2,3,5,4,1) atau (1,4,5,3,2,1 )
:
:
:
I12 =

Gambar 2.6: Contoh banyak graf TSP dengan 5 kota


TSP dengan 5 kota mulai perlu diselesaikan menggunakan komputer. Teknik
yang dipakai bisa berupa mencoba semua kemungkinan dan dibandingkan
jaraknya untuk memperoleh jarak paling pendek.
4) TSP Dengan N Kota.
TSP dengan n kota (1, 2, 3, 4, 5,, n) mempunyai n ! / 2n kemungkinan. TSP
dengan 15 kota mempunyai 15 ! / (15) atau 4,3589 x 1010 kemungkinan. Metode
pencarian satu-satu memerlukan waktu yang sangat lama.
TSP dengan 20 kota mempunyai 19 ! / 2 atau 6,08 x 1016 kemungkinan, suatu
jumlah yang sangat besar. Dengan menganggap bahwa komputer mampu
menyelesaikan 1 Giga (109) proses per-detik maka untuk mencari semua solusi
diperlukan 6,08 x 107 detik atau 1,69 x 104 jam atau 704 hari. Waktu yang sangat
lama.

17

3. Referensi Ilmiah
a. Suryarasmi, Anindita 2009, Aplikasi Pencarian Rute Terpendek Jalur Trans Jogja
Dengan Algoritma Genetika, Yogyakarta, Universitas Gadjah Mada.
b. Widodo, Agus Wahyu, & Mahmudy, Wayan Firdaus 2010, Penerapan Algoritma
Genetika Pada System Rekomendasi Wisata Kuliner, Malang, Universitas Brawijaya.
c. Baharudin, Azmi, Shiddiqi, A Mazharudin, Pratomo, Baskoro Adi, Travelling Salesman
Problem Menggunakan Algoritma Genetika Via GPS Berbasis Android, Surabaya,
Institute Teknologi Sepuluh Nopember.
d. Indrianingsih, Yuliani, Algoritma Genetic Untuk Menyelesaikan Masalah Optimasi
Fungsi Berkendala Dengan Pengkodean Bilangan Bulat , Sekolah Tinggi Teknologi
Adisutjipto.
e. Santoso, I Silviana, et. al. 2014, Pengoptimalan Anggaran Untuk Memenuhi Kebutuhan
Berdasarkan Prioritas Dengan Algoritma Genetika, Yogyakarta, Universitas Gadjah
Mada.

BAB III
ANALISIS PERMASALAHAN dan PERANCANGAN PROGRAM
1. Analisis Masalah dan Solusi
a. Identifikasi Masalah
Mayoritas masyarakat zaman sekarang mempunyai waktu luang yang sangat
terbatas untuk melakukan liburan seperti berkeliling tempat-tempat wisata di Jakarta.
Belum lagi minimnya informasi mengenai harga, rating dan waktu yang harus
ditempuh untuk menuju ke tempat wisatanya.
Dengan permasalahan tersebut maka masyarakat membutuhkan solusi untuk
mengoptimalkan waktu luang mereka menjadi lebih efisien.
b. Strategi Penyelesaian
Untuk menangani permasalahan diatas, maka digunakanlah sebuah web
application dengan menggunakan Algoritma Genetika didalamnya yang dapat
membantu dalam mengoptimalkan waktu luang masyarakat agar lebih effisien.
2. Perancangan Sistem
a. Gambaran Umum Sistem
Sesuai dengan analisis sistem, maka didapatkan gambaran bahwa aplikasi
membutuhkan masukan berupa waktu yang ingin ditempuh, estimasi waktu perwisata
dan input generasinya. Sedangkan keluarannya yang diberikan oleh aplikasi adalah
jumlah dan nama wisata yang dapat dikunjungi dan biaya yang seminimal mungkin.
Untuk mendapatkan perekomendasian tempat wisata, aplikasi menggunakan
pendekatan Algoritma Genetika dengan parameter berupa jumlah wisata, biaya dan
rating.
b. Algoritma Genetika Pada Sistem
1) Fungsi obyektif
Algoritma Genetika pada sistem memiliki tujuan untuk merekomendasikan
tempat wisata dengan waktu tertentu. Jadi fungsi obyektif pada sistem ini adalah
mencari waktu yang sesuai dengan keinginan user dari waktu perwisata yang ada.
Dari fungsi obyektif pada rumus dapat disimpulkan bahwa nilai bobot dapat
dihitung dengan membagikan biaya dengan waktu dan rating.
=

Biaya
Jumlah Wisata +

Sehingga nilai fitness dapat dirumuskan dengan :


=
Keterangan :
W = Bobot
F = Fitness

1
W

2) Pengkodean
Sistem rekomendasi tempat wisata diharapkan memberikan hasil keluaran
berupa nama nama tempat wisata yang dapat dikunjungi dengan waktu tertentu,

18

19

yang berarti solusi yang diberikan adalah lamanya waktu dari titik awal ke wisata
dan wisata yang satu dengan wisata yang lainnya. Jenis pengkodean yang paling
tepat untuk jenis solusi seperti itu adalah pengkodean biner.
Dalam kromosom dengan pengkodean biner, setiap locus berisi suatu nilai (1)
atau tidak (0) yang mewakili tempat wisata tertentu. Locus urutan pertama bisa
saja memiliki nilai 1 yang artinya waktu wisata yang pertama memenuhi waktu
yang di input user. Jika pada locus yang kedua memiliki nilai 0 maka waktu wisata
yang kedua tidak memenuhi waktu yang diinput user atau lewat batas dari waktu
yang ditentukan, sehingga hanya locus yang bernilai 1 yang akan di ambil untuk
menentukan tempat wisata yang akan dikunjungi dengan waktu tertentu.

Gambar 3.1: Kromosom dengan Pengkodean Biner


Dari gambar diatas, dapat disimpulkan bahwa tempat wisata yang diberikan
adalah 1-0-1-1-0-0. Yang berarti tempat wisata pertama diambil, tempat wisata
kedua tidak diambil, tempat wisata ketiga diambil, tempat wisata keempat diambil,
tempat wisata kelima tidak diambil dan tempat wisata keenam tidak diambil.
Diambil karena mencukup waktu yang diinputkan user dan tidak diambil karena
waktunya melewati batas waktu yang telah diinputkan user.
3) Inisialisasi
Inisalisasi awal akan dilakukan untuk menciptakan sejumlah kromosom secara
acak sejumlah dengan ukuran tempat wisata yang ada di database.

1. Lakukan perulangan sejumlah ukuran data wisata di database{


2.
Membuat angka random [0,1] seukuran jumlah data wisata di
database
3.
Memperbaiki kromosom
4.
Mengevaluasi kromosom
5. }
Dari algoritma diatas, dapat dilihat bahwa proses inisialisasi akan dimulai
dengan membangkitkan angka random (0,1) sejumlah ukuran data wisata di
database, kemudian kromosom yang tercipta dari angka random tersebut
kemudian diperbaiki dan dievaluasi.
4) Perbaikan Kromosom
Algoritma Genetika yang diaplikasikan pada sistem memiliki batasan
(constraint) berupa waktu masing-masing dari titik awal ke wisata satu lalu ke
wisata yang lainnya. Sehingga bila terdapat suatu kromosom yang locus
pertamanya melebihi waktu yang ditentukan user, maka locus tersebut harus
diperbaiki (repairing strategy). Selain itu, diperlukan pengecekan pada setiap gen
yang sudah diperbaiki apakan benar sudah kurang dari waktu yang diinput. Bila
semua kromosom telah melakukan perbaikan, maka baru dilakukan proses
evaluasi kromosom.

20

Dari algoritma di bawah ini, dapat dilihat bahwa proses perbaikan kromosom
dimulai dengan memeriksa gen pada locus pertama yang bernilai kurang lebih
sama waktu, selanjutnya mencari gen tempat wisata yang waktunya lebih kurang
sama waktu, jika sudah ditemukan maka menukar gen tersebut dengan gen yang
lebih kurang sama waktu. Setelah itu diperiksa kromosom apakah lebih kecil sama
waktu jika tidak cari mencari gen tempat wisata yang waktunya lebih kurang sama
waktu, jika sudah ditemukan maka menukar gen tersebut dengan gen yang lebih
kurang waktu.

1. Jika nilai dari gen locus pertama < waktu {


2.
Cari gen berdasarkan waktu tempat wisata yang nilainya < waktu ;
3.
Tukar gen tempat wisata dengan gen yang memiliki nilai < waktu;
4. }
5. Lakukan perulangan sejumlah ukuran data wisata didatabase{
6.
Cek apakah setiap gen kromosom tersebut nilainya < waktu;
7.
Jika tidak {
8.
Cari gen berdasarkan waktu tempat wisata yang nilainya < waktu ;
9.
Tukar gen tempat wisata dengan gen yang memiliki nilai < waktu;
10.
}
11. }
5) Evaluasi
Evaluasi dilakukan dengan menghitung waktu antar titik awal ke wisata satu
dan wisata yang satu ke wisata yang lainnya. Karena tiap locus mewakili jumlah
wisata , maka perhitungan nilai fitness dilakukan dengan membagi biaya dengan
jumla wisata yang dijumlahkan dengan rating.

1. Waktu awal = 0;
2. Lakukan perulangan sejumlah ukuran data wisata didatabase{
3.
Cari jarak waktu antara titik awal ke wisata yang terdekat ;
4.
Jika waktu ditemukan {
5.
Tambahkan dengan waktu awal ;
6.
Jika menemukan gen yang memiliki nilai jarak waktu terdekat =
tempat wisata tujuan{
7.
Hentikan perhitungan;
8.
}
9.
}
10.
Jika waktu tidak ditemukan {
11.
Cari gen berdasarkan waktu tempat wisata yang nilainya < waktu ;
12.
Tukar gen tempat wisata dengan gen yang memiliki nilai < waktu;
13.
}
14. }
Algoritma di atas menjelaskan bahwa proses evaluasi melakukan pencarian
waktu antara gen titik awal ke wisata yang lainnya dan selanjutnya, kemudian
}
menambahkannya
ke waktu awal. Bila pencarian terhadap waktu tidak ditemukan,
maka mencari gen waktu tempat wisata yang nilainya lebih kecil sama waktu jika

21

ditemukan tukar gen tempat wisata dengan gen yang memiliki nilai lebih kecil
sama waktu.
6) Seleksi
Proses seleksi pada Algoritma Genetika system ini menggunakan seleksi
Roulette Wheel. Seleksi digunakan untuk memilih individu-individu mana saja yang
akan dipilih untuk proses pindah silang dan mutasi. Seleksi digunakan untuk
mendapatkan calon induk yang baik. Memilih induk yang baik didasarkan atas
hipotesis Induk yang baik akan menghasilkan keturunan yang baik. Semakin
tinggi nilai fitness suatu individu, semakin besar peluangnya untuk terpilih sebagai
calon induk. Pada kasus yang dibahas, metode yang kami gunakan adalah seleksi
dengan Roda Roulette (Roulette Wheel). Tahapan yang dilakukan seleksi Roulette
Wheel adalah:
1) Perhitungan nilai fitness (fk) dari masing-masing individu, dari individu
pertama hingga individu ke n.
2) Perhitungan total fitness (fk) semua individu.
3) Perhitungan probabilitas seleksi (pk) setiap individu, dimana pk = fkfk
4) Mengacak suatu bilangan 0 sampai 1 [0,1].
5) Memilih individu dimana bilangan random itu berada sebagai parent.
6) Lakukan langkah 4 5 sebanyak jumlah individu dalam populasi.

1. Lakukan perulangan sejumlah ukuran data wisata didatabase{


2.
Melakukan perhitungan Fitness dari masing masing individu, dari
individu pertama hingga individu ke-n;
3.
Menghitung total fitness dari semua indiividu;
4.
Menghitung probabilitas seleksi (pk) setiap individu, dimana pk =
fitness/ total fitness
5.
Mengacak bilangan o sampai 1 [0,1];
6.
Mengulang individu {
7.
Memilih individu dimana bilangan random itu berada sebagai
parent;
8.
}
9. }
7) Crossover

Corssover yang digunakan pada sistem ini yang crossover satu titik (Single
Point Crossover) dan menggunakan PC (probabilitas Corssover)= 0,7. Kromosom
yang diambil untuk crossover yaitu kromosom yang jumlah fitnessnya lebih kecil
sama dengan 0,7. Dimana kromosom tersebut akan diambil dan dikumpukan
untuk dikawin silangkan dengan cara crossover satu titik. Proses crossover satu
titik dimulai dengan pemilihan sebuah titik pada barisan bit kromosom secara acak
sebagai titik crossover. Kromosom baru akan dibentuk dengan menyalin barisan
bit parent pertama dari bit pertama sampai titik crossover, sedangkan sisanya
disalin dari parent kedua. Jika kromosom yang jumlah fitnessnya lebih besar 0,7
maka kromosom tersebut tidak akan dipili sebagai parent sehingga kromosom
tersebut tidak akan dilakukan proses crossover.

22

1. Lakukan perulangan sejumlah ukuran data wisata di database{


2.
Cari gen yang mempunyai nilai fitness < pc;
3.
Jika gen ditemukan maka {
4.
Lakukan gen dengan crossover satu titik;
5.
}
6. }
8) Mutasi
Mutasi yang digunakan dalam aplikasi ini adalah mutasi dengan pengkodean
biner dan PM = 0.02

1. Lakukan perulangan sejumlah ukuran data wisata di database{


2.
Menghitung jumlah populasi, genom dan pm;
3.
Mendapatkan jumlah titik yang akan dimutasi;
4.
Jika gen tempat wisata sekarang memiliki fitness < pm{
5.
Membuat angka random dari 0 atau 1;
6.
Menukar posisi gen yang memiliki angka random < pm diatas
dengan gen posisi hasil random gen [1, (maksimal gen)];
7.
}
8. }
Algoritma diatas menunjukkan proses mutasi yang diawali dengan
mengkalikan jumlah populasi dengan jumlah genom dikalikan dengan pm
(probabilitas mutasi). Jika sudah dihitungkan maka akan mendapatkan jumlah titik
yang akan dimutasi lalu membangkitkan nilai gen dari 0 atau 1 setelah itu
ditukarkan dengan titik yang akan dimutasi dimulai dari titik (1-maksimal gen).
9) Seleksi Feasible
Setelah mutasi dilakukan maka akan dilakukan seleksi feasible untuk
mengecek apakah hasil individu dari mutasi tersebut memiliki waktu yang lebih
besar dari waktu yang diinput dengan user atau tidak, jika iya maka kromosom
tersebut harus dibuang.

1. Lakukan perulangan sejumlah ukuran data wisata di database{


2.
Jika nilai dari gen locus pertama > waktu {
3.
Cari gen berdasarkan waktu tempat wisata yang nilainya > waktu ;
4.
Hapus locus;
5.
}
6.
Lakukan perulangan sejumlah ukuran data wisata di database{
7.
Cek apakah setiap gen kromosom tersebut nilainya > waktu;
8.
Jika iya {
9.
Cari gen berdasarkan waktu tempat wisata yang nilainya >
waktu ;
10.
Hapus kromosom;
11.
}
12. }
}

23

10) Update Generasi


Update generasi yang digunakan di aplikasi ini adalah menggunakan metode
elitism. Dimana akan diurutkan atau disorting berdasarkan jumlah fitness yang
paling tinggi. Jika sudah diurutkan maka individu yang memiliki nilai fitness yang
paling tinggi akan disimpan atau tampung untuk dimunculkan kembali dalam
generasi selanjutnya,

1. Lakukan perulangan sejumlah ukuran data wisata didatabase{


2.
Mengurutkan individu yang memliki jumlah fitness yang paling
tertinggi;
3.
Simpan kromosom yang paling tinggi;
4.
Jika generasi selanjutnya telah dilakukan {
5.
Munculkan kromosom tertinggi;
6.
}
7. }
Pada algoritma diatas, menunjukkan proses elitism yang diawali dengan
mengurutkan individu yang memiliki fitness tertinggi lalu disimpan, setelah itu
kromosom yang disimpan akan dimunculkan kembali untuk generasi selanjutnya.
3. Rancangan Basis Data
Dalam proses pembuatan aplikasi ini, dibutuhkan basis data yang berisikan semua data
yang dibutuhkan untuk menjalankan aplikasi. Berikut bentuk EER dan LRS dari database
yang dibutuhkan.
a. EERD (Enchanced Entity Relationship Diagram)
Enchanced Entity Relationship Diagram (EERD) ini berisi komponen-komponen
himpunan entitas dan himpunan relasi. Masing-masing dilengkapi dengan atributatribut yang mewakili seluruh data yang ada. Di bawah ini adalah gambar rancangan
ERD:

Gambar 3.2: Rancangan Enchanced Entity Relationship Diagram


b. Transformasi EER-Diagram ke LRS (Logical Record Structure)
Berdasarkan EER-Diagram pada Gambar 3.3 maka didapatkan hasil transformasi
EER-Diagram ke Logical Record Structure sebagai berikut:

24

Gambar 3.3: Rancangan Transformasi EER-Diagram ke LRS


c. LRS (Logical Record Structure)
Dari transformasi EER-Diagram ke LRS yang dijabarkan pada Gambar 3.4, maka
di hasilkan bentuk Logical Record Structure (LRS) untuk aplikasi yang diusulkan
sebagai berikut:

Gambar 3.4: Rancangan Logical Record Structure


d. Spesifikasi Basis Data
Berikut ini adalah struktur tabel yang digunakan dalam pembuatan database untuk
aplikasi ini :
1) Tabel Asal
Nama Tabel : asal
Media
: Harddisk
Primary Key : id_asal
Foreign Key : Tabel 3.1: Spesifikasi Tabel Asal

Field
id_asal
Tempat_asal

Type
Char
Varchar

Length
5
60

Keterangan
Nomor id tempat wisata asal.
Nama tempat wisata asal.

25

2) Tabel Kunjung
Nama Tabel : kunjung
Media
: Harddisk
Primary Key : id_asal
Foreign Key : id_tujuan
Tabel 3.2: Spesifikasi Tabel Kunjung

Field

Type

Length

id_asal
id_tujuan
Waktu

Char
Char
int

5
5
5

Jarak

Double

30

Keterangan
Nomor id tempat wisata asal.
Nomor id tempat wisata tujuan.
Banyaknya waktu yang harus
ditempuh dari tempat wisata
asal ke tempat wisata tujuan.
Jumlah jarak yang harus
ditempuh dari tempat wisata
asal ke tempat wisata tujuan.

3) Tabel Tujuan
Nama Tabel : tujuan
Media
: Harddisk
Primary Key : id_tujuan
Foreign Key : Tabel 3.3: Spesifikasi Tabel Tujuan

Field

Type

Length

id_tujuan

Char

tempat_tujuan

Varchar

60

Biaya

int

15

Rating

int

15

Alamat

text

255

Type
Lat

Varchar
float

255
10.6

Lng

float

10.6

Keterangan
Nomor id tempat wisata
tujuan.
Nama tempat wisata yang
dituju.
Jumlah biaya masuk tempat
wisata.
Jumlah rating dari tempat
wisata.
Informasi alamat tempat
wisata yang dituju.
Jenis dari tempat wisata.
Posisi lintang (latitude) dari
tempat wisata.
Posisi bujur (longitude) dari
tempat wisata.

26

4) Tabel Login
Nama Tabel :
Media
:
Primary Key :
Foreign Key :

login

Harddisk
id
-

Tabel 3.4: Spesifikasi Tabel Login

Field
id

username
Password

Type
int
Varchar
Varchar

Length
4
255
255

Keterangan
Nomor id admin.
Nama username admin.
Password admin

4. Rancangan Layar
Rancangan Layar yang diberikan disini merupakan representasi dari aplikasi yang
dibuat penulis. Rancangan layar disini memberikan bentuk tampilan dari program yang
dibuat sehingga dapat memberikan laporan yang memudahkan dalam penggunaannya.
Tampilan layar yang baik akan memberikan kemudahan yang sangat diperlukan agar
pemakai merasa nyaman dan tidak jenuh saat menjalankan aplikasi.
a. Frontend
1) Rancangan Layar Menu Utama
Gambar 3.4 merupakan rancangan layar Home, dimana terdapat judul aplikasi
program ini, yaitu Rekomendasi Tempat Wisata dan logo Universitas Budi Luhur.

Gambar 3.5: Rancangan Layar Menu Home

27

2) Rancangan Layar Menu Rekomendasi Tempat Wisata


Gambar Di bawah ini merupakan rancangan layar menu Rekomendasi Tempat
Wisata, dimana terdapat 3 inputan, yaitu Input Waktu, Estimasi Waktu Perwisata
dan Input Generasi. Yang ketika ditekan tombol Generate, maka akan muncul
tabel hasil Algoritma Genetikanya sebagai berikut.

Gambar 3.6: Rancangan Layar Menu Rekomendasi Tempat Wisata


3) Rancangan Layar Menu Daftar Tempat Wisata
Pada menu Daftar Tempat Wisata terdapat gambar peta wilayah Jakarta yang
diambil dari google maps. Peta tersebut berisikan tempat-tempat rekreasi,
museum, pasar tradisional, tempat berbelanja dan kuliner di Jakarta. Jika ingin
menampilkan salah satu tempat rekreasi saja, maka hanya tinggal menceklis tipe
tempat yang dipilih saja. Lalu Di bawahnya terdapat tabel yang berisikan daftar
tempat wisata yang sudah diinput.

28

Gambar 3.7: Rancangan Layar Menu Daftar Tempat Wisata


4) Rancangan Layar Menu Help
Pada menu Help, terdapat form yang berisikan instruksi-instruksi penggunaan
program aplikasi rekomendasi tempat wisata.

Gambar 3.8: Rancangan Layar Menu Help


5) Rancangan Layar Menu About
Pada menu About, terdapat menu dropdown yang berisikan Tentang Program,
Credit dan License.

29

a) Rancangan Layar Tentang Program


Pada Menu Tentang Program akan ditampilkan keterangan dan deskripsi
mengenai program rekomendasi tempat wisata di Jakarta.

Gambar 3.9: Rancangan Layar Menu Tentang Program


Rancangan Layar Credit
Pada Menu Credit akan ditampilkan informasi pribadi dari pembuat
program seperti pada gambar.

Gambar 3.10: Rancangan Layar Menu Credit

30

Rancangan Layar License


Pada Menu License akan ditampilkan sebuah kalimat pernyataan yang
menjelaskan bahwa program ini adalah free software.

Gambar 3.11: Rancangan Layar Menu License


b. Backend
1) Rancangan Layar Menu Login
Jika admin ingin mengakses backend dari program ini, maka admin harus
melakukan pengisian username dan password pada textfield yang tersedia.
Setelah itu terdapat tombol Login untuk melanjutkan masuk ke backend.
Rancangan layar Menu Login dapat dilihat pada gambar di bawah ini.

Gambar 3.12: Rancangan Layar Menu Login

31

2) Rancangan Layar Menu Utama Admin


Gambar di bawah merupakan rancangan layar Home Admin, dimana terdapat
judul aplikasi program ini, yaitu Rekomendasi Tempat Wisata dan logo Universitas
Budi Luhur.

Gambar 3.13: Rancangan Layar Menu Home Admin


3) Rancangan Layar Menu Master
Pada menu Master, terdapat menu dropdown yang berisikan sub menu Master
Tempat Asal, Master Tempat Tujuan, Master Tempat Kunjung.
a) Rancangan Layar Master Tempat Asal
Pada Menu Master Tempat Asal akan ditampilkan 2 buah textbox yang
harus diinput untuk melakukan proses simpan, batal, ubah, dan hapus. Dan di
bawahnya juga langsung terlihat list tempat asal wisata.

32

Gambar 3.14: Rancangan Layar Menu Master Tempat Asal


b) Rancangan Layar Master Tempat Tujuan
Pada Menu Master Tempat Tujuan hampir sama dengan menu daftar
tempat wisata, namun bedanya adalah pada peta dapat ditambahkan wisata
dengan cara klik kanan pada peta sehingga muncul textbox yang harus diisi
untuk menyimpan data tempat tujuan.

33

Gambar 3.15: Rancangan Layar Menu Master Tempat Tujuan


c) Rancangan Layar Master Tempat Kunjung
Pada Menu Master Tempat Kunjung akan ditampilkan 4 buah textbox yang
harus diinput untuk melakukan proses simpan, batal, ubah, dan hapus. Dan di
bawahnya juga langsung terlihat list tempat kunjung wisata.

Gambar 3.16: Rancangan Layar Menu Master Tempat Kunjung

34

5. Flowchart Aplikasi Rekomendasi Tempat Wisata


Beberapa urutan-urutan proses yang harus dilalui digambarkan dalam bentuk
flowchart. Di bawah ini akan digambarkan beberapa flowchart untuk masing-masing proses
pada aplikasi.
a. Frontend
1) Flowchart Form Menu Utama
Flowchart di bawah ini merupakan gambaran alur proses dari menu utama
atau Home. Proses ini akan terus berjalan selama menu utama tampil di layar.

Gambar 3.17: Flowchart Menu Utama


2) Flowchart Form Rekomendasi Tempat Wisata
Flowchart berikut merupakan gambaran alur proses rekomendasi tempat
wisata. User sebelumnya harus melakukan input waktu yang dimiliki user, estimasi
waktu di tempat wisatanya dan jumlah generasi yang harus diisi untuk melakukan
proses Algoritma Genetikanya. Setelah itu tekan tombol simpan maka akan
dilakukan proses simpan, yaitu proses algoritma genetikanya. Setelah proses
generate dikerjakan maka akan menampilkan hasil proses Algoritma Genetikanya
dan form rekomendasi tempat wisata akan dibersihkan. Begitu pula jika user
menekan tombol cancel, maka form akan dibersihkan juga.

35

Gambar 3.18: Flowchart Menu Rekomendasi Tempat Wisata


3) Flowchart Form Menu Daftar Tempat Wisata
Flowchart di bawah ini merupakan gambaran alur proses dari menu daftar
tempat wisata. Ketika menjalankan menu daftar tempat wisata, maka map atau
peta daerah Jakarta akan muncul beserta icon-icon tempat-tempat rekreasi dan
list tabel tempat wisatanya. Untuk lebih jelasnya, alur proses daftar tempat wisata
bisa dilihat pada gambar:

36

Gambar 3.19: Flowchart Menu Daftar Tempat Wisata

37

4) Flowchart Menu Help


Flowchart berikut merupakan gambaran alur dari menu Help yang berisikan
berbagai instruksi mengenai cara penggunaan program.

Gambar 3.20: Flowchart Menu Help


5) Flowchart Form Menu About
Flowchart berikut merupakan gambaran alur dari menu About yang berisikan
berbagai informasi mengenai program, pembuat program dan lisensi program.
Untuk lebih jelasnya, dapat dilihat pada gambar:

38

Gambar 3.21: Flowchart Menu About


b. Backend
1) Flowchart Proses Login
Flowchart berikut merupakan gambaran alur proses login dari program
rekomendasi tempat wisata. Admin sebelumnya harus melakukan login terlebih
dahulu dengan memasukkan username dan password jika ingin masuk ke backend
dari program. Apabila login benar, maka akan tampil menu utama admin

39

(backend), namun apabila login gagal akan tampil sebuah pesan Username dan
Password tidak valid.

Gambar 3.22: Flowchart Proses Login


2) Flowchart Menu Utama Admin
Flowchart di bawah ini merupakan gambaran alur proses dari menu utama
admin atau Home. Proses ini akan terus berjalan selama menu utama tampil di
layar.

40

Gambar 3.23: Flowchart Form Menu Utama Admin


3) Flowchart Form Menu Daftar Tempat Wisata
Flowchart di bawah ini merupakan gambaran alur proses dari menu daftar
tempat wisata. Ketika menjalankan menu daftar tempat wisata, maka map atau
peta daerah Jakarta akan muncul beserta icon-icon tempat-tempat rekreasi dan
list tabel tempat wisatanya. Untuk lebih jelasnya, alur proses daftar tempat wisata
bisa dilihat pada gambar:

41

Gambar 3.24: Flowchart Form Daftar Tempat Wisata Admin


4) Flowchart Menu Master
Flowchart berikut merupakan gambaran alur dari menu Master yang berisikan
sub menu dari master tempat asal, master tempat tujuan dan master tempat
kunjung.

42

a) Flowchart Form Menu Master Tempat Asal


Flowchart di bawah ini merupakan gambaran alur dari menu master
tempat asal. Untuk lebih jelasnya dapat dilihat pada gambar:

Gambar 3.25: Flowchart Form Master Tempat Asal

43

b) Flowchart Form Menu Master Tempat Tujuan


Flowchart di bawah ini merupakan gambaran alur dari menu master
tempat tujuan. Untuk lebih jelasnya dapat dilihat pada gambar:

Gambar 3.26: Flowchart Form Master Tempat Tujuan

44

c) Flowchart Form Menu Master Tempat Kunjung


Flowchart di bawah ini merupakan gambaran alur dari menu master
tempat kunjung. Untuk lebih jelasnya dapat dilihat pada gambar:

Gambar 3.27: Flowchart Form Master Tempat Kunjung

45

6. Algoritma Aplikasi Rekomendasi Tempat Wisata


a. Frontend
1) Algoritma Menu Utama
Algoritma ini menjelaskan bagaimana proses pada Menu Utama atau Home.
Pada proses ini user dapat menampilkan form-form dari menu-menu yang ada.
1.
2.
3.
4.
5.
6.
7.

8.
9.

Tampilkan Menu Utama


Input Pilih
If Pilih = Rekomendasi Tempat Wisata Then
Tampilkan form menu Rekomendasi Tempat Wisata
Else If Pilih = Daftar Tempat Wisata Then
Tampilkan form menu Daftar Tempat Wisata
Else If Pilih = Help Then
Tampilkan form menu Help
Else If Pilih = About Then
Keluar menu dropdown About
Else If Pilih = Tentang Program Then
Tampilkan form menu Tentang Program
Else If Pilih = Credit Then
Tampilkan form menu Credit
Else If Pilih = License Then
Tampilkan form menu License

10.
11.
12.
13.
14.
15.
16.
17. End If

2) Algoritma Proses Rekomendasi Tempat Wisata


Algoritma berikut menjelaskan proses rekomendasi tempat wisata pada saat
menu rekomendasi tempat wisata dipilih.
1.
2.
3.
4.
5.
6.
7.
8.
9.

Tampilkan Form Rekomendasi Tempat Wisata


Input Pilih Rekomendasi Tempat Wisata
Input Waktu, Estimasi Waktu Pariwisata dan Jumlah Generasi
If Pilih = Generate Then
Lakukan proses Algoritma Genetika
Reset Form
Tampilkan hasil Algoritma Genetika
Else If Pilih = Cancel Then
Reset Form
10. End If
3) Algoritma Proses Daftar Tempat Wisata
Algoritma berikut menjelaskan proses Daftar tempat wisata pada saat menu
daftar tempat wisata dipilih.

46

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

Tampilkan Form Daftar Tempat Wisata


Tampilkan Map
Tampilkan List Daftar Tempat Wisata
Input Pilih
If Pilih = Recreation Then
Muncul icon tempat rekreasi pada peta
If Pilih = Museum Then
Muncul icon museum pada peta
Else If Pilih = Traditional Market Then
Muncul icon tempat pasar tradisional pada peta
Else If Pilih = shopping center Then
Muncul icon tempat berbelanja pada peta
Else If Pilih = Culinary Then
Muncul icon tempat makan kuliner pada peta
15. End If
4) Algoritma Proses Menu Help
Algoritma berikut menjelaskan proses munculnya menu Help pada saat menu
Help dipilih.
35. Tampilkan Menu Help
5) Algoritma Menu About
Algoritma berikut menjelaskan proses menu About. Jadi pada saat user
menekan menu About, akan keluar sub menu dropdown yang berisikan sub menu
Tentang Program, Credit dan License.
1.
2.
3.
4.
5.
6.
7.
8.

Tampilkan Menu About


Input Pilih
If Pilih = Tentang Program Then
Tampilkan form Tentang Program
Else If Pilih = Credit Then
Tampilkan form Credit
Else If Pilih = License Then
Tampilkan form License
9. End If
b. Backend
1) Algoritma Proses Login
Algoritma berikut menjelaskan proses awal pada saat aplikasi pada admin
mulai dijalankan.

47

5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

Tampilkan form Menu Login

Input Username, Password

Input Pilih
If Pilih = Login Then
Cek Username dan Password pada tabel login
If data sesuai Then
Tampilkan Menu Utama Admin
Else
Tampilkan pesan Username dan Password tidak valid
Kembali ke baris 1
End If
End If

2) Algoritma Menu Utama


Algoritma ini menjelaskan bagaimana proses pada Menu Utama Admin atau
Home. Pada proses ini admin dapat menampilkan form-form dari menu-menu
yang ada.
1.
2.
3.
4.
5.

6.
7.

8.
9.

10.
11.

Tampilkan Menu Utama Admin


Input Pilih
If Pilih = Daftar Tempat Wisata Then
Tampilkan form menu Daftar Tempat Wisata
Else If Pilih = Master Then
Keluar menu dropdown Master
Else If Pilih = Master Tempat Asal Then
Tampilkan form menu Master Tempat Asal
Else If Pilih = Master Tempat Tujuan Then
Tampilkan form menu Master Tempat Tujuan
Else If Pilih = Master Tempat Kunjung Then
Tampilkan form menu Master Tempat Kunjung
Else If Pilih = Logout Then
Tampilkan form menu Login

12.
13.
14.
15. End If

3) Algoritma Proses Daftar Tempat Wisata


Algoritma berikut menjelaskan proses Daftar tempat wisata pada saat menu
daftar tempat wisata dipilih.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Tampilkan Form Daftar Tempat Wisata


Tampilkan Map
Tampilkan List Daftar Tempat Wisata
Input Pilih
If Pilih = Recreation Then
Muncul icon tempat rekreasi pada peta
If Pilih = Museum Then
Muncul icon museum pada peta
Else If Pilih = Traditional Market Then
Muncul icon tempat pasar tradisional pada peta

48

11. Else If Pilih = shopping center Then


12.
Muncul icon tempat berbelanja pada peta
13. Else If Pilih = Culinary Then
14.
Muncul icon tempat makan kuliner pada peta
15. End If
4) Algoritma Menu Master
Algoritma berikut menjelaskan proses menu Master. Jadi pada saat admin
menekan menu Master, akan keluar sub menu dropdown yang berisikan sub menu
Master Tempat Asal, Master Tempat Tujuan dan Master Tempat Kunjung.
a) Algoritma Menu Master Tempat Asal
1. Tampilkan Form Master Tempat Asal
2. Input Id_asal dan Tempat_Asal
3. Input Pilih
4. If Pilih = Save Then
5.
Cek data tidak kosong pada form
6.
If True Then
7.
Lakukan proses simpan
8.
Else
9.
Tampilkan pesan Data Harus Diisi
10.
Kembali ke baris 1
11.
End If
12. Else If pilih = Delete Then
13.
Cek data tidak kosong pada form
14.
If True Then
15.
Lakukan proses Hapus
16.
Else
17.
Tampilkan pesan Data Harus Diisi
18.
Kembali ke baris 1
19.
End If
20. Else If pilih = Update Then
21.
Cek data tidak kosong pada form
22.
If True Then
23.
Lakukan proses Ubah
24.
Else
25.
Tampilkan pesan Data Harus Diisi
26.
Kembali ke baris 1
27.
End If
28. Else If pilih = Cancel Then
29.
Reset Form
30. End If

49

b) Algoritma Menu Master Tempat Tujuan


1. Tampilkan Form Master Tempat Tujuan
2. Tampilkan Map
3. Input Nama Wisata, Type Wisata, Biaya, Rating, Alamat, Latitude,
Longitude
4. Input Pilih
5. If Pilih = Save Then
6. Cek data tidak kosong pada form
7.
If True Then
8.
Lakukan proses simpan
9.
Else
10.
Tampilkan pesan Data Harus Diisi
11.
Kembali ke baris 1
12.
End If
13. Else If pilih = Delete Then
14.
Cek data tidak kosong pada form
15.
If True Then
16.
Lakukan proses Hapus
17.
Else
18.
Tampilkan pesan Data Harus Diisi
19.
Kembali ke baris 1
20.
End If
21. Else If pilih = Update Then
22.
Cek data tidak kosong pada form
23.
If True Then
24.
Lakukan proses Ubah
25.
Else
26.
Tampilkan pesan Data Harus Diisi
27.
Kembali ke baris 1
28.
End If
29. Else If pilih = Cancel Then
30.
Reset Form
31. End If
c) Algoritma Menu Master Tempat Kunjung
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

Tampilkan Form Master Tempat Kunjung


Tampilkan Map
Input Id_Asal, Id_Tujuan, Waktu dan Jarak
Input Pilih
If Pilih = Save Then
Cek data tidak kosong pada form
If True Then
Lakukan proses simpan
Else
Tampilkan pesan Data Harus Diisi
Kembali ke baris 1
End If

50

5. Else If pilih = Delete Then


6.
Cek data tidak kosong pada form
7.
If True Then
8.
Lakukan proses Hapus
9.
Else
10.
Tampilkan pesan Data Harus Diisi
11.
Kembali ke baris 1
12.
End If
13. Else If pilih = Update Then
14.
Cek data tidak kosong pada form
15.
If True Then
16.
Lakukan proses Ubah
17.
Else
18.
Tampilkan pesan Data Harus Diisi
19.
Kembali ke baris 1
20.
End If
21. Else If pilih = Cancel Then
22.
Reset Form
23. End If

BAB IV
IMPLEMENTASI dan UJI COBA PROGRAM
Aplikasi rekomendasi tempat wisata yang dirancang ini, ditujukan untuk memudahkan dan
memberi layanan yang dapat memberikan solusi dalam pemberian rekomendasi tempat wisata
serta informasi tempat wisatanya secara optimal kepada masyarakat. Aplikasi ini merupakan
aplikasi berbasis web untuk menentukan jumlah tempat wisata yang bisa dikunjungi
berdasarkan harga, rating dan waktu tertentu dengan penerapan Algoritma Genetika. Sehingga
dapat mempermudah masyarakat dalam berpergian ke tempat wisata secara optimal.
1. Spesifikasi Hardware dan Software
a. Implementasi Aplikasi Rekomendasi Tempat Wisata
1) Hardware
Adapun spesifikasi hardware yang harus terpenuhi agar aplikasi Rekomendasi
Tempat Wisata dapat berjalan dengan baik adalah sebagai berikut:
a) Processor Intel Pentium Dual Core + 2,16GHz
b) RAM/ Memory 1 GB
c) Harddisk
2) Software
Di bawah ini merupakan spesifikasi software yang dibutuhkan agar aplikasi dapat
berjalan dengan maksimal:
a) Sistem Operasi Microsoft Windows 7
b) XAMPP 1.7.3
c) MySQL Front 5.3
d) Notepad ++
e) Google Chrome
2. Tampilan Layar Program
Tampilan layar program berguna untuk mengetahui apakah program yang telah dibuat
dapat berjalan secara maksimal atau bahkan terjadi kesalahan-kesalahan yang tidak
diinginkan, untuk itu maka program tersebut harus diuji dahulu mengenai kemampuannya
agar dapat berjalan sesuai dengan yang diharapkannya pada saat implementasi nantinya.
Tahap pengujian ini, user yang akan langsung mencoba, karena dari seorang user
tersebut penulis akan mendapat masukan-masukan yang diharapkan menjadi acuan untuk
penulis nantinya. Berikut ini adalah tampilan program beserta penjelasan penggunaan
program di masing-masing tampilan program yang ada pada aplikasi rekomendasi tempat
wisata.
a. Tampilan Layar Form Menu Utama Frontend
Di dalam menu utama frontend, terdapat beberapa menu yaitu menu home,
rekomendasi tempat wisata, daftar tempat wisata, help dan menu about.

51

52

Gambar 4.1: Tampilan Layar Form Menu Utama Frontend


b. Tampilan Layar Form Menu Rekomendasi Tempat Wisata
Berikut ini merupakan tampilan layar menu Rekomendasi Tempat Wisata. Didalam
Menu Rekomendasi Tempat Wisata, user dapat menginput Waktu, estimasi waktu
perwisata dan generasi untuk mendapatkan nama nama tempat wisata yang
berdasarkan dengan waktu yang ditentukan oleh user. Hasil keluarannya berupa
Kromosom terbaik, best fitness, biaya dan nama nama tempat wisata yang dapat
direkomendasikan.

Gambar 4.2: Tampilan Layar Form Menu Rekomendasi Tempat Wisata

53

Gambar 4.3: Tampilan Layar Form Menu Rekomendasi Tempat Wisata di Generate
c. Tampilan Layar Form Menu Daftar Tempat Wisata
Berikut ini merupakan tampilan layar menu Daftar Tempat Wisata. Didalam menu
Daftar Tempat Wisata terdapat tampilan map beserta list tempat wisata yang berupa
tabel.

Gambar 4.4: Tampilan Layar Form Menu Daftar Tempat Wisata Peta

54

Gambar 4.5: Tampilan Layar Form Menu Daftar Tempat Wisata List
d. Tampilan Layar Form Menu Help
Berikut ini merupakan tampilan layar menu Help. Didalam menu help terdapat
panduan panduan penggunaan aplikasi ini.

Gambar 4.6: Tampilan Layar Form Menu Help

55

e. Tampilan Layar Form Menu About


Berikut ini merupakan tampilan layar menu About. Di dalam Menu About berisi
beberapa sub menu yang terdiri dari Menu Tentang Program, menu Credit, dan menu
License.
1) Tampilan Layar Form Menu Tentang Program
Berikut ini merupakan tampilan layar menu Tentang Program . Didalam Menu
Tentang Program terdapat Judul aplikasi dan tujuan aplikasi.

Gambar 4.7: Tampilan Layar Form Menu Tentang Program


2) Tampilan Layar Form Menu Credit
Berikut ini merupakan tampilan layar menu utama credit. Didalam Menu Credit
terdapat data diri dari pembuat aplikasi.

56

Gambar 4.8: Tampilan Layar Form Menu Credit


3) Tampilan Layar Form Menu License
Berikut ini merupakan tampilan layar menu license. Di dalam Menu license
terdapat aturan aplikasi bahwa aplikasi ini merupakan free software dan dapat
dimanfaatkan serta disebarluaskan.

Gambar 4.9: Tampilan Layar Form Menu License

57

f.

Tampilan Layar Form Menu Login


Berikut ini merupakan tampilan layar login untuk masuk ke backend program. Jika
admin ingin mengakses backend dari program ini, maka admin harus melakukan
pengisian username dan password pada textfield yang tersedia. Setelah itu terdapat
tombol Login untuk melanjutkan masuk ke backend.

Gambar 4.10: Tampilan Layar Form Menu Login

Gambar 4.11: Tampilan Layar Form Menu Login Saat Diisi

58

Gambar 4.20: Tampilan Layar Form Menu Login Salah


g. Tampilan Layar Form Menu Utama Admin
Di dalam menu utama admin (Backend), terdapat beberapa menu yaitu menu
home, daftar tempat wisata, master dan loogout.

Gambar 4.21: Tampilan Layar Form Menu Utama Admin

59

h. Tampilan Layar Form Menu Daftar Tempat Wisata


Tampilan layar menu daftar tempat wisata pada backend sama dengan tampilan
layar menu daftar tempat wisata pada frontend.

Gambar 4.22: Tampilan Layar Form Menu Daftar Tempat Wisata Peta Admin

Gambar 4.23: Tampilan Layar Form Menu Daftar Tempat Wisata List Admin

60

i.

Tampilan Layar Form Menu Master


Berikut ini merupakan tampilan layar menu Master. Didalam Menu Master berisi
beberapa sub menu yang terdiri dari Menu Master Tempat Asal, menu Master Tempat
Tujuan dan menu Master Tempat Kunjung.
1) Tampilan Layar Form Menu Master Asal
Di bawah ini merupakan tampilan layar menu master tempat asal yang
berisikan dua buah inputan, yaitu id asal dan tempat asal yang harus diisi untuk
melakukan proses simpan, ubah dan hapus. Di bawahnya juga terdapat list dari
tabel asal.

Gambar 4.24: Tampilan Layar Form Menu Master Tempat Asal


2) Tampilan Layar Form Menu Master Tujuan
Di bawah ini merupakan tampilan layar menu master tempat Tujuan yang
terlihat seperti tampilan layar menu daftar tempat wisata, namun pada menu ini,
di dalam peta bisa melakukan proses tambah, ubah, hapus tempat wisata dengan
cara klik kanan pada peta dan langsung mengisi form yang ada. Sehingga nanti
listnya akan langsung bertambah.

61

Gambar 4.25: Tampilan Layar Form Menu Master Tempat Tujuan


3) Tampilan Layar Form Menu Master Kunjung
Di bawah ini merupakan tampilan layar menu master tempat kunjung yang
berisikan empat buah inputan, yaitu id asal dan tempat asal yang harus diisi untuk
melakukan proses simpan, ubah dan hapus. Di bawahnya juga terdapat list dari
tabel kunjung.

62

Gambar 4.26: Tampilan Layar Form Menu Master Tempat Kunjung


3. Hasil Pengujian
Berikut ini hasil uji pengujian yang telah dilakukan. Jumlah populasi dibatasi hanya 10
individu. Hasil uji ditampilkan dalam bentuk table seperti berikut ini:
No

Waktu
(Jam)

1
2
3
4
5
6
7
8
9
10
11
12

3
3
3
3
3
3
3
3
3
3
3
3

Tabel 4.1: Hasil


Estimasi
Generasi
Waktu
Perwisata
(Menit)
15
10
30
10
45
10
60
10
15
20
30
20
45
20
60
20
15
50
30
50
45
50
60
50

Pengujian Untuk 3 Jam


Fitness
Biaya

115.878484184
131.27335151
151.010609463
151.105455702
1496.77419355
1404.49438202
250.918857789
2227.4022274
929648241206
7692.30769231
2941.83195899
2842.03569068

Rp. 31930
Rp. 29709
Rp. 25826
Rp. 25148
Rp. 3875
Rp. 6052
Rp. 18939
Rp. 3861
Rp. 2786
Rp. 2678
Rp. 4487
Rp. 6052

Jumlah
Tempat
Wisata
2
2
2
2
2
1
2
1
2
2
1
2

Pada pengujian ke 1, 5 dan 9 memiliki jumlah estimasi 15 menit dan waktu 3 jam,
namun generasinya, yaitu 10, 20 dan 50 memiliki nilai fitness yang semakin tinggi dan
memiliki biaya yang semakin minimal.

63

Pada pengujian ke 2, 6 dan 10 memiliki jumlah estimasi 30 menit dan waktu 3 jam,
namun generasinya, yaitu 10, 20 dan 50 memiliki nilai fitness yang semakin tinggi dan
memiliki biaya yang semakin minimal.
Pada pengujian ke 3, 7 dan 11 memiliki jumlah estimasi 45 menit dan waktu 3 jam,
namun generasinya, yaitu 10, 20 dan 50 memiliki nilai fitness yang semakin tinggi dan
memiliki biaya yang semakin minimal.
Pada pengujian ke 4, 8 dan 12 memiliki jumlah estimasi 60 menit dan waktu 3 jam,
namun generasinya, yaitu 10, 20 dan 50 memiliki nilai fitness yang semakin tinggi dan
memiliki biaya yang semakin minimal.
Jadi kesimpulannya adalah semakin banyak generasi yang diinput maka semakin tinggi
pula nilai fitness yang dihasilkan dan biayanya juga semakin minimal atau murah.
No

Waktu
(Jam)

1
2
3
4
5
6
7
8
9
10
11
12

5
5
5
5
10
10
10
10
10
10
10
10

Tabel 4.2: Hasil Pengujian Untuk 10 Jam


Estimasi Waktu Generasi
Fitness
Perwisata
(Menit)
15
10
102.798843998
30
10
49.3594489691
45
10
48.9652861892
60
10
31.9199431245
15
20
439.285714286
30
20
1114.915284
45
20
1109.70996217
60
20
372.986532876
15
50
2907.41202895
30
50
4233.95037416
45
50
4266.17203802
60
50
7106.96338837

Biaya
Rp. 51557
Rp. 267426
Rp. 116409
Rp.482457
Rp. 28000
Rp. 11391
Rp. 7930
Rp. 30296
Rp. 8014
Rp. 5078
Rp. 4313
Rp. 2786

Jumlah
Tempat
Wisata
5
4
4
4
4
3
3
3
4
4
1
2

Pada Pengujian ke 1, 5 dan 9 memiliki jumlah estimasi (15 Menit) dan waktu (5 Jam)
tertentu namun generasinya yaitu 10, 20 dan 50 memiliki nilai fitness yang makin tinggi.
Dan memiliki biaya yang semakin minimal.
Pada Pengujian ke 2, 6 dan 10 memiliki jumlah estimasi (30 Menit) dan waktu (5 Jam)
tertentu namun generasinya yaitu 10, 20 dan 50 memiliki nilai fitness yang makin tinggi.
Dan memiliki biaya yang semakin minimal.
Pada Pengujian ke 3, 7 dan 11 memiliki jumlah estimasi (45 Menit) dan waktu (5 Jam)
tertentu namun generasinya yaitu 10, 20 dan 50 memiliki nilai fitness yang makin tinggi.
Dan memiliki biaya yang semakin minimal.
Pada Pengujian ke 4, 8 dan 12 memiliki jumlah estimasi (60 Menit) dan waktu (5 Jam)
tertentu namun generasinya yaitu 10, 20 dan 50 memiliki nilai fitness yang makin tinggi.
Dan memiliki biaya yang semakin minimal.

64

4. Evaluasi Program
Setelah dilakukan uji coba terhadap program aplikasi ini, didaptkan beberapa kelebihan
dan kekurangan dari aplikasi ini, yaitu sebagai berikut :
a. Kelebihan Program
1) Aplikasi dapat dengan mudah dioperasikan oleh pengguna, karena memiliki user
interface (tampilan antar muka) yang cukup baik dan user friendly.
2) Aplikasi dapat membuat perekomendasian tempat wisata dengan waktu yang
sesuai dengan user inginkan.
3) Proses perekomendasiaan Tempat Wisata lebih cepat dengan menggunakan
aplikasi ini.
b. Kekurangan Program
1) Tidak ada fasilitas khusus untuk menginput tempat asal, tempat tujuan dan
kunjung sehingga di input satu persatu oleh admin.
2) Belum tersedia proses untuk menghitung jarak dari titik awal ke wisata yang satu
dan dari wisata yang satu ke wisata yang lainnya pada aplikasi ini.

BAB V
PENUTUP
Berdasarkan analisis yang telah dilakukan terhadap permasalahan yang ada, maka dapat
ditarik kesimpulan dan saran yang mungkin diperlukan dalam pengembangan sistem yang
lebih kompleks.
1. Kesimpulan
Dari hasil analisis terhadap masalah dan aplikasi yang dikembangkan, maka dapat
ditarik beberapa kesimpulan, antara lain:
a. Program dengan Algoritma Genetika dapat membantu dalam Merekomendasi Tempat
Wisata sehingga dapat berwisata dengan waktu yang diinginkan.
b. Informasi yang didapat lebih mudah melalui aplikasi.
c. Nilai Generasi yang lebih besar menghasilkan nilai fitness yang lebih baik dikarenakan
nilai fitness terbaik ditampung untuk di munculkan kembali di generasi selanjutnya
sehingga semakin banyak generasi semakin banyak juga fitness terbaiknya yang dapat
dipilih serta memiliki biaya yang semakin minimal.
d. Dikarenakan pembentukan data secara Random, hasil yang diberikan belum tentu
sama dengan percobaan sebelumnya.
e. Estimasi waktu dan generasi yang kecil berpengaruh pada hasil rekomendasi tempat
wisata dan kecepatan eksekusi program.
2. Saran
Selain menarik beberapa kesimpulan, penulis juga mengajukan saran-saran yang
mungkin bisa dijadikan pertimbangan dalam pengembangan sistem, antara lain:
a. Pada penelitian selanjutnya diharapkan dapat menambahkan metode agar membuat
proses lebih cepat.
b. Keluaran yang diberikan oleh system tidak hanya berbasis teks, tapi berbentuk
navigasi maps atau GPS sehingga memudahkan pengguna dalam mengetahui letak
atau alamat tempat wisata tersebut.
c. Perlu adanya aplikasi yang dapat menginput Master kunjung sehingga admin tidak
menginput secara manual jarak dan waktu antara wisata yang satu dengan wisata
yang lainnya.
Demikianlah kesimpulan dan saran ini kami sampaikan. Semoga apa yang telah kami buat
bagi diri kami maupun bagi masyarakat yang menggunakan aplikasi ini, bisa mendapatkan
keuntungan yang bermanfaat dan aplikasi yang dirancang ini benar-benar dapat memberikan
nilai tambah dalam kegiatan refreshing untuk rekomendasi tempat wisata yang optimal.

65

DAFTAR PUSTAKA
Gen M & Cheng R 1997, Genetic Algorithms and Engineering Design, New York, John Wiley &
Sons.
Obitko, M 1998, Introduction to Genetic Algorithm (online) dilihat 20 November 2014,
<http://www.obitko.com/tutorials/genetic-algorithms/>.
Kusumadewi, Sri & Purnomo, Hari 2003, Penyelesaian Masalah Optimasi Dengan Teknik
Heuristik, Yogyakarta, Graha Ilmu.
Minartiningtyas, Brigida Arie 2014, Struktur Umum Algoritma Genetika (Online) dilihat 15
Januari 2014, <http://informatika.web.id/struktur-umum-algoritma-genetika.htm>.
Suryarasmi, Anindita 2009, Aplikasi Pencarian Rute Terpendek Jalur Trans Jogja Dengan
Algoritma Genetika, Yogyakarta, Universitas Gadjah Mada.
Widodo, Agus Wahyu, & Mahmudy, Wayan Firdaus 2010, Penerapan Algoritma Genetika Pada
System Rekomendasi Wisata Kuliner, Malang, Universitas Brawijaya.
Baharudin, Azmi, Shiddiqi, A Mazharudin, Pratomo, Baskoro Adi, Travelling Salesman Problem
Menggunakan Algoritma Genetika Via GPS Berbasis Android, Surabaya, Institute Teknologi
Sepuluh Nopember.
Indrianingsih, Yuliani, Algoritma Genetic Untuk Menyelesaikan Masalah Optimasi Fungsi
Berkendala Dengan Pengkodean Bilangan Bulat, Sekolah Tinggi Teknologi Adisutjipto.
Santoso, I Silviana, et. al. 2014, Pengoptimalan Anggaran Untuk Memenuhi Kebutuhan
Berdasarkan Prioritas Dengan Algoritma Genetika, Yogyakarta, Universitas Gadjah Mada.

66

LAMPIRAN
LISTING PROGRAM

Frontend
1. Koneksi.php
<?php
$dbhost = 'localhost'; // Isi nama hosting
$dbuser = 'root'; // Isi Nama User MySQL
$dbpass = ''; // Isi Password Database MySQL
$dbname = 'dbwisata'; // Isi dengan nama Database
$koneksi = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to
mysql');

mysql_select_db($dbname,$koneksi);

?>
2. Header.php
<?php
session_start();
include ("koneksi.php");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../assets/img/globe.ico">
<title>Tempat Wisata</title>
<!-- MAIN CSS -->
<link href="../assets/css/bootstrap.css" rel="stylesheet">
<link href="../assets/css/ndoboost.css" rel="stylesheet">
<link href="../assets/css/marker.css" rel="stylesheet">
<!-- PLUGINS CSS -->
<link
href="../assets/plugins/font-awesome/css/font-awesome.css"
rel="stylesheet">
<link
href="../assets/plugins/weather-icon/css/weather-icons.css"
rel="stylesheet">
<link href="../assets/plugins/prettify/prettify.css" rel="stylesheet">
<link
href="../assets/plugins/magnific-popup/magnific-popup.css"
rel="stylesheet">
<link
href="../assets/plugins/owl-carousel/owl.carousel.css"
rel="stylesheet">

67

68

<link href="../assets/plugins/owl-carousel/owl.theme.css" rel="stylesheet">


<link
href="../assets/plugins/owl-carousel/owl.transitions.css"
rel="stylesheet">
<!--script
type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false"></script-->
<script
type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?key=AIzaSyBfh216DpoAVoV0LPzd1eTgDUNo4
dV8Nek&sensor=false"></script>
<script src="../assets/js/jquery.js"></script>
</head>
<body class="tooltips" onLoad="map_initialize()">
<!-===================================================
BEGIN YOUR CONTENT
===================================================
-->
<nav class="navbar square navbar-primary" role="navigation">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button
type="button"
class="navbar-toggle"
datatoggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="?page=default">Home</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbarcollapse-1">

Bencana</a></li-->
Wisata</a></li>

<ul class="nav navbar-nav">


<!--li <?php /*
$a = $_GET['page'];
if($a == 1)
echo "class='active'"; */
?>
><a
href="?page=2">Data
<li><a

href="?page=1">Rekomendasi

Tempat

<li><a href="?page=3">Daftar Tempat Wisata</a></li>

69

<!--

<li><a href="?page=7">Help</a></li>
<li><a href="?page=3">About</a></li>-->

<li class="dropdown">
<a href="#fakelink" class="dropdown-toggle" datatoggle="dropdown">About <b class="caret"></b></a>
<ul
class="dropdown-menu
primary
with-triangle"
role="menu">
<li><a href="?page=4">Tentang Program
</a></li>
<li><a href="?page=6">Credit </a></li>
<li><a href="?page=5">License </a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse $row['id_bencana'];-->
</div><!-- /.container-fluid -->
</nav>
3. Footer.php
<div class="container"><br><br><br>
<!-----------------------------------------------------------BEGIN FOOTER
------------------------------------------------------------>
<footer>
<p align="center">KKP 2015 <i class="fa fa-heart textdanger"></i> Ivanny Silviana-Triana Nopitasari-Zolandia Ramanda</p>
</footer>
<!-----------------------------------------------------------BEGIN FOOTER
------------------------------------------------------------>
</div><!-- /.container -->
<!-===================================================
END YOUR CONTENT
===================================================
-->
<!--

70

===================================================
Placed at the end of the document so the pages load faster
===================================================
-->
<!-- MAIN JAVASRCIPT -->
<script src="../assets/js/bootstrap.min.js"></script>
<!-- PLUGINS AND NDOBOOST JS-->
<script src="../assets/js/jquery.js"></script>
<script src="../assets/plugins/prettify/prettify.js"></script>
<script
src="../assets/plugins/magnific-popup/jquery.magnificpopup.min.js"></script>
<script src="../assets/plugins/owl-carousel/owl.carousel.js"></script>
<script src="../assets/js/ndoboost.js"></script>
</body>
</html>
4. Index.php
<?php
include "koneksi.php";
include "header.php";
$a = $_GET['page'];
switch ($a) {
case 1:
include "rekomendasi.php";
break;
case 2:

include "maps.php";
break;

case 3:
include "info-wisata.php";
break;
case 4:

case 5:

include "tentangprogram.php";
break;
include "license.php";
break;

71

case 6:

case 7:

include "credit.php";
break;
include "help.php";
break;

default:
}

include "home.php";
break;

include "footer.php";
?>
5. Home.php
<!--

----------------------------------------------------------BEGIN HEADER
------------------------------------------------------------>
<header class="text-center">
<h1>Rekomendasi Tempat Wisata</h1>
<img src="../assets/img/ubl.png">
</header>
<!-----------------------------------------------------------END HEADER
------------------------------------------------------------>

6. Rekomendasi.php
<div class="container">
<div class="row">
<div class="text-center">
<p><h2>Rekomendasi Tempat Wisata</h2></p>
<div class="text-center"><p> <p> <p>
<table border='0' width="650px" height="150px" align='center'>
<form name = "input" id="input" action="" method="post">
<tr> <p>
<td height='50px' width='200px'> <label for="waktu">Input Waktu <span
class="mand">*</span></label></td>

72

<td>

<input

type="text"

id="waktu"

30px;"/></td>

name="waktu"

style="height:

<td
height='50px'
width='350px'>
<label
for="keterangan"><span
class="mand">*</span>Input
waktu
dalam
satuan
jam</label></td>
</p> </tr>
<tr> <p>
<td height='50px' width='300px'> <label for="estimasi">Estimasi Waktu
PerWisata <span class="mand">*</span></label></td>
<td> <select name="estimasi">
<option value="15">15 menit</option>
<option value="30">30 menit</option>
<option value="45">45 menit</option>
<option value="60">60 menit</option>
</select> </td>
</p> </tr>
<tr> <p>
<td
>
<label
for="generasi">Input
Generasi
<span
class="mand">*</span></label></td>
<td> <input type="text" id="generasi" name="generasi" style="height:
30px;"/> </td>
</p> </tr>
<tr height='50px'> <p class="buttons">
<td> <button class="btn btn-primary" type="submit" name="proses"
value="Input" onclick="generateForm(); return false;" >Generate</button> </td>
<td> <button class="btn btn-primary" type="reset" name="clear"
value="clear" id="clear"/>Cancel</button></td>
</p></tr>
</form>
</table>
</div>
</div>
</div>
</div>
<script type="text/javascript">
function generateForm(){
if(document.getElementById('waktu').value == ''){
alert('Waktu tidak boleh kosong');
document.getElementById('waktu').focus();
return false;
}
else if(document.getElementById('estimasi').value == ''){
alert('Estimasi waktu tidak boleh kosong');
document.getElementById('estimasi').focus();
return false;
}
else if(document.getElementById('generasi').value == ''){
alert('Generasi tidak boleh kosong');

73

document.getElementById('generasi').focus();
return false;

}
document.getElementById('input').submit();

}
</script>

<?php
set_time_limit(120);
$link = mysql_connect('localhost', 'root', '') or die('Cannot connect to the DB');
mysql_select_db('dbwisata', $link) or die('Cannot select the DB');
$query = "SELECT waktu FROM kunjung";
$result = mysql_query($query, $link) or die('Errorquery: '.$query);
$rows = array();
while ($r = mysql_fetch_assoc($result)) {
$rows[] = $r;
}
$data = "{kota: ".json_encode($rows)."}";
//echo $data;
//generate random
$maxgen = 0;
$querygen = "select * from tujuan";
$hasilhitung = mysql_query($querygen, $link) or die('Errorquery: '.$querygen);
$maxgen = mysql_num_rows($hasilhitung);
//echo 'banyak :' .$maxgen;
$a1 = 0;
$a2 = 9;
$awal = 0;
$menit = 60;
$satu = 1;
$flag = array();
$gen = array(array());
$gen2 = array();
$offspring = array();
$totalwaktu= array();
$totaljarak= array();
$batas_rw = array();
$batas = 0;
$banyaksatu = array();
if(isset($_POST['proses'])){
$inputwaktu = $_POST['waktu'];
$inputlama = $_POST['estimasi'];
$generasi = $_POST['generasi'];
$inputwaktu2 = (int)$inputwaktu * (int)$menit;
for ($k=$a1; $k<=$a2; $k++){

74

$flag[$k] = 0;
$banyaksatu[$k] = 0;
for($l=$awal; $l<$maxgen; $l++){
$result = mt_rand(0, 1);
$gen[$k][$l]= $result;
//echo $gen[$j][$i];
if($gen[$k][$l] == 1){
$banyaksatu[$k] = $banyaksatu[$k] + 1;
}
if($banyaksatu[$k] >= $inputwaktu){
$gen[$k][$l] = 0;
}
}
$f=0;
$as = null;
$jumwaktu = array();
$waktu = array();
$asal = null;
$tujuan = null;
for($j = 0; $j < $maxgen;$j++){
if($gen[$k][$j] == 1){
$flag[$k] = (int)$flag[$k] + 1;
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$query = "Select waktu, jarak FROM kunjung where id_asal
= 'A000".($f+1)."' and id_tujuan = 'T000".($j+1)."'";
$asal = "A000".($f+1);
$tujuan = "T000".($j+1);
}
elseif($j == 9){
if($f == 9){$query = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($f+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal = "A00".($f+1);
$tujuan = "T00".($j+1);}
else{$query = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($f+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal = "A000".($f+1);
$tujuan = "T00".($j+1);}
}
elseif($j > 9){
if($f >= 9){$query = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($f+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal = "A00".($f+1);

75

$tujuan = "T00".($j+1);}
else{$query = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($f+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal = "A000".($f+1);
$tujuan = "T00".($j+1);}}
$execute = mysql_query($query, $link) or die ('Errorquery :
'.$query);
//echo "".$j;
if(!isset($jumwaktu[$k])){$jumwaktu[$k] = null;}
while($as =mysql_fetch_assoc($execute)){
$jumwaktu[$k] = (int)$jumwaktu[$k] + (int)$as['waktu'] +
(int)$inputlama;
$jumjarak[$k]
=
(double)$jumjarak[$k]
+
(double)$as['jarak'];
//echo (int)$as['waktu']." ";
}
//echo $asal." ".$tujuan." ";
$f = $j;
$f = ($j+1);
}

}
if($inputwaktu2 >= $jumwaktu[$k]){
//echo " ".$jumwaktu[$k];
$totalwaktu1[$k] = $jumwaktu[$k];
$totaljarak1[$k] = (double)$jumjarak[$k];
}

else{
$k--;
}

}
for($batas=0; $batas<$generasi; $batas++){
/*echo "<br>";
for($i = $a1; $i<=$a2;$i++){
echo "Individu ke-".($i+1)." :";
for($j = 0; $j <=$akhir;$j++)
{
echo " ".$gen[$i][$j];
}
echo "<br>";
}
*/
//hitung nilai fitness
//1/(waktu/biaya+rating)
$banyaksatu1 = array();;
for ($k=$a1; $k<=$a2; $k++){
for($l=$awal; $l<$maxgen; $l++){

76

//echo $gen[$j][$i];
if($gen[$k][$l] == 1){
$banyaksatu1[$k] = $banyaksatu1[$k] + 1;
}
if($banyaksatu1[$k] >= $inputwaktu){
$gen[$k][$l] = 0;
}
}
$flag21[$k] = 0;
$as21 = null;
$re = 0;
$jumwaktu21 = array();
for($j = 0; $j < $maxgen;$j++){
if($gen[$k][$j] == 1){
$flag21[$k] = (int)$flag21[$k] + 1;
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$query21 = "Select waktu, jarak FROM kunjung where id_asal
= 'A000".($re+1)."' and id_tujuan = 'T000".($j+1)."'";
$asal21 = "A000".($re+1);
$tujuan21 = "T000".($j+1);
}
elseif($j == 9){
if($re == 9){$query21 = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($re+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal21 = "A00".($re+1);
$tujuan21 = "T00".($j+1);}
else{$query21 = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($re+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal21 = "A000".($re+1);
$tujuan21 = "T00".($j+1);}
}
elseif($j > 9){
if($re >= 9 || $re > 9){$query21 = "Select waktu, jarak FROM
kunjung where id_asal = 'A00".($re+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal21 = "A00".($re+1);
$tujuan21 = "T00".($j+1);}
else{$query21 = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($re+1)."' and id_tujuan = 'T00".($j+1)."'";
$asal21 = "A000".($re+1);
$tujuan21 = "T00".($j+1);}}
$execute21 = mysql_query($query21, $link) or die
('Errorquery : '.$query21);
//echo "".$j;
if(!isset($jumwaktu21[$k])){$jumwaktu21[$k] = null;}
while($as21 =mysql_fetch_assoc($execute21)){

77

$jumwaktu21[$k]
=
(int)$jumwaktu21[$k]
(int)$as21['waktu'] + (int)$inputlama;
$jumjarak21[$k]
=
(double)$jumjarak21[$k]
(double)$as21['jarak'];
//echo (int)$as['waktu']." ";
}
//echo $asal." ".$tujuan." ";
$re = $j;
$re = ($j+1);

+
+

}
}
//echo " ".$jumwaktu[$k];
$totalwaktu[$k] = $jumwaktu21[$k];
$totaljarak[$k] = (double)$jumjarak21[$k];
}
for ($k=$a1; $k<=$a2; $k++){
$biaya = null;
$jumbiaya = array();
$jumjarak = array();
$kilo = 23;
$harga = 8000;
$totalbensin = array();
$totalbiaya = array();
$bobot = array();
$fitness = array();
$totalfitness = 0;
for($j = 0; $j <$maxgen;$j++){
if($gen[$k][$j] == 1){
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$queryb = "Select biaya, rating FROM tujuan where id_tujuan
= 'T000".($j+1)."'";

id_tujuan = 'T00".($j+1)."'";

$tujuan = "T000".($j+1);
}
else{$queryb = "Select biaya, rating FROM tujuan where
$tujuan = "T00".($j+1);}
$querybiaya = mysql_query($queryb,

$link)

or

die

('Errorquery : '.$queryb);
//echo "".$j;
if(!isset($jumbiaya[$k])){$jumbiaya[$k] = null;}
while($biaya =mysql_fetch_assoc($querybiaya)){
$jumbiaya[$k] = (int)$jumbiaya[$k] + (int)$biaya['biaya'];
$jumrating[$k] = (int)$jumrating[$k] + (int)$biaya['rating'];
//echo (int)$as['waktu']." ";
}

78

//echo $asal." ".$tujuan." ";


}
}
$totalbensin[$k] = ((double)$totaljarak[$k] / 23) * 8000;
$totalbensin2[$k]= round($totalbensin[$k], 0);
$totalbiaya[$k]
=
(int)$jumbiaya[$k]
+

(int)$totalbensin2[$k];

$totalbiaya2[$k] = $totalbiaya[$k];
$hitung[$k] = (int)$flag21[$k] + (int)$jumrating[$k];
$bobot[$k] = (float)((int)$totalbiaya2[$k] / (int)$hitung[$k]);
$bobot2[$k] = round($bobot[$k], 20);
$fitness[$k] = 100000 * (float)(1 / (float)$bobot2[$k]);
$fitness2[$k] = round($fitness[$k], 20);
$totalfitness = $totalfitness + (float)$fitness2[$k];
/*echo " Waktu ".$totalwaktu[$k] ."<br>";
echo " Jarak ".(double)$totaljarak[$k] ."<br>";
echo " Biaya".$jumbiaya[$k]."<br>";
echo " Rating".$jumrating[$k]."<br>";
echo " Bensin".$totalbensin2[$k]."<br>";
echo "Total ".$totalbiaya[$k]."<br>";
echo "Hitung ".$hitung[$k]."<br>";
echo " Jumlah".$flag[$k]."<br>";
echo " Bobot".(float)$bobot2[$k]."<br>";
echo " Fitness".(float)$fitness2[$k]."<br>";*/
}
//echo " Total Fitness".(float)$totalfitness."<br>";
for($i=$a1; $i<=$a2; $i++){
$prob_fitness[$i] = (float)$fitness2[$i] / (float)$totalfitness;
$prob_fitness2[$i] = round($prob_fitness[$i], 20);
//
echo " probabilitas Fitness".(float)$prob_fitness2[$i]."<br>";
$totalprob = $totalprob + (float)$prob_fitness2[$i];
$batas_rw[0] = 0;
$batas_rw[$i+1] = $totalprob;
//
echo 'Batasan ' .$batas_rw[$i+1];
}
//
echo " Total probabilitas Fitness".(float)$totalprob."<br>";
$jumlahInd = 0;
for ($i=0; $i<sizeof($gen); $i++){
if ($gen[$i] != NULL){
$jumlahInd++;
}
}
//roullete wheel
//bangkit nilai random
$max = 1;

79

$min = 0;
for($m=$a1; $m<=$a2; $m++){
$cari = (($min + ($max-$min)) * mt_rand(0,
mt_getrandmax()) / mt_getrandmax()) + 0.01 ;
if ($cari == 0){
$cari1 = 0.5 ;
$cari2= round($cari1, 2) ;
}
elseif($cari > 1){
$cari1 = 1;
$cari2 = round($cari1, 2);
}
else {

$cari1 = $cari;
$cari2= round($cari1, 2);

}
$random_rw[$m]= $cari2;
//echo "<br>";
//echo $random_rw[$m];

}
//proses roullete
for($y=$a1; $y<=$a2; $y++){
for($x=$a1; $x<=$a2; $x++){
if($batas_rw[$x]
<
$random_rw[$y]
$random_rw[$y] <= $batas_rw[$x + 1]){
for($k=$awal; $k<$maxgen; $k++){
$gen2[$y][$k] = $gen[$x][$k];
//individu ke y ganti ke $x
}
$fitness21[$y] = $fitness2[$x];
$totalbiaya21[$y] = $totalbiaya2[$x];
}
}

/*for($e=$awal; $e<=$akhir; $e++){


echo $gen2[$y][$e];
}
echo '<br>';
echo 'fitness ' .$fitness21[$y];
echo '<br>';
echo 'biaya ' .$totalbiaya21[$y];
echo '<br>';*/

}
//Crossover single point
$probco = 0.7;
for($m=$a1; $m<=$a2; $m++){

and

80

$cross =
mt_getrandmax()) / mt_getrandmax() ;

($min + ($max-$min)) * mt_rand(0,

$cross2= round($cross, 2);


$random_co[$m]= $cross2;
//echo "<br> random co";
//echo $random_co[$m];

}
//
echo '<br>';
$co = 0;
$nomorIndividu = array();
$jumlahNomorInd = 0;
for($i=$a1; $i<=$a2; $i++){
if($random_co[$i]<=$probco){
$nomorIndividu[$co] = $i;
}
else{
$nomorIndividu[$co] = -1;
}
$co++;
}
/*for($i=$a1; $i<=$a2; $i++){
echo $nomorIndividu[$i]. '<br>';
}*/

for($i=$a1; $i<=$a2; $i++){


if($nomorIndividu[$i]!=-1){
$jumlahNomorInd = (int)$jumlahNomorInd + 1;
}
}
//echo '<br>'.$jumlahNomorInd;
$c = 0;
$individuCO = array();
for($i=0; $i<=9; $i++){
if($c!=$jumlahNomorInd)
{
if($random_co[$i] <= $probco)
{
$individuCO[$c] = $i;
$c++;
}
}
else
{break;}
/*

}
for($i=$a1; $i<$jumlahNomorInd; $i++){
echo '<br> individu co : '.$individuCO[$i];
}*/

81

$titikpotong = array();
for($i=$a1; $i<$jumlahNomorInd; $i++){
$titikpotong[$i] = mt_rand(0, $maxgen-1);
}
/*

for($i=$a1; $i<$jumlahNomorInd; $i++){


echo '<br> titik potong : '.$titikpotong[$i];
}*/
$offspring = array();
//sebelum titik potong
for($i=$a1; $i<$jumlahNomorInd; $i++){
for($j=$a1; $j<$titikpotong[$i]; $j++){
$offspring[$i][$j] = $gen2[$i][$j];
}
}

//setelah titik potong


for($i=0; $i<$jumlahNomorInd; $i++){
if($i == $jumlahNomorInd - 1)
{
for($j=$titikpotong[$i]; $j<$maxgen; $j++)
{
$offspring[$i][$j] = $gen2[$individuCO[0]][$j];
}
}
else
{
for($k=$titikpotong[$i]; $k<$maxgen; $k++)
{
$offspring[$i][$k]
$gen2[$individuCO[$i+1]][$k];
}
}
}
/*

//outprint
for($i=0;$i<$jumlahNomorInd;$i++)
{
echo '<br> Offspring '.($i+1).' = ';
for($j=0;$j<=49;$j++)
{
echo $offspring[$i][$j].' ';
}
echo '<br>';
}*/
//hitung fitness co

82

for($k=$a1; $k<$jumlahNomorInd;$k++){
$jumwaktuco = array();
$jumjarakco = array();
$r = 0;
$asco = null;
for($j = 0; $j <$maxgen;$j++){
if($offspring[$k][$j] == 1){
$flagco[$k] = (int)$flagco[$k] + 1;
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$queryco = "Select waktu, jarak FROM kunjung where id_asal
= 'A000".($r+1)."' and id_tujuan = 'T000".($j+1)."'";
$asalco = "A000".($r+1);
$tujuanco = "T000".($j+1);
}
elseif($j == 9){
if($r == 9){$queryco = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($r+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalco = "A00".($r+1);
$tujuanco = "T00".($j+1);}
else{$queryco = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($r+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalco = "A000".($r+1);
$tujuanco = "T00".($j+1);}
}
elseif($j > 9){
if($r >= 9){$queryco = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($r+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalco = "A00".($r+1);
$tujuanco = "T00".($j+1);}
else{$queryco = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($r+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalco = "A000".($r+1);
$tujuanco = "T00".($j+1);}}
$executeco = mysql_query($queryco, $link) or die
('Errorquery : '.$queryco);
//echo "".$j;
if(!isset($jumwaktuco[$k])){$jumwaktuco[$k] = null;}
while($asco =mysql_fetch_assoc($executeco)){
$jumwaktuco[$k]
=
(int)$jumwaktuco[$k]
+
(int)$asco['waktu'] + (int)$inputlama;
$jumjarakco[$k]
=
(double)$jumjarakco[$k]
+
(double)$asco['jarak'];
//echo (int)$as['waktu']." ";
}
//echo $asal." ".$tujuan." ";

83

$r = $j;
$r = ($j+1);
}
$totalwaktuco[$k] = $jumwaktuco[$k];
$totaljarakco[$k] = (double)$jumjarakco[$k];
}

$h = 0;
for($i=0; $i<$jumlahNomorInd; $i++){
if($h!=$jumlahNomorInd)
{
if($totalwaktuco[$i] != 0)
{
for($k=0; $k<$maxgen; $k++){
$individufeaco[$h][$k] = $offspring[$i][$k];
}
$h++;
}
}
}
$jumlahIndco = 0;
for ($i=0; $i<sizeof($individufeaco); $i++){
if ($individufeaco[$i] != NULL){
$jumlahIndco++;
}
}
for ($k=$a1; $k<$jumlahIndco; $k++){
$biayaco = null;
$jumbiayaco =array();
$jumratingco = array();
$totalfitnessco = 0;
for($j = 0; $j <$maxgen;$j++){
if($individufeaco[$k][$j] == 1){
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$querybco = "Select biaya, rating FROM tujuan where
id_tujuan = 'T000".($j+1)."'";
$tujuanco = "T000".($j+1);
}
else{$querybco = "Select biaya, rating FROM tujuan where
id_tujuan = 'T00".($j+1)."'";
$tujuanco = "T00".($j+1);}
$querybiayaco = mysql_query($querybco, $link) or die
('Errorquery : '.$querybco);
if(!isset($jumbiayaco[$k])){$jumbiayaco[$k] = null;}

84

(int)$biayaco['biaya'];
(int)$biayaco['rating'];

while($biayaco = mysql_fetch_assoc($querybiayaco)){
$jumbiayaco[$k]
=
(int)$jumbiayaco[$k]

$jumratingco[$k]

(int)$jumratingco[$k]

//echo (int)$as['waktu']." ";


}
//echo $asal." ".$tujuan." ";
}
}
$totalbensinco[$k] = ((double)$totaljarakco[$k] / 23) * 8000;
$totalbensin2co[$k]= round($totalbensinco[$k], 0);
$totalbiayaco[$k]
=
(int)$jumbiayaco[$k]
+
(int)$totalbensin2co[$k];

(int)$hitungco[$k]);

$totalbiaya2co[$k] = $totalbiayaco[$k];
$hitungco[$k] = (int)$flagco[$k] + (int)$jumratingco[$k];
$bobotco[$k]
=
(float)((int)$totalbiaya2co[$k]
$bobot2co[$k] = round($bobotco[$k], 20);
$fitnessco[$k] = 100000 * (float)(1 / (float)$bobot2co[$k]);
$fitness2co[$k] = round($fitnessco[$k], 20);
$totalfitnessco = $totalfitnessco + (float)$fitness2co[$k];
/*
echo " Waktu ".$totalwaktuco[$k] ."<br>";
echo " Jarak ".(double)$totaljarakco[$k] ."<br>";
echo " Biaya".$jumbiayaco[$k]."<br>";
echo " Rating".$jumratingco[$k]."<br>";
echo " Bensin".$totalbensin2co[$k]."<br>";
echo "Total ".$totalbiayaco[$k]."<br>";
echo "Hitung ".$hitungco[$k]."<br>";
echo " Jumlah".$flagco[$k]."<br>";
echo " Bobot".(float)$bobot2co[$k]."<br>";
echo " Fitness".(float)$fitness2co[$k]."<br>";*/

}
//echo 'jumlah: ' .$jumlahIndco;
//mutasi
$totalGenPerPopulasi = 0;
$jumlahTitikYangDimutasi = 0;
$titikMutasi = array();
$prob_mutasi = 0.02;
$totalGenPerPopulasi = (int)$jumlahIndco * $maxgen;
$jumlahTitikYangDimutasi = (double)$prob_mutasi * (int)$totalGenPerPopulasi;
for($i=$a1; $i<$jumlahTitikYangDimutasi; $i++){
$titikMutasi[$i] = mt_rand(0,$totalGenPerPopulasi-1);
}

85

//echo 'totalgen :'.$totalGenPerPopulasi;


//echo 'titikmutasi :'.$jumlahTitikYangDimutasi;
/*for($i=$a1; $i<$jumlahTitikYangDimutasi; $i++){
echo '<br> titikmutasi :'.$titikMutasi[$i];
}*/
for($i=$a1; $i<$jumlahTitikYangDimutasi; $i++)
{
$baris = (int)$titikMutasi[$i]/(int)$maxgen;
$kolom = (int)$titikMutasi[$i]%(int)$maxgen;
if($individufeaco[$baris][$kolom] == 1)
{
$individufeaco[$baris][$kolom] = 0;
}
else
{
$individufeaco[$baris][$kolom] = 1;
}
}
for($i=0;$i<$jumlahIndco;$i++)
{
for($j=0;$j<$maxgen;$j++)
{
$offspringmu[$i][$j] = $individufeaco[$i][$j];
}
}
/*for($i=0;$i<$jumlahNomorInd;$i++)
{
echo 'Offspring '.($i+1).' = ';
for($j=0;$j<=49;$j++)
{
echo $offspring[$i][$j].' ';
}
echo '<br>';
}*/
/*for($i=0;$i<$jumlahNomorInd;$i++)
{
echo 'Offspring mutasi'.($i+1).' = ';
for($j=0;$j<=49;$j++)
{
echo $offspringmu[$i][$j].' ';
}
echo '<br>';
}*/

86

//hitung fitness mutasi


for($k=$a1; $k<$jumlahIndco;$k++){
$jumwaktumu = array();
$jumjarakmu = array();
$z = 0;
$asmu = null;
$totalfitnessmu = 0;
for($j = 0; $j <$maxgen;$j++){
if($offspringmu[$k][$j] == 1){
$flagmu[$k] = (int)$flagmu[$k] + 1;
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$querymu = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($z+1)."' and id_tujuan = 'T000".($j+1)."'";
$asalmu = "A000".($z+1);
$tujuanmu = "T000".($j+1);
}
elseif($j == 9){
if($z == 9){$querymu = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($z+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalmu = "A00".($z+1);
$tujuanmu = "T00".($j+1);}
else{$querymu = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($z+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalmu = "A000".($z+1);
$tujuanmu = "T00".($j+1);}
}
elseif($j > 9){
if($z >= 9){$querymu = "Select waktu, jarak FROM kunjung
where id_asal = 'A00".($z+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalmu = "A00".($z+1);
$tujuanmu = "T00".($j+1);}
else{$querymu = "Select waktu, jarak FROM kunjung where
id_asal = 'A000".($z+1)."' and id_tujuan = 'T00".($j+1)."'";
$asalmu = "A000".($z+1);
$tujuanmu = "T00".($j+1);}
}
$executemu = mysql_query($querymu, $link) or die
('Errorquery : '.$querymu);
//echo "".$j;
if(!isset($jumwaktumu[$k])){$jumwaktumu[$k] = null;}
while($asmu =mysql_fetch_assoc($executemu)){
$jumwaktumu[$k]
=
(int)$jumwaktumu[$k]
+
(int)$asmu['waktu'] + (int)$inputlama;
$jumjarakmu[$k]
=
(double)$jumjarakmu[$k]
+
(double)$asmu['jarak'];
//echo (int)$as['waktu']." ";

87

}
//echo $asal." ".$tujuan." ";
$z = $j;
$z = ($j+1);
}
$totalwaktumu[$k] = $jumwaktumu[$k];
$totaljarakmu[$k] = (double)$jumjarakmu[$k];
}
}
$mu = 0;
for($i=0; $i<$jumlahIndco; $i++){
if($mu!=$jumlahIndco)
{
if($totalwaktumu[$i] != 0)
{
for($k=0; $k<$maxgen; $k++){
$individufeamu[$mu][$k] = $offspringmu[$i][$k];
}
$mu++;
}
}
}
$jumlahIndmu = 0;
for ($i=0; $i<sizeof($individufeamu); $i++){
if ($individufeamu[$i] != NULL){
$jumlahIndmu++;
}
}
for ($k=$a1; $k<$jumlahIndmu; $k++){
$jumbiayamu =array();
$jumratingmu = array();
$biayamu = null;
$bobot2mu[$k] = 0;
$fitness2mu[$k] = 0;
for($j = 0; $j <$maxgen;$j++){
if($individufeamu[$k][$j] == 1){
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$querybmu = "Select biaya, rating FROM tujuan where
id_tujuan = 'T000".($j+1)."'";
$tujuanmu = "T000".($j+1);
}

88

else{$querybmu = "Select biaya, rating FROM tujuan where


id_tujuan = 'T00".($j+1)."'";
('Errorquery : '.$querybmu);

(int)$biayamu['biaya'];

$tujuanmu = "T00".($j+1);}
$querybiayamu = mysql_query($querybmu, $link) or die
if(!isset($jumbiayamu[$k])){$jumbiayamu[$k] = null;}
while($biayamu =mysql_fetch_assoc($querybiayamu)){
$jumbiayamu[$k]
=
(int)$jumbiayamu[$k]

$jumratingmu[$k]

(int)$jumratingmu[$k]

(int)$biayamu['rating'];
//echo (int)$as['waktu']." ";
}
//echo $asal." ".$tujuan." ";
}
}
$totalbensinmu[$k] = ((double)$totaljarakmu[$k] / 23) *
8000;

$totalbensin2mu[$k]= round($totalbensinmu[$k], 0);


$totalbiayamu[$k]
=
(int)$jumbiayamu[$k]

(int)$totalbensin2mu[$k];

$totalbiaya2mu[$k] = $totalbiayamu[$k];
$hitungmu[$k] = (int)$flagmu[$k] + (int)$jumratingmu[$k];
$bobotmu[$k]
=
(float)((int)$totalbiaya2mu[$k]
/

(int)$hitungmu[$k]);
$bobot2mu[$k] = round($bobotmu[$k], 20);
$fitnessmu[$k] = 100000 * (float)(1 / (float)$bobot2mu[$k]);
$fitness2mu[$k] = round($fitnessmu[$k], 20);
$totalfitnessmu = $totalfitnessmu + (float)$fitness2mu[$k];

//

//echo " Jarak ".(double)$totaljarakmu[$k] ."<br>";


//echo " Waktu ".$totalwaktumu[$k] ."<br>";
echo " Biaya".$totalbiaya2mu[$k]."<br>";
//echo " Rating".$jumratingmu[$k]."<br>";
//echo " Bensin".$totalbensin2mu[$k]."<br>";
//echo "Total ".$totalbiayamu[$k]."<br>";
//echo "Hitung ".$hitungmu[$k]."<br>";
//echo " Jumlah".$flagmu[$k]."<br>";
//echo " Bobot".(float)$bobot2mu[$k]."<br>";
//echo " Fitness".(float)$fitness2mu[$k]."<br>";

}
//echo 'jumlah mu: ' .$jumlahIndmu;
$d = 0;
for($i=0; $i<$jumlahIndmu; $i++){
if($d!=$jumlahIndmu)
{

89

if($totalwaktumu[$i] <= $inputwaktu2 && $totalwaktumu[$i]


!= 0)

{
for($k=0; $k<$maxgen; $k++){
$individufeasible[$d][$k] = $individufeamu[$i][$k];
}
$fitnessfeasible[$d] = $fitness2mu[$i];
$totalbiayafeasible[$d] = $totalbiayamu[$i];
$totalwaktufeasible[$d] = $totalwaktumu[$i];
$totaljarakfeasible[$d] = $totaljarakmu[$i];
$d++;
}
}
}
/*for($i=0;$i<$jumlahNomorInd;$i++)
{
echo '<br>individu feasible : '.($i+1).' = ';
for($j=0;$j<=49;$j++)
{
echo $individufeasible[$i][$j].' ';
}
echo '<br>';
echo 'fitness feasible :' .$fitnessfeasible[$i];
echo '<br> biaya feasible :' .$totalbiayafeasible[$i];
}
*/
//update generasi
$populasiGab = array();
$fitnessGab = array();
$biayaGab = array();
$jarakGab = array();
$waktuGab = array();
$s = 0;
$q = 0;
$totalIndividu = (int)$jumlahInd + (int)$jumlahIndmu;
for($i=0; $i<$totalIndividu; $i++){
if($i<$jumlahInd){
for($j=0; $j<$maxgen; $j++){
$populasiGab[$i][$j] = $gen[$i][$j];
}
}
else {
for($j=0; $j<$maxgen; $j++){
$populasiGab[$i][$j] = $individufeasible[$s][$j];
}
$s++;

90

}
}
for($i=0; $i<$totalIndividu; $i++){
if($i<$jumlahInd){
$fitnessGab[$i] = $fitness2[$i];
$biayaGab[$i] = $totalbiaya2[$i];
}
else {
$fitnessGab[$i] = $fitnessfeasible[$q];
$biayaGab[$i] = $totalbiayafeasible[$q];
$jarakGab[$i] = $totaljarakfeasible[$q];
$waktuGab[$i] = $totalwaktufeasible[$q];
$q++;
}
}
/*for($i=0; $i<$totalIndividu; $i++){
{
echo '<br>individu gabungan : '.($i+1).' = ';
for($j=0;$j<=49;$j++)
{
echo $populasiGab[$i][$j].' ';
}
echo '<br>';
echo 'fitness gabungan :' .$fitnessGab[$i];
echo '<br> biaya gabungan :' .$biayaGab[$i];
}
}*/
for($i=0; $i<$totalIndividu; $i++){
for($j=$i+1; $j<$totalIndividu; $j++){
if($fitnessGab[$j] > $fitnessGab[$i]){
$tempFitness = $fitnessGab[$i];
$fitnessGab[$i] = $fitnessGab[$j];
$fitnessGab[$j] = $tempFitness;
for($k=0; $k<$maxgen; $k++){
$tempIndividu = $populasiGab[$i][$k];
$populasiGab[$i][$k] = $populasiGab[$j][$k];
$populasiGab[$j][$k] = $tempIndividu;
}
$tempBiaya = $biayaGab[$i];
$biayaGab[$i] = $biayaGab[$j];
$biayaGab[$j] = $tempBiaya;
$tempjarak = $jarakGab[$i];
$jarakGab[$i] = $jarakGab[$j];
$jarakGab[$j] = $tempjarak;

91

$tempwaktu = $waktuGab[$i];
$waktuGab[$i] = $waktuGab[$j];
$waktuGab[$j] = $tempwaktu;
}

}
for($i=0; $i<=9; $i++){
for($j=0; $j<$maxgen; $j++){
$gen[$i][$j] = $populasiGab[$i][$j];
}

$fitnessBaru[$i] = $fitnessGab[$i];
$biayaBaru[$i] = $biayaGab[$i];
$jarakBaru[$i] = $jarakGab[$i];
$waktuBaru[$i] = $waktuGab[$i];

}
for($i=0; $i<$maxgen; $i++){
$bestFitness[0][$i] = $gen[0][$i];
}
$fitnessTerbaik = $fitnessBaru[0];
$biayaTerbaik = $biayaBaru[0];
//

echo 'Best Fitness : ';


?>
<div class="text-center"><p> <p> <p>
<table border='3' width="800px" height="150px" align='center' >
<form action="" method="post">
<tr > <p>
<td
height='50px'
width='200px'
bgcolor='#2CAF90'>
for="waktu">Input Waktu <span class="mand"></span></label></td>
<td> <label for="waktu">
<?php
for($i=0; $i<$maxgen; $i++){
echo $bestFitness[0][$i];
}
?> <span class="mand"></span></label></td>
</p> </tr>
<tr> <p>
<td
height='50px'
width='200px'
bgcolor='#2CAF90'>
for="waktu">fitness terbaik <span class="mand"></span></label></td>
<td> <label for="waktu"><?php echo $fitnessTerbaik; ?>
class="mand"></span></label></td>
</p> </tr>

<label

<label
<span

92

<tr> <p>
<td
height='50px'
width='200px'
bgcolor='#2CAF90'>
<label
for="waktu">Biaya <span class="mand"></span></label></td>
<td> <label for="waktu"><?php ?> Rp. <?php echo $biayaTerbaik; ?>
<span class="mand"></span></label></td>
</p> </tr>
<?php
$namatujuan = array();
for($j = 0; $j <$maxgen;$j++){
if($bestFitness[0][$j] == 1){
if($j < 9){
//echo " ".($f+1);
//echo " ".($j+1);
$queryAkhir = "Select tempat_tujuan FROM tujuan where
id_tujuan = 'T000".($j+1)."'";
$tujuanAkhir = "T000".($j+1);
}
else{$queryAkhir = "Select tempat_tujuan FROM tujuan
where id_tujuan = 'T00".($j+1)."'";
$tujuanAkhir = "T00".($j+1);}
$querytempatAkhir = mysql_query($queryAkhir, $link) or die
('Errorquery : '.$queryAkhir);
//echo "".$j;
if(!isset($namatujuan[0][$j])){$namatujuan[0][$j] = null;}
while($namatempat
=
mysql_fetch_assoc($querytempatAkhir)){
$namatujuan[0][$j] = $namatempat['tempat_tujuan'];
//echo (int)$as['waktu']." ";
}
//echo $asal." ".$tujuan." ";
}
}
$indeks = 0;
$flagnama = 0;
//
echo '<br>nama wisata: ';
for($j = 0; $j <$maxgen;$j++){
if($indeks!=$maxgen){
if($bestFitness[0][$j] == 1){
$namatempatwisata[0][$indeks]
=
$namatujuan[0][$j];
$indeks++;
$flagnama = (int)$flagnama + 1;
}
}

93

?>
<tr> <p>
<td
height='50px'
width='200px'
bgcolor='#2CAF90'>
for="waktu">Daftar Nama Wisata <span class="mand"></span></label></td>
<td> <label for="waktu">
<?php
for($j = 0; $j <$flagnama;$j++){
echo $namatempatwisata[0][$j]. ', ';
}
?> <span class="mand"></span></label></td>
</p> </tr>
</table>
</div>
<?php
}
?>

<label

7. Info-wisata.php
<div class="container">
<div class="row">
<div class="col-sm-12">
<p><strong>Ceklist tipe tempat wisata</strong></p>
<form action="#">
<input type="checkbox" id="rekreasibox" data-type="Recreation" class="checkboxA" checked/> Recreation &nbsp;&nbsp;
<input type="checkbox" id="museumbox" data-type="Museum" class="check-boxA"
checked/> Museum &nbsp;&nbsp;
<input type="checkbox" id="tradisionalmarketbox" data-type="Traditional Market"
class="check-boxA" checked/> Traditional Market &nbsp;&nbsp;
<input type="checkbox" id="shoppingcenterbox" data-type="Shopping Center"
class="check-boxA" checked/> Shopping Center &nbsp;&nbsp;
<input type="checkbox" id="kulinerbox" data-type="culinary" class="check-boxA"
checked/> culinary &nbsp;&nbsp;
</form>
<div id="google_map" style="width:100%; height:500px; margin-bottom:20px
;"></div>
</div>
<?php include "info-wisata-isi.php"; ?>
</div>
</div>
<script type="text/javascript" src="filter.js"></script>
<script src="map2.js"></script>
8. Info-wisata-isi.php
<div class="table-responsive">
<table id="data-wisata" class="display table table-th-block table-primary tablebordered">
<thead>
<tr>

94

<th>No</th>
<th>Nama Wisata</th>
<th>Type</th>
<th>Biaya</th>
<th>Rating</th>
<th>Alamat</th>
<th>Latitude</th>
<th>Longitude</th>
</tr>
</thead>
<tbody>
<?php
include "koneksi.php";
$d = 0;
$query = mysql_query("SELECT * FROM tujuan");
while($row=mysql_fetch_assoc($query)){
?>
<tr>
<td><?php echo $d+= 1; ?></td>
<td><?php echo $row['tempat_tujuan']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['biaya']; ?></td>
<td><?php echo $row['rating']; ?></td>
<td><?php echo $row['alamat']; ?></td>
<td><?php echo $row['lat']; ?></td>
<td><?php echo $row['lng']; ?></td>
</tr>
<?php
} ?></tbody>
</table>
</div>
<!-- <script type="text/javascript" src="filter2.js"></script> -->
<script type="text/javascript">
//$(document).ready( function () {
$('#data-wisata').dataTable();
//} );
</script>
9. Map-process.php
<?php
//PHP 5 +
// database settings
$db_username = 'root';
$db_password = '';
$db_name = 'dbwisata';
$db_host = 'localhost';

95

//mysqli
$mysqli = new mysqli($db_host, $db_username, $db_password, $db_name);
if (mysqli_connect_errno())
{
header('HTTP/1.1 500 Error: Could not connect to db!');
exit();
}
################ Save & delete markers #################
if($_POST) //run only if there's a post data
{
//make sure request is comming from Ajax
$xhr = $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
if (!$xhr){
header('HTTP/1.1 500 Error: Request must come from Ajax!');
exit();
}
// get marker position and split it for database
$mLatLang
= explode(',',$_POST["latlang"]);
$mLat
= filter_var($mLatLang[0], FILTER_VALIDATE_FLOAT);
$mLng
= filter_var($mLatLang[1], FILTER_VALIDATE_FLOAT);
//Delete Marker
if(isset($_POST["del"]) && $_POST["del"]==true)
{
$results = $mysqli->query("DELETE FROM tujuan WHERE lat=$mLat AND
lng=$mLng");
if (!$results) {
header('HTTP/1.1 500 Error: Could not delete Markers!');
exit();
}
exit("Done!");
}
$mId
= filter_var($_POST["id_tujuan"], FILTER_SANITIZE_STRING);
$mNama
=
filter_var($_POST["tempat_tujuan"],
FILTER_SANITIZE_STRING);
$mType
= filter_var($_POST["type"], FILTER_SANITIZE_STRING);
$mBiaya
= filter_var($_POST["biaya"], FILTER_SANITIZE_STRING);
$mRating
= filter_var($_POST["rating"], FILTER_SANITIZE_STRING);
$mAlamat
= filter_var($_POST["alamat"], FILTER_SANITIZE_STRING);
$results = $mysqli->query("INSERT INTO tujuan (id_tujuan, tempat_tujuan, type,
biaya, rating, alamat, lat, lng) VALUES ('$mId', '$mNama', '$mType', '$mBiaya', '$mRating',
'$mAlamat', $mLat, $mLng)");
if (!$results) {

96

header('HTTP/1.1 500 Error: Could not create marker!');


exit();

$output
=
'<h1
class="marker-heading">
'.$mNama.'</h1><p>Biaya
:
'.$mBiaya.'</p><p>Tipe Wisata : '.$mType.'</p><p>Rating : '.$mRating.'</p><p>Alamat :
'.$mAlamat;
exit($output);
}
################ Continue generating Map XML #################
//Create a new DOMDocument object
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers"); //Create new element node
$parnode = $dom->appendChild($node); //make the node show up
// Select all the rows in the markers table
$results = $mysqli->query("SELECT * FROM tujuan ");
if (!$results) {
header('HTTP/1.1 500 Error: Could not get markers!');
exit();
}
//set document header to text/xml
header("Content-type: text/xml");
// Iterate through the rows, adding XML nodes for each
while($obj = $results->fetch_object())
{
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("id_tujuan",$obj->id_tujuan);
$newnode->setAttribute("nama",$obj->tempat_tujuan);
$newnode->setAttribute("biaya", $obj->biaya);
$newnode->setAttribute("lat", $obj->lat);
$newnode->setAttribute("lng", $obj->lng);
$newnode->setAttribute("type", $obj->type);
$newnode->setAttribute("alamat", $obj->alamat);
$newnode->setAttribute("rating", $obj->rating);
}
echo

$dom->saveXML();

10. map2.js
var mapCenter = new google.maps.LatLng(-6.1744651, 106.822745); //Google map
Coordinates 47.6145, -122.3418
var map;

97

var gmarkers = [];


//Create an infoWindow
var infowindow = new google.maps.InfoWindow();
//map_initialize(); // initialize google map
//############### Google Map Initialize ##############
function map_initialize()
{
var googleMapOptions =
{
center: mapCenter, // map center
zoom: 12, //zoom level, 0 = earth view to higher value
scaleControl: true, // enable scale control
mapTypeId: google.maps.MapTypeId.ROADMAP // google
map type
};
map
=
google.maps.Map(document.getElementById("google_map"), googleMapOptions);

new

//Load Markers from the XML File, Check (map_process.php)


$.get("map_process.php", function (data) {
$(data).find("marker").each(function () {
var id = $(this).attr('id_tujuan');
var name
= $(this).attr('nama');
var bodi
= '<p>Biaya : '+ $(this).attr('biaya')
+'</p><p> Type Rekreasi : '+ $(this).attr('type')+'</p><p> Rating : '+
$(this).attr('rating')+'</p><p> Alamat : '+ $(this).attr('alamat');
var iconx
= $(this).attr('type');
// var type
= $(this).attr('type');
var point
=
google.maps.LatLng(parseFloat($(this).attr('lat')),parseFloat($(this).attr('lng')));
var myicon;

"pasartradisional.png";

if(iconx == 'Recreation') {
myicon = "rekreasi.png";
} else if(iconx == 'Museum') {
myicon = "museum.png";
} else if(iconx == 'Traditional Market') {
myicon
=
} else if(iconx == 'Shopping Center') {
myicon

"shoppingcenter.png";

new

} else if(iconx == 'culinary') {


myicon = "kuliner.png";

98

} else {
}

myicon = "flag-pink.png";

create_marker(point, name, bodi, iconx, false, false,


false, "../icons/"+myicon);

});

});
//Right Click to Drop a New Marker
google.maps.event.addListener(map, 'rightclick', function(event) {
//Edit form to be displayed with new marker
var
EditForm
=
'<p
class="text-primary"><div
class="marker-edit">'+

'<form
action="ajax-save.php"
method="POST"
name="SaveMarker" id="SaveMarker">'+
'<label for="pId"><span>Id Wisata :</span><input
type="text" name="pId" class="save-id" placeholder="Masukkan id tempat" maxlength="5"
/></label>'+
'<label for="pNama"><span>Nama Tempat :</span><input
type="text" name="pNama" class="save-name" placeholder="Masukkan nama tempat"
maxlength="40" /></label>'+
'<label for="pType"><span>Tipe Wisata :</span> <select
name="pType" class="save-type">'+
'<option value="Recreation">Recreation</option>'+
'<option value="Museum">Museum</option>'+
'<option
value="Traditional
Market">Traditional
Market</option>'+
'<option
value="Shopping
Center">Shopping
Center</option>'+
'<option
value="culinary">culinary</option></select></label>'+
'<label
for="pBiaya"><span>Biaya
:</span><input
type="text" name="pBiaya" class="save-biaya" placeholder="Masukkan Jumlah Biaya"
/></label>'+
'<label
name="pRating" class="save-rating">'+
'<option
'<option
'<option
'<option
'<option

for="pRating"><span>Rating

:</span>

<select

value="1">1</option>'+
value="2">2</option>'+
value="3">3</option>'+
value="4">4</option>'+
value="5">5</option></select></label>'+

'<label for="pAlamat"><span>Alamat :</span><textarea


name="pAlamat"
class="save-alamat"
placeholder="Alamat
Tempat
Wisata..."
maxlength="150"></textarea></label>'+

99

'</div></p><button
marker">Save Marker Details</button>';

name="save-marker"

class="save-

//Drop a new Marker with our Edit Form


create_marker(event.latLng, 'Tempat Wisata baru', EditForm,
true, true, true, "../icons/flag-blue.png");
});
}
//############### Create Marker Function ##############
function create_marker(MapPos, MapTitle, MapDesc, type, InfoOpenDefault,
DragAble, Removable, iconPath)
{
//new marker
var marker = new google.maps.Marker({
position: MapPos,
map: map,
draggable:DragAble,
animation: google.maps.Animation.DROP,
title:"Klik untuk info selengkapnya!",
icon: iconPath
});
// === Store the category and name info as a marker properties ===
marker.mycategory = type;
// marker.myname = MapTitle;
gmarkers.push(marker);

</p>'+

//Content structure of info Window for the Markers


var contentString = $('<div class="marker-info-win">'+
'<div class="marker-inner-win"><span class="info-content">'+
'<h4 class="marker-heading">'+MapTitle+'</h4>'+'<p> Informasi Wisata :

MapDesc+ //'<br />Type :'+type +'<br />'+


'<br/><br/></span><button
name="remove-marker"
marker" title="Remove Marker">Remove Marker</button>'+
'</div></div>');

class="remove-

var infowindow = new google.maps.InfoWindow();


//set the content of infoWindow
infowindow.setContent(contentString[0]);
//Find remove button in infoWindow
var removeBtn = contentString.find('button.remove-marker')[0];
var saveBtn
= contentString.find('button.save-marker')[0];

100

//add click listner to remove marker button


google.maps.event.addDomListener(removeBtn, "click", function(event) {
remove_marker(marker);
});
if(typeof saveBtn !== 'undefined') //continue only when save button is present
{
//add click listner to save marker button
google.maps.event.addDomListener(saveBtn, "click", function(event)

var mReplace = contentString.find('span.info-content');


//html to be replaced after success
var mId = contentString.find('input.save-id')[0].value;
//name input field value
var mNama = contentString.find('input.save-name')[0].value;
//name input field value
var mType = contentString.find('select.save-type')[0].value;
//type of marker
var mBiaya = contentString.find('input.save-biaya')[0].value;
//type of marker
var
mRating
=
contentString.find('select.saverating')[0].value; //type of marker
var
mAlamat
=
contentString.find('textarea.savealamat')[0].value; //description input field value
if(mNama =='' && mAlamat =='' && mBiaya == '' && mId

== '')

{
");

alert("Harap isi nama tempat, Alamat, Biaya dan Id

}else{

save_marker(marker, mId, mNama, mType, mBiaya,


mRating, mAlamat, mReplace); //call save marker function
}
});
}
//add click listner to save marker button
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker); // click on marker opens info
window
});
if(InfoOpenDefault) //whether info window should be open by default
{
infowindow.open(map,marker);
}
}

101

//############### Remove Marker Function ##############


function remove_marker(Marker)
{
/* determine whether marker is draggable
new markers are draggable and saved markers are fixed */
if(Marker.getDraggable())
{
Marker.setMap(null); //just remove new marker
}
else
{
//Remove saved marker from DB and map using jQuery Ajax
var mLatLang = Marker.getPosition().toUrlValue(); //get marker

position

var myData = {del : 'true', latlang : mLatLang}; //post variables


$.ajax({
type: "POST",
url: "map_process.php",
data: myData,
success:function(data){
Marker.setMap(null);
alert(data);
},
error:function (xhr, ajaxOptions, thrownError){
alert(thrownError); //throw any errors
}
});

}
//############### Save Marker Function ##############
function save_marker(Marker, mId, mNama, mType, mBiaya, mRating, mAlamat,
replaceWin)
{
//Save new marker using jQuery Ajax
var mLatLang = Marker.getPosition().toUrlValue(); //get marker position
var myData = {id_tujuan : mId, tempat_tujuan : mNama, type : mType,
latlang : mLatLang, biaya : mBiaya, rating : mRating, alamat : mAlamat }; //post variables
console.log(replaceWin);
$.ajax({
type: "POST",
url: "map_process.php",
data: myData,
success:function(data){
replaceWin.html(data); //replace info window with new html

102

Marker.setDraggable(false); //set marker to fixed


Marker.setIcon('../icons/flag-pink.png'); //replace icon

},
error:function (xhr, ajaxOptions, thrownError){
alert(thrownError); //throw any errors
}
});
}
// == a checkbox has been clicked ==
$(".check-boxA").click(function(event){
var type = $(this).attr("data-type");
if (this.checked) {
show(type);
} else {
hide(type);
}
// == rebuild the side bar
// makeSidebar();
});

// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(type) {
for (var i=0; i<gmarkers.length; i++) {
if (gmarkers[i].mycategory == type) {
gmarkers[i].setVisible(true);
}
}
}
// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(type) {
for (var i=0; i<gmarkers.length; i++) {
if (gmarkers[i].mycategory == type) {
gmarkers[i].setVisible(false);
}
}
infowindow.close();
}
11. Tentangprogram.php
<div class="container">
<div class="row">
<div class="text-center">
<p><h2>Tentang Program</h2></p>
<div class="text-center"><p> <p> <p>
<p><Strong>Sistem Rekomendasi Tempat Wisata</Strong></p>

103

<p><Strong>Program Ini dibuat untuk mempermudah Proses Rekomendasi Tempat


Wisata pada user, dimana hasil rekomendasi tempat wisata berdasarkan tempat-tempat yang
paling optimal berdasarkan biaya yang seminimal mungkin dan waktu yang ditentukan oleh
user.</Strong></p>
</div>
</div>
</div>
</div>
12. License.php
<div class="container">
<div class="row">
<div class="text-center">
<p><h2>License</h2></p>
<div class="text-center"> <p> <p> <p> <p>
<p><Strong>Program ini adalah Free software, anda bisa merubahnya dan atau hasil
perubahannya itu disebarluaskan dibawah ketentuan GNU General Public License yang
dikeluarkan oleh Free Software Foundation </Strong></p></p></p></p>
</div>
</div>
</div>
</div>
13. Credit.php
<div class="container">
<div class="row">
<div class="text-center">
<p><h2>Credit</h2></p>
<div class="text-center">
<table border='1' width="70%" height="450px" align='center'>
<tr>
<td><p> Nama : Ivanny Silviana Santoso</p> <p>Nim :
1211501885</p> <p> Jurusan : Teknik Informatika </p> <p> Fakultas : Teknologi Informasi
</p> </td>
<td><p> Nama : Triana Nopitasari</p> <p>Nim : 1211500952</p>
<p> Jurusan : Teknik Informatika </p><p> Fakultas : Teknologi Informasi </p> </td>
<td><p> Nama : Zolandia Ramanda</p> <p>Nim :
1211502750</p> <p> Jurusan : Teknik Informatika </p> <p> Fakultas : Teknologi Informasi
</p> </td>
</tr>
</table>
</div>
</div>
</div>
14. Help.php
<div class="container">
<div class="row">

104

<div class="text-center">
<p><h2>Bantuan</h2></p>
<div class="text-center">
<p><strong>Sistem Rekomendasi Tempat Wisata</strong></p>
<table border='1' width="1000px" height="450px" align='center'>
<tr>
<td align='left' width='350px'>Rekomendasi Tempat Wisata -> Input
Waktu</td> <td align='left'>Input waktu berdasarkan jumlah waktu yang dimiliki untuk
berwisata.</td>
</tr>
<tr align='left'>
<td>Rekomendasi Tempat Wisata -> Estimasi Waktu</td> <td>Pilih Estimasi
waktu di masing masing tempat wisata.</td>
</tr>
<tr align='left'>
<td>Rekomendasi Tempat Wisata -> Input Generasi</td> <td>Masukan
jumlah generasi untuk melakukan proses pengoptimalan rekomendasi tempat wisata.</td>
</tr>
<tr>
<td align='left'>Daftar Tempat Wisata -> Peta</td> <td align='left'>Ceklist
tipe tempat wisata yang diinginkan agar dapat terlihat di peta.</td>
</tr>
<tr align='left'>
<td>Daftar Tempat Wisata -> Icon</td> <td>Klik icon tempat wisata yang ada
di peta untuk melihat informasi tempat wisata.</td>
</tr>
<tr align='left'>
<td>Daftar Tempat Wisata -> Icon -> Remove Marker</td> <td>Menghapus
tempat wisata dengan cara menekan link Remove Marker.</td>
</tr>
<tr align='left'>
<td>Daftar Tempat Wisata -> List Table</td> <td>Informasi mengenai tempat
wisata di daerah Jakarta</td>
</tr>
</table>
</div>
</div>
</div>

Backend
1. index.php
<?php
session_start();
if(empty($_SESSION['username'])){
header("location:login.php");
}
include "koneksi.php";

105

include "header.php";
$a = $_GET['page'];
switch ($a) {
case 1:
include "maps.php";
break;
case 2:

include "maps.php";
break;

case 3:
include "info-wisata.php";
break;
case 4:
include "tentangprogram.php";
break;
case 5:

include "licence.php";
break;

case 6:
include "credit.php";
break;
case 7:
include "help.php";
break;
case 8:

include "login.php";
break;

case 9:
include "logout.php";
break;
case 10:
include "masterasal.php";
break;
case 11:
include "mastertujuan.php";
break;
case 12:

106

include "masterkunjung.php";
break;
default:
}
?>

include "home.php";
break;

include "footer.php";

2. header.php
<?php
session_start();
include ("koneksi.php");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../assets/img/globe.ico">
<title>Tempat Wisata</title>
<!-- MAIN CSS -->
<link href="../assets/css/bootstrap.css" rel="stylesheet">
<link href="../assets/css/ndoboost.css" rel="stylesheet">
<link href="../assets/css/marker.css" rel="stylesheet">
<!-- PLUGINS CSS -->
<link
href="../assets/plugins/font-awesome/css/font-awesome.css"
rel="stylesheet">
<link
href="../assets/plugins/weather-icon/css/weather-icons.css"
rel="stylesheet">
<link href="../assets/plugins/prettify/prettify.css" rel="stylesheet">
<link
href="../assets/plugins/magnific-popup/magnific-popup.css"
rel="stylesheet">
<link
href="../assets/plugins/owl-carousel/owl.carousel.css"
rel="stylesheet">
<link href="../assets/plugins/owl-carousel/owl.theme.css" rel="stylesheet">
<link
href="../assets/plugins/owl-carousel/owl.transitions.css"
rel="stylesheet">
<!--script
type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false"></script-->

107

<script
type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?key=AIzaSyBfh216DpoAVoV0LPzd1eTgDUNo4
dV8Nek&sensor=false"></script>
<script src="../assets/js/jquery.js"></script>
</head>
<body class="tooltips" onLoad="map_initialize()">
<!-===================================================
BEGIN YOUR CONTENT
===================================================
-->
<nav class="navbar square navbar-primary" role="navigation">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button
type="button"
class="navbar-toggle"
datatoggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="?page=default">Home</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbarcollapse-1">

<ul class="nav navbar-nav">


<!--li <?php /*
$a = $_GET['page'];
if($a == 1)
echo "class='active'"; */
?>
><a
href="?page=2">Data

Bencana</a></li-->
<li><a href="?page=3">Daftar Tempat Wisata</a></li>
<li class="dropdown">
<a href="#fakelink" class="dropdown-toggle" datatoggle="dropdown">Master <b class="caret"></b></a>
<ul
class="dropdown-menu
primary
with-triangle"
role="menu">
<li><a href="?page=10">Master Tempat
Asal </a></li>

108

<li><a href="?page=11">Master Tempat


Tujuan </a></li>
Kunjung </a></li>

<li><a href="?page=12">Master Tempat


</ul>
</li>

<li><a href="logout.php">Logout</a></li>

</ul>
</div><!-- /.navbar-collapse $row['id_bencana'];-->
</div><!-- /.container-fluid -->
</nav>
3. Masterasal.php
<?php
include "koneksi.php";
if (isset($_POST['simpan'])) {
$idasal = strip_tags($_POST['idasal']);
$tmptasal = strip_tags($_POST['tmptasal']);
//input ke db
$query= sprintf("INSERT INTO asal VALUES('%s', '%s')",
mysql_escape_string($idasal),
mysql_escape_string($tmptasal)
);
$result = mysql_query($query) or die (mysql_error());
if($result){
echo '<script language="javascript"> alert ("Data
document.location.href="index2.php?page=10";</script>';
} else {
echo '<script language="javascript"> alert
document.location.href="index2.php?page=10";</script>';
}
}

("Data

Berhasil

Disimpan");

Gagal

Disimpan");

if (isset($_POST['edit'])) {
$idasal = strip_tags($_POST['idasal']);
$tmptasal = strip_tags($_POST['tmptasal']);
$query= sprintf("UPDATE asal SET tempat_asal='$tmptasal' WHERE id_asal='$idasal'",
mysql_escape_string($idasal),
mysql_escape_string($tmptasal)
);
$result = mysql_query($query) or die (mysql_error());
if($result){
echo '<script language="javascript"> alert ("Data Berhasil Diubah");
document.location.href="index2.php?page=10";</script>';

109

} else {
echo '<script
language="javascript"> alert
document.location.href="index2.php?page=10";</script>';
}
}

("Data

Gagal

Diubah");

Berhasil

Dihapus");

Gagal

Dihapus");

if (isset($_POST['clear'])) {
$idasal = strip_tags($_POST['idasal']);
$query = sprintf("DELETE FROM asal WHERE id_asal='%s'",
mysql_escape_string($idasal)
);
$result = mysql_query($query) or die (mysql_error());
if($result){
echo '<script language="javascript"> alert ("Data
document.location.href="index2.php?page=10";</script>';
} else {
echo '<script language="javascript"> alert
document.location.href="index2.php?page=10";</script>';
}
}

("Data

?>
<div class="text-center">
<p><h2>Create Tempat Asal</h2></p>
<div class="text-center">
<table border='0' width="500px" height="150px" align='center'>
<form action="" method="post">
<tr > <p>
<td height='50px' width='100px'> <label for="idasal">Id Asal <span
class="mand">*</span></label></td>
<td> <input type="text" id="idasal" name="idasal" style="height:
30px;"/></td>
</p> </tr>
<tr> <p>
<td
>
<label
for="tmptasal">Tempat
Asal
<span
class="mand">*</span></label> </td>
<td> <input type="text" id="tmptasal" name="tmptasal" style="height:
30px;"/> </td>
</p> </tr>
<tr> <p class="buttons">
<td> <button class="btn btn-primary" type="submit" name="simpan"
value="simpan" id="simpan">Save</button> </td>
<td> <button class="btn btn-primary" type="reset" name="clear"
value="clear" id="clear"/>Cancel</button></td>

110

<td width='120px'> <button class="btn btn-primary" data-toggle="modal"


type="submit" name="edit" value="edit" id="edit" >Update</button> </td>
<td width='120px'> <button class="btn btn-primary" data-toggle="modal"
type="submit" name="clear" value="clear" id="clear" >Delete</button> </td>
</p></tr>
</form>
</table>
</div>
</div>
<div class="table-responsive">
<table id="data-wisata" class="display table table-th-block table-primary tablebordered">
<thead>
<tr>
<th>No</th>
<th>Id Tempat Asal</th>
<th>Tempat Asal</th>
</tr>
</thead>
<tbody>
<?php
include "koneksi.php";
$d = 0;
$query = mysql_query("SELECT * FROM asal");
while($row=mysql_fetch_assoc($query)){
?>
<tr>
<td><?php echo $d+= 1; ?></td>
<td><?php echo $row['id_asal']; ?></td>
<td><?php echo $row['tempat_asal']; ?></td>
</tr>
<?php
} ?></tbody>
</table>
</div>
<!-- <script type="text/javascript" src="filter2.js"></script> -->
<script type="text/javascript">
//$(document).ready( function () {
$('#data-wisata').dataTable();
//} );
</script>
4. Mastertujuan.php
<div class="container">
<div class="row">
<div class="col-sm-12">
<p><strong>Create Tempat Tujuan</strong></p>

111

<div id="google_map" style="width:100%;


;"></div>
</div>
</div>
</div>
<script src="map2.js"></script>

height:500px;

margin-bottom:20px

<div class="table-responsive">
<table id="data-wisata" class="display table table-th-block table-primary tablebordered">
<thead>
<tr>
<th>No</th>
<th>Id Tujuan</th>
<th>Nama Wisata</th>
<th>Type</th>
<th>Biaya</th>
<th>Rating</th>
<th>Alamat</th>
<th>Latitude</th>
<th>Longitude</th>
</tr>
</thead>
<tbody>
<?php
include "koneksi.php";
$d = 0;
$query = mysql_query("SELECT * FROM tujuan");
while($row=mysql_fetch_assoc($query)){
?>
<tr>
<td><?php echo $d+= 1; ?></td>
<td><?php echo $row['id_tujuan']; ?></td>
<td><?php echo $row['tempat_tujuan']; ?></td>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['biaya']; ?></td>
<td><?php echo $row['rating']; ?></td>
<td><?php echo $row['alamat']; ?></td>
<td><?php echo $row['lat']; ?></td>
<td><?php echo $row['lng']; ?></td>
</tr>
<?php
} ?></tbody>
</table>
</div>
<!-- <script type="text/javascript" src="filter2.js"></script> -->
<script type="text/javascript">
//$(document).ready( function () {
$('#data-wisata').dataTable();

112

//} );
</script>
5. Masterkunjung.php
<?php
include "koneksi.php";
if (isset($_POST['simpan'])) {
$idasal = strip_tags($_POST['idasal']);
$idtujuan = strip_tags($_POST['idtujuan']);
$waktu = strip_tags($_POST['waktu']);
$jarak = strip_tags($_POST['jarak']);
//input ke db
$query= sprintf("INSERT INTO kunjung VALUES('%s', '%s', '%s', '%s')",
mysql_escape_string($idasal),
mysql_escape_string($idtujuan),
mysql_escape_string($waktu),
mysql_escape_string($jarak)
);
$result = mysql_query($query) or die (mysql_error());
if($result){
echo '<script language="javascript"> alert ("Data Berhasil
document.location.href="index2.php?page=12";</script>';
} else {
echo '<script language="javascript"> alert
document.location.href="index2.php?page=12";</script>';
}
}

("Data

Gagal

Disimpan");

Disimpan");

if (isset($_POST['edit'])) {
$idasal = strip_tags($_POST['idasal']);
$idtujuan = strip_tags($_POST['idtujuan']);
$waktu = strip_tags($_POST['waktu']);
$jarak = strip_tags($_POST['jarak']);
$query= sprintf("UPDATE kunjung SET waktu='$waktu', jarak='$jarak' WHERE
id_asal='$idasal' && id_tujuan='$idtujuan'",
mysql_escape_string($idasal),
mysql_escape_string($idtujuan),
mysql_escape_string($waktu),
mysql_escape_string($jarak)
);
$result = mysql_query($query) or die (mysql_error());
if($result){
echo '<script language="javascript"> alert ("Data Berhasil Diubah");
document.location.href="index2.php?page=12";</script>';

113

} else {
echo '<script
language="javascript"> alert
document.location.href="index2.php?page=12";</script>';
}
}

("Data

Gagal

Diubah");

if (isset($_POST['clear'])) {
$idasal = strip_tags($_POST['idasal']);
$idtujuan = strip_tags($_POST['idtujuan']);
$query = sprintf("DELETE FROM kunjung WHERE id_asal='%s' && id_tujuan='%s'",
mysql_escape_string($idasal),
mysql_escape_string($idtujuan)
);
$result = mysql_query($query) or die (mysql_error());
if($result){
echo '<script language="javascript"> alert ("Data Berhasil Dihapus");
document.location.href="index2.php?page=12";</script>';
} else {
echo '<script language="javascript"> alert
document.location.href="index2.php?page=12";</script>';
}
}

("Data

Gagal

Dihapus");

?>
<div class="text-center">
<p><h2>Create Kunjung</h2></p>
<div class="text-center">
<table border='0' width="500px" height="150px" align='center'>
<form action="" method="post">
<tr > <p>
<td height='50px' width='100px'> <label for="idasal">Id Asal <span
class="mand">*</span></label></td>
<td> <input type="text" id="idasal" name="idasal" style="height:
30px;"/></td>
</p> </tr>
<tr > <p>
<td height='50px' width='100px'> <label for="idtujuan">Id Tujuan <span
class="mand">*</span></label></td>
<td> <input type="text" id="idtujuan" name="idtujuan" style="height:
30px;"/></td>
</p> </tr>
<tr> <p>
<td > <label for="waktu">Waktu <span class="mand">*</span></label>
</td>

114

<td> <input type="text" id="waktu" name="waktu" style="height: 30px;"/>


</td>

</p> </tr>
<tr > <p>
<td height='50px' width='100px'> <label for="jarak">Jarak <span
class="mand">*</span></label></td>
<td> <input type="text" id="jarak" name="jarak" style="height:
30px;"/></td>
</p> </tr>
<tr> <p class="buttons">
<td> <button class="btn btn-primary" type="submit" name="simpan"
value="simpan" id="simpan">Save</button> </td>
<td> <button class="btn btn-primary" type="reset" name="clear"
value="clear" id="clear"/>Cancel</button></td>
<td width='120px'> <button class="btn btn-primary" data-toggle="modal"
type="submit" name="edit" value="edit" id="edit" >Update</button> </td>
<td width='120px'> <button class="btn btn-primary" data-toggle="modal"
type="submit" name="clear" value="clear" id="clear" >Delete</button> </td>
</p></tr>
</form>
</table>
</div>
</div>
<p> </p>
<div class="table-responsive">
<table id="data-wisata" class="display table table-th-block table-primary tablebordered">
<thead>
<tr>
<th>No</th>
<th>Id Tempat Asal</th>
<th>Id Tempat Tujuan</th>
<th>Waktu(Menit)</th>
<th>Jarak(KM)</th>
</tr>
</thead>
<tbody>
<?php
include "koneksi.php";
$d = 0;
$query = mysql_query("SELECT * FROM kunjung");
while($row=mysql_fetch_assoc($query)){
?>
<tr>
<td><?php echo $d+= 1; ?></td>
<td><?php echo $row['id_asal']; ?></td>
<td><?php echo $row['id_tujuan']; ?></td>
<td><?php echo $row['waktu']; ?></td>
<td><?php echo $row['jarak']; ?></td>

115

</tr>
<?php
} ?></tbody>
</table>
</div>
<!-- <script type="text/javascript" src="filter2.js"></script> -->
<script type="text/javascript">
//$(document).ready( function () {
$('#data-wisata').dataTable();
//} );
</script>
7. Login.php
<html>
<head>
<link rel="stylesheet" type="text/css" href="login.css">
</head>
<body>
<div id="kotak">
<div id="atas">
LOGIN ADMIN
</div>
<div id="bawah">
<form method="post" action="proseslogin.php">
<input class="masuk" type="text" autocomplete="off" placeholder="Username
.." name="username"><br/>
<input
class="masuk"
type="password"
autocomplete="off"
placeholder="Password .." name="password"><br/>
<input id="tombol" type="submit" value="Login">
</form>
</div>
</div>
</body>
</html>
8. Proseslogin.php
<?php
session_start();
include ("koneksi.php");
$username = $_POST['username'];
$password = md5($_POST['password']);
//untuk mencegah sql injection
//kita gunakan mysql_real_escape_string
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

116

//cek data yang dikirim, apakah kosong atau tidak


if (empty($username) && empty($password)) {
//kalau username dan password kosong
// header('location:index.php?page=8?error=1');
echo '<script language="javascript"> alert ("Login Gagal, Silahkan Coba Lagi...");
document.location.href="index.php?page=8?error=1";</script>';
break;
} else if (empty($username)) {
//kalau username saja yang kosong
// header('location:index.php?page=8?error=2');
echo '<script language="javascript"> alert ("Login Gagal, Silahkan Coba Lagi...");
document.location.href="index.php?page=8?error=2";</script>';
break;
} else if (empty($password)) {
//kalau password saja yang kosong
// header('location:index.php?page=8?error=3');
echo '<script language="javascript"> alert ("Login Gagal, Silahkan Coba Lagi...");
document.location.href="index.php?page=8?error=3";</script>';
break;
}
$q = mysql_query("select
password='$password'");

from

login

where

username='$username'

and

if (mysql_num_rows($q) == 1) {
//kalau username dan password sudah terdaftar di database
//buat session dengan nama username dengan isi nama user yang login
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
//redirect ke halaman index
header('location:index.php?page=default');
} else {
//kalau username ataupun password tidak terdaftar di database
// header('location:index.php?page=8?error=4');
echo '<script language="javascript"> alert ("Login Gagal, Silahkan Coba Lagi...");
document.location.href="index.php?page=8?error=4";</script>';
}
?>
9. Logout.php
<?php
session_start();
session_destroy();
header("location:login.php");
?>

Anda mungkin juga menyukai