• Tidak ada hasil yang ditemukan

Institutional Repository | Satya Wacana Christian University: Sistem Penjadwalan Kereta Api pada Jadwal Kereta Api Semarang – Jakarta T1 672003144 BAB IV

N/A
N/A
Protected

Academic year: 2017

Membagikan "Institutional Repository | Satya Wacana Christian University: Sistem Penjadwalan Kereta Api pada Jadwal Kereta Api Semarang – Jakarta T1 672003144 BAB IV"

Copied!
15
0
0

Teks penuh

(1)

Bab IV

Implementasi Sistem

Implementasi aplikasi penjadwalan kereta api dengan

menggunakan algoritma genetik didalam penelitian ini menggunakan

bahasa pemrogramman C# dan database MySQL 5.

Adapun perancangan dan implementasi aplikasi penjadwalan

antara lain sebagai berikut :

4.1

Pembangunan

Prototype

Pembangunan prototype pertama dibangun berdasarkan

kebutuhan pengguna yang didapat dari hasil wawancara adalah

sebagai berikut.

Form manage kereta merupakan form awal yang berjalan

pada aplikasi. Ketika pertama kali dijalankan, akan ditampilkan

jadwal keberangkatan hasil optimasi dengan algoritma genetik yang

sudah dilakukan sebelumnya. Operator dapat menambahkan kereta

dan tujuan keberangkatan yang baru pada aplikasi.

(2)

Gambar 4.1 merupakan form manage kereta pada aplikasi.

Untuk menambahkan jumlah kereta, operator dapat melakukan input

data kereta dengan tujuan keberangkatan (Semarang/Jakarta). Data

tersebut akan terismpan, pada aplikasi dengan waktu keberangkatan

yang masih kosong. Penambahan jumlah kereta dengan tujuan

keberangkatan yang baru akan ditambahkan pada jadwal setelah

operator menenetukan parameter genetik dan referensi penjadwalan

pada form manage jadwal.

Kode Program 4.1 Kode Program untuk input kereta dan tujuan

Pada Kode Program 4.1 dapat dilihat fungsi untuk

menginputkan nama kereta dan tujuan keberangkatan. Baris program

1 – 5 menjelaskan tahapan proses input data kereta dan tujuan yang

akan disimpan di dalam database MySQL.

Dalam penggunaannya, form manage kereta dilengkapi

dengan proteksi dimana nama kereta harus diinput oleh user. System

akan mengeluarkan pesan peringatan apabila user melakukan proses

penyimpanan tanpa memasukan nama kereta terlebih dahulu. Adapu

pesan peringatan yang disampaikan oleh system dapat dilihat pada

gambar 4.2

1 MySqlConnection conn = Koneksi.getKoneksi(); 2 MySqlCommand command = conn.CreateCommand(); 3 command.CommandText = "INSERT INTO tb_kereta (nama,tujuan) VALUES ('" +

tx_nama.Text +

"','"+cb_tujuan.SelectedIndex+"')"; 4 conn.Open();

(3)

Gambar 4.2 Proteksi Operator Manage Data Kereta

Berbeda dengan proteksi nama kereta, untuk kolom tujuan

apabila tidak diisi oleh user maka secara default akan diisi dengan

nilai dari sistem yakni Jakarta. Namun apabila terjadi kesalahan

dalam pengisian data, user dapat melakukan proses penghapusan

maupun pengeditan data kereta.

Perancangan form yang kedua pada tahap perancangan

prototype adalah perancangan form menu operator. Form menu

operator manage kereta merupakan form bagi operator untuk

melakukan pengelolaan data penjadwalan kereta api pada aplikasi.

(4)

Gambar 4.3 Form Menu Operator Manage Jadwal

Gambar 4.3 merupakan tampilan form menu operator pada

aplikasi untuk manage jadwal keberangkatan kereta api yang baru.

Untuk melakukan optimasi penjadwalan yang baru, operator dapat

menentukan jumlah kemungkinan jadwal yang baru pada pilihan

jumlah referensi jadwal. Kemudian parameter genetik untuk optimasi

penjadwalan juga dapat ditentukan, seperti nilai mix ratio yang

menentukan nilai kemungkinan pemilihan gen dari 2 buah individu

serta jumlah individu yang akan diseleksi. Kemudian, nilai fitness

dapat ditentukan dengan memberikan batasan gap atau jarak

keberangkatan antar kereta serta range atau batasan waktu

keberangkatan ditentukan dalam periode waktu tertentu.

Dalam penerapan algoritma genetik pada sistem maka

(5)

1. Generate populasi (populasi awal) merupakan proses

menginisialisasi elemen list sebanyak jumlah variabel

'jum_individu'. Setiap individu bertipe kelas IndividuJadwal.

IndividuJadwal memiliki atribut list kereta (rantai gen) yang

berisi kereta-kereta beserta jadwalnya (gen). Jadwal setiap

kereta saat inisialisasi adalah random. Kode program 1

merupakan potongan koding yang digunakan untuk

men-generate populasi awal.

Kode Program 4.2 Perintah untuk men-generate populasi awal 1. for (int i = 0; i < jum_individu; i++) {

2. individuJadwal = new IndividuJadwal(); 3. listGenKereta = new List<Kereta>(); 4. for (int j = 0; j < listKereta.Count; j++) { 5. Kereta kereta = new Kereta();

6. kereta.ID = listKereta[j].ID; 7. kereta.NAMA = listKereta[j].NAMA; 8. kereta.TUJUAN = listKereta[j].TUJUAN;

9. kereta.START = new TimeSpan(r.Next(0, 24), r.Next(0, 59), 0); 10. listGenKereta.Add(kereta);

11. }

12. individuJadwal.LISTGENKERETA = listGenKereta; 13. listIndividuJadwal.Add(individuJadwal);

14. }

Pada Kode Program 4.2 merupakan proses menginisialisasi

elemen list sebanyak jumlah variabel 'jum_individu'. Setiap individu

bertipe kelas IndividuJadwal. IndividuJadwal memiliki atribut list

kereta (rantai gen) yang berisi kereta-kereta beserta jadwalnya (gen).

Jadwal setiap kereta saat inisialisasi adalah random.

2. Evaluasi fitness merupakan proses dimana akan dicek setiap

parameter fitness (jadwal keberangkatan dan selisih waktu tiap

kereta) untuk setiap individu, jika ada parameter yang bernilai

(6)

Kode Program 4.3 Perintah untuk evaluasi fitness 1. for (int i = 0; i < listIndividuJadwal.Count; i++) { 2. int fit = 0;

3. for (int j = 0; j < listIndividuJadwal[i].LISTGENKERETA.Count; j++) { 4. Kereta k = listIndividuJadwal[i].LISTGENKERETA[j];

5. if (k.START.Hours < startTime) fit++; 6. if (k.START.Hours > finishTime) fit++;

7. if (k.TUJUAN == 0) listStartSemarang.Add(k.START.Hours * 100 + k.START.Minutes);

8. if(k.TUJUAN == 1)listStartJakarta.Add(k.START.Hours * 100 + k.START.Minutes); 9. }

10. listStartSemarang.Sort(); 11. listStartJakarta.Sort();

12. for (int n = 1; n < listStartSemarang.Count; n++) {

13. if (listStartSemarang[n] - listStartSemarang[n - 1] < toleransi_gap) 14. fit++;

15. }

16. for (int n = 1; n < listStartJakarta.Count; n++) {

17. if (listStartJakarta[n] - listStartJakarta[n - 1] < toleransi_gap)fit++; 18. }

19. listIndividuJadwal[i].FITNESS = fit;

20. if (listIndividuJadwal[i].FITNESS <= fit_max && 21. listIndividuJadwal[i].FITNESS >= fit_min){ 22. individuTerpilih.Add(listIndividuJadwal[i]); 23. listIndividuJadwal.RemoveAt(i); }

Pada Kode Program 4.3 merupakan proses evaluasi fitness

dimana akan dicek setiap parameter fitness (jadwal keberangkatan

dan selisih waktu tiap kereta) untuk setiap individu, jika ada

parameter yang bernilai true, maka nilai fitness untuk individu

tersebut ditambahkan 1 (nilai fitness berkurang). Baris program 7-11

merupakan perintah untuk mengecek jadwal keberangkatan dari

kereta berada pada range waktu yang ditentukan. Jika jadwal berada

pada luar range waktu yang ditentukan maka nilai fitness untuk

individu akan ditambahkan 1, yang berarti nilai fitness-nya berkurang.

Sementara pada baris program 12-23 merupakan perintah untuk

mengecek jadwal keberangkatan setiap kereta didalam individu, jika

selisih jadwal keberangkatan sekarang dengan kereta sebelumnya

lebih kecil dari waktu yang sudah ditentukan maka nilai fitness

(7)

3. Proses evaluasi dilakukan sampai nilai fitness terbaik terpenuhi.

Ada beberapa hal yang dilakukan pada tahap ini, yakni :

 Pilih individu terbaik berdasar ranking untuk

reproduksi. Proses pemilihan individu terbaik dapat dilihat

pada Kode Program 4.4.

Kode Program 4.4 Perintah untuk memilih individu yang terbaik 1. for (int i = 0; i < listIndividuJadwal.Count; i++) {

2. jum += listIndividuJadwal[i].FITNESS; 3. }

4. for (int i = 0; i < listIndividuJadwal.Count; i++) { 5. if ((float)jum / (float)listIndividuJadwal[i].FITNESS != 7) 6. return;

7. }

 Bentuk generasi baru melalui pindah silang dan mutasi

untuk menghasilkan keturunan baru (child. Proses Crossover

dapat dilihat pada Kode Program 4.5.

Kode Program 4.5 Perintah untuk Crossover

1. while ((listIndividuJadwal.Count + listIndividuJadwalChild.Count) < jum_individu){

2. int parent1 = r.Next(0, listIndividuJadwal.Count - 1);

3. int parent2;

4. while ((parent2 = r.Next(0, listIndividuJadwal.Count - 1)) == parent1) { }

5. IndividuJadwal child = new IndividuJadwal();

6. child.LISTGENKERETA = new List<Kereta>();

7. Kereta kereta;

8. for (int i = 0; i < listIndividuJadwal[parent1].LISTGENKERETA.Count; i++){

9. kereta = new Kereta();

10.kereta.ID = listIndividuJadwal[parent1].LISTGENKERETA[i].ID;

11.kereta.NAMA = listIndividuJadwal[parent1].LISTGENKERETA[i].NAMA;

12.kereta.TUJUAN = listIndividuJadwal[parent1].LISTGENKERETA[i].TUJUAN;

13.if (r.Next(0, 100) <= mix_ratio){

14.kereta.START = listIndividuJadwal[parent1].LISTGENKERETA[i].START;

21.for (int i = 0; i < listIndividuJadwalChild.Count; i++) {

22.listIndividuJadwal.Add(listIndividuJadwalChild[i]);

23.}

Pada Kode Program 4.5 merupakan tahapan crossover dimana

(8)

(kumpulan kereta) yang dipilih secara random. Peluang pemilihan

suatu gen dari individu parent ditentukan oleh mix ratio. Baris

program 1-5 merupakan perintah untuk memilih 2 individu sebagai

parent secara random. Baris program 13-15 merupakan perintah

pemilihan gen selanjutnya, pada proses ini sebuah nilai random

dihasilkan, jika nilai tersebut lebih kecil dari mix ratio maka gen dari

individu pertama yang dipilih. Jika sebaliknya maka gen dari individu

kedua yang dipilih. Kemudian akan ditambahkan gen yang baru

kedalam individu baru. Pada tahapan berikutnya pada baris program

16-23 merupakan perintah untuk menambahkan individu-individu

hasil crossover kedalam kumpulan individu.

 Evaluasi nilai fitness keturunan yang dihasilkan oleh

proses crossover. Kode Program pada tahap ini dapat

dilihat pada Kode Program 4.3.

 Setelah diatur terlebih dahulu, gantikan individu dengan

nilai fitness terburuk dengan keturunan yang dihasilkan

atau sering disebut juga dengan proses Mutasi dapat

dilihat pada Kode Program 4.6.

Kode Program 4.6 Proses Mutasi 1. while (!stopRegenerate){ 2. if (listIndividuJadwal != null){ 3. String cc = "";

4. try{

5. String progValue = ((100 / refJadwal) * individuTerpilih.Count) + ""; 6. fLoading.progressBarControl1.Text = progValue;

(9)

Pada Kode Program 4.6 merupakan proses mutasi yang terjadi

pada sistem. Baris 5-9 merupakan penjelasan koding dimana proses

mutasi itu sendiri dilakukan.

Form berikutnya yang dibuat pada tahapn perancangan

prototype adalah form menu operator generate jadwal. Form menu

operator generate jadwal merupakan form bagi operator untuk

menampilkan penjadwalan kembali jadwal keberangkatan yang baru.

Gambar 4.4 Form Menu Operator Generate Jadwal

Gambar 4.4 merupakan tampilan form menu operator generate

jadwal pada aplikasi. Pada form ini, ditampilkan hasil optimasi

penjadwalan yang baru apabila terjadi penambahan jadwal kereta

yang baru pada jadwal sebelumnya. Semua kemungkinan hasil

(10)

Kode Program 4.5 Proses Generate Jadwal

Pada Kode Program 4.5 merupakan proses untuk

men-generate penjadwalan. Pada tahapan ini akan dilakukan generate

populasi, kemudian mengecek nilai fitness setiap individu dan

melakukan seleksi. Selanjutnya melakukan reproduksi dengan

operator crossover. Jika telah ditemukan individu (banyaknya

individu ditentukan oleh pengguna) dengan jumlah fitness yang

ditentukan maka proses penjadwalan akan berhenti, jika tidak maka 1 while (!stopRegenerate){

foreach (IndividuJadwal ind in listIndividuJadwal) { 7 ind.LISTGENKERETA.Sort(delegate(Kereta k1, Kereta k2){return k1.START.CompareTo(k2.START);

8 });}

9 evaluasiFitnessIndividu();

10 getCekAllFitness();seleksiIndividu(); 11 crossoverIndividu();

12 counterGen++;

13 if (counterGen >= jum_gen && jum_gen > 0){ 14 stopGenerate = true;

15 stopRegenerate = true;}}

16 if (individuTerpilih.Count >= refJadwal) 17 stopRegenerate = true;

18 if (counterRegen >= jum_regen && jum_regen > ) 19 stopRegenerate = true;}.

20 evaluasiFitnessIndividu();

21 listIndividuJadwal.Sort(delegate(IndividuJadwal in1, IndividuJadwal in2){

22 return in1.FITNESS.CompareTo(in2.FITNESS); 23 });

24 tab_jadwal_kereta.TabPages.Clear(); 25 for (int i = 0; i < refJadwal; i++) { 26

27 CustomDGrid dgrid = new CustomDGrid(); 28 page.Controls.Add(dgrid);

29 IndividuJadwal individuJadwal = individuTerpilih.Count > 0 ?

30 individuTerpilih[i] : listIndividuJadwal[i]; 31 page.Text = "Jadwal " + (i+1) + ": " +

individuJadwal.FITNESS;

32 foreach (Kereta kereta in individuJadwal.LISTGENKERETA) { 33 dgrid.Rows.Add(kereta.ID, kereta.NAMA, kereta.TUJUAN == 0 ?

34 "Semarang" : "Jakarta", kereta.START); 35 }

(11)

proses akan mengulangi lagi dari generate populasi. Jika dalam

beberapa generasi nilai fitness dari semua individu tidak berubah

maka akan dilakukan regenerasi semua individu. Baris program 6-8

merupakan perintah untuk mengurutkan kereta-kereta di dalam

individu berdasarkan waktu keberangkatan. Baris program 9-11

merupakan perintah untuk mengevaluasi fitness tiap individu,

menyeleksi individu berdasarkan nilai fitness dan mereproduksi

individu dengan operator crossover. Baris program 21-23 merupakan

perintah untuk mengecek jika jumlah individu yang ber-fitness baik

sudah mencukupi atau jumlah generasi sudah melewati batas maka

perulangan di hentikan. Baris program 25-28 merupakan perintah

untuk mengurutkan individu berdasarkan nilai fitness. Pada baris

31-37 merupakan perintah untuk menampilkan hasil penjadwalan kepada

pengguna, setiap individu terpilih ditampilkan didalam

masing-masing tab pada form manage jadwal.

4.2

Hasil dan Pembahasan

Pada bab ini akan dibahas hasil dari pembangunan sistem

berdasarkan rancangan sistem yang telah dibuat pada bab

sebelumnya. Adapun hasil akhir dari perancangan aplikasi yang

(12)

Gambar 4.5 Form Hasil penjadwalan 1.

Gambar 4.5 merupakan tampilan hasil akhir dari proses

penjadwalan yang dibuat dari aplikasi. Terlihat pada gambar bahwa

sistem memberikan alternatif penjadwalan kereta api untuk

masing-masing tujuan. Perancangan aplikasi ini tidak hanya menampilkan 1

rekomendasi alternatif penjadwalan melainkan dapat memberikan

beberapa rekomendasi sekaligus dalam sekali proses sesuai dengan

fungsi dari masing-masing kolom inputan yang berada pada sisi

kanan dari aplikasi.

Fungsi dari masing-masing kolom inputan yang berada pada

sebelah kanan form adalah sebagai berikut:

1. Ref Jadwal berfungsi untuk mengatur berapa banyak jadwal yang

(13)

2. Mix ratio berfungsi untuk mengatur pencampuran antara

kromosom Parent.

3. Gap berfungsi untuk mengatur jarak keberangkatan tiap kereta.

4. Range berfungsi untuk mengatur jam awal keberangkatan kereta

dan jam terakhir keberangkatan kereta.

Gambar 4.6 Form Hasil penjadwalan 2.

Gambar 4.6 merupakan rekomendasi penjadwalan lainnya

yang dihasilkan oleh sistem dalam sekali proses. User dapat memilih

berapa banyak rekomendasi jadwal yang akan dihasilkan oleh sistem.

Hal ini sangat bermafaat karna user sendiri mempunyai banyak

(14)

4.3

Pengujian Sistem

4.3.1 Pengujian Black Box

Pengujian sistem merupakan langkah akhir dari implementasi

aplikasi optimasi penjadwalan kereta api sebelum diimplementasikan.

Pengujian ini dilakukan untuk mengetahui kesiapan aplikasi (apakah

masih terdapat bug atau error). Pengujian sistem aplikasi ini

menggunakan blacbox testing. Pengujian black box berfokus pada

persyaratan fungsional perangkat lunak. Pengujian ini memungkinkan

analis sistem memperoleh kumpulan kondisi input yang akan

mengerjakan seluruh keperluan fungsional program.

Pengujian black box berusaha menemukan kesalahan dalam

kategori:

Tabel 4.1Black Box Testing

(15)

4.3.2 Pengujian Fungsi Program

Pengujian fungsi program, dilakukan untuk melihat apakah

fungsi program di awal analisa kebutuhan pada sistem sudah

diimplementasikan pada aplikasi atau tidak. Sesuai dengan

kebutuhan penjadwalan kereta api yang optimal dengan

mempertimbangkan faktor-faktor penjadwalan kereta seperti, jumlah

kereta, jumlah jalur dan waktu tunggu sudah diterapkan pada aplikasi

untuk menghasilkan jadwal keberangkatan baru yang lebih optimal.

4.3.3 Pengujian performance program

Berdasarkan hasil wawancara akhir dengan user setelah

program dijalankan, maka user dapat menerima rekomendasi jadwal

yang dihasilkan oleh program. Hal ini dipastikan bahwa setelah

melakukan pengecekan secara manual dengan waktu keberangkatan

kereta maka tidak ditemukan kesalahan dalam rekomendasi jam

Gambar

Gambar 4.1 Form Manage Kereta
gambar 4.2
Gambar 4.2 Proteksi  Operator Manage Data Kereta
Gambar 4.3 Form Menu Operator Manage Jadwal
+5

Referensi

Dokumen terkait

Hanya 1 contoh landscape Tidak mempu memberikan contoh Kebenaran Contoh Landscape Diungkapkan dengan benar, sesuai dengan teori dan dilengkapi dengan foto atau

Penelitian ini bertujuan untuk mengetahui apakah penjualan bersih yang dilihat dari total penjualan bersih dan beban komersial yang dilihat dari total beban yang

Adam Malik Medan yang telah memberikan kesempatan dan sarana kepada Saya selama mengikuti program pendidikan magister di Departemen Obstetri dan Ginekologi.. Direktur

Turki akan membangun kamp pengungsi baru dalam menghadapi arus besar pengungsi dari Suriah.. Provinsi kecil di Turki menunjukkan kemurahan

Perintah diatas memberikan perintah apabila b4k5&gt;6 (umur lebih besar dari 6 tahun) dan b4k1&lt;b2r2 (dan nomor urut art (b4k1) masih lebih kecil dari jumlah anggota rumah

Studi kasus ini bertujuan untuk menentukan kondisi penyakit yang terjadi pada 2 ekor lumba-lumba milik GSJA sebelum kematian melalui pemeriksaan histopatologi dan

Aku teringat saat bertanya kepada ibu ku sendiri (yang pertalian darahnya begitu berarti segala­galanya), “Ji­ ka si anu bukan keluarga kita, akankah aku meng hormati nya sampai

Masalah perdagangan, peredaran dan penyalahgunaan narkoba sebagai salah satu bentuk kejahatan transnasional yang sedang dapat sorotan baik dari masyarakat internasional