Institutional Repository | Satya Wacana Christian University: Sistem Penjadwalan Kereta Api pada Jadwal Kereta Api Semarang – Jakarta T1 672003144 BAB IV
37
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.
Gambar 4.1 Form Manage Kereta
38
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
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();
5 command.ExecuteNonQuery();
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
39
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.
Hasil perancangan form tersebut dapat dilihat pada gambar 4.3.
40
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 langkahlangkah yang dibuat pada aplikasi adalah sebagai berikut:
41
1.
Generate
populasi
menginisialisasi
(populasi
elemen
list
awal)
merupakan
sebanyak
jumlah
proses
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 mengenerate populasi awal.
Kode Program 4.2 Perintah untuk men-generate populasi awal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
for (int i = 0; i < jum_individu; i++) {
individuJadwal = new IndividuJadwal();
listGenKereta = new List();
for (int j = 0; j < listKereta.Count; j++) {
Kereta kereta = new Kereta();
kereta.ID = listKereta[j].ID;
kereta.NAMA = listKereta[j].NAMA;
kereta.TUJUAN = listKereta[j].TUJUAN;
kereta.START = new TimeSpan(r.Next(0, 24), r.Next(0, 59), 0);
listGenKereta.Add(kereta);
}
individuJadwal.LISTGENKERETA = listGenKereta;
listIndividuJadwal.Add(individuJadwal);
}
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
true, maka nilai fitness untuk individu tersebut ditambahkan.
42
Kode Program 4.3 Perintah untuk evaluasi fitness
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
for (int i = 0; i < listIndividuJadwal.Count; i++) {
int fit = 0;
for (int j = 0; j < listIndividuJadwal[i].LISTGENKERETA.Count; j++) {
Kereta k = listIndividuJadwal[i].LISTGENKERETA[j];
if (k.START.Hours < startTime) fit++;
if (k.START.Hours > finishTime) fit++;
if (k.TUJUAN == 0) listStartSemarang.Add(k.START.Hours * 100 +
k.START.Minutes);
if(k.TUJUAN == 1)listStartJakarta.Add(k.START.Hours * 100 + k.START.Minutes);
}
listStartSemarang.Sort();
listStartJakarta.Sort();
for (int n = 1; n < listStartSemarang.Count; n++) {
if (listStartSemarang[n] - listStartSemarang[n - 1] < toleransi_gap)
fit++;
}
for (int n = 1; n < listStartJakarta.Count; n++) {
if (listStartJakarta[n] - listStartJakarta[n - 1] < toleransi_gap)fit++;
}
listIndividuJadwal[i].FITNESS = fit;
if (listIndividuJadwal[i].FITNESS = fit_min){
individuTerpilih.Add(listIndividuJadwal[i]);
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
individu akan bertambah 1.
43
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.
2.
3.
4.
5.
6.
7.
for (int i = 0; i < listIndividuJadwal.Count; i++) {
jum += listIndividuJadwal[i].FITNESS;
}
for (int i = 0; i < listIndividuJadwal.Count; i++) {
if ((float)jum / (float)listIndividuJadwal[i].FITNESS != 7)
return;
}
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
while ((listIndividuJadwal.Count + listIndividuJadwalChild.Count) < jum_individu){
int parent1 = r.Next(0, listIndividuJadwal.Count - 1);
int parent2;
while ((parent2 = r.Next(0, listIndividuJadwal.Count - 1)) == parent1) { }
IndividuJadwal child = new IndividuJadwal();
child.LISTGENKERETA = new List();
Kereta kereta;
for (int i = 0; i < listIndividuJadwal[parent1].LISTGENKERETA.Count; i++){
kereta = new Kereta();
kereta.ID = listIndividuJadwal[parent1].LISTGENKERETA[i].ID;
kereta.NAMA = listIndividuJadwal[parent1].LISTGENKERETA[i].NAMA;
kereta.TUJUAN = listIndividuJadwal[parent1].LISTGENKERETA[i].TUJUAN;
if (r.Next(0, 100) = 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
}
36
tab_jadwal_kereta.TabPages.Add(page);
37 }
Pada Kode Program 4.5 merupakan proses untuk mengenerate 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
47
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 3137 merupakan perintah untuk menampilkan hasil penjadwalan kepada
pengguna, setiap individu terpilih ditampilkan didalam masingmasing 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
dibuat adalah seperti yang terlihat pada gambar 4.5.
48
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 masingmasing 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
akan dibuat.
49
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
rekomendasi penjadwalan yang dapat digunakan.
50
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.1 Black Box Testing
No
1
2
Point Pengujian
Input Data
Kereta
Hasi l
penjadwalan
kereta
Validasi Input
Data Input
Hasil Uji
Status
Uji
Data Wajib diisi
dikosongi
Proses
penyimpanan
data kereta
gagal
berhasil
Data Wajib diisi
telah diisi
Proses
penyimpanan
data kereta
berhasil
berhasil
Data yang
dihasilkan
tidak saling
bertabrakan
berhasil
Validasi
nama kereta
Pengecekan hasil rekomendasi
untuk memastikan bahwa jadwal
yang dihasilkan tidak saling
bertabrakan.
51
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.
kebutuhan
penjadwalan
kereta
api
yang
Sesuai dengan
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
keberangkatan.
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.
Gambar 4.1 Form Manage Kereta
38
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
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();
5 command.ExecuteNonQuery();
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
39
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.
Hasil perancangan form tersebut dapat dilihat pada gambar 4.3.
40
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 langkahlangkah yang dibuat pada aplikasi adalah sebagai berikut:
41
1.
Generate
populasi
menginisialisasi
(populasi
elemen
list
awal)
merupakan
sebanyak
jumlah
proses
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 mengenerate populasi awal.
Kode Program 4.2 Perintah untuk men-generate populasi awal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
for (int i = 0; i < jum_individu; i++) {
individuJadwal = new IndividuJadwal();
listGenKereta = new List();
for (int j = 0; j < listKereta.Count; j++) {
Kereta kereta = new Kereta();
kereta.ID = listKereta[j].ID;
kereta.NAMA = listKereta[j].NAMA;
kereta.TUJUAN = listKereta[j].TUJUAN;
kereta.START = new TimeSpan(r.Next(0, 24), r.Next(0, 59), 0);
listGenKereta.Add(kereta);
}
individuJadwal.LISTGENKERETA = listGenKereta;
listIndividuJadwal.Add(individuJadwal);
}
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
true, maka nilai fitness untuk individu tersebut ditambahkan.
42
Kode Program 4.3 Perintah untuk evaluasi fitness
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
for (int i = 0; i < listIndividuJadwal.Count; i++) {
int fit = 0;
for (int j = 0; j < listIndividuJadwal[i].LISTGENKERETA.Count; j++) {
Kereta k = listIndividuJadwal[i].LISTGENKERETA[j];
if (k.START.Hours < startTime) fit++;
if (k.START.Hours > finishTime) fit++;
if (k.TUJUAN == 0) listStartSemarang.Add(k.START.Hours * 100 +
k.START.Minutes);
if(k.TUJUAN == 1)listStartJakarta.Add(k.START.Hours * 100 + k.START.Minutes);
}
listStartSemarang.Sort();
listStartJakarta.Sort();
for (int n = 1; n < listStartSemarang.Count; n++) {
if (listStartSemarang[n] - listStartSemarang[n - 1] < toleransi_gap)
fit++;
}
for (int n = 1; n < listStartJakarta.Count; n++) {
if (listStartJakarta[n] - listStartJakarta[n - 1] < toleransi_gap)fit++;
}
listIndividuJadwal[i].FITNESS = fit;
if (listIndividuJadwal[i].FITNESS = fit_min){
individuTerpilih.Add(listIndividuJadwal[i]);
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
individu akan bertambah 1.
43
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.
2.
3.
4.
5.
6.
7.
for (int i = 0; i < listIndividuJadwal.Count; i++) {
jum += listIndividuJadwal[i].FITNESS;
}
for (int i = 0; i < listIndividuJadwal.Count; i++) {
if ((float)jum / (float)listIndividuJadwal[i].FITNESS != 7)
return;
}
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
while ((listIndividuJadwal.Count + listIndividuJadwalChild.Count) < jum_individu){
int parent1 = r.Next(0, listIndividuJadwal.Count - 1);
int parent2;
while ((parent2 = r.Next(0, listIndividuJadwal.Count - 1)) == parent1) { }
IndividuJadwal child = new IndividuJadwal();
child.LISTGENKERETA = new List();
Kereta kereta;
for (int i = 0; i < listIndividuJadwal[parent1].LISTGENKERETA.Count; i++){
kereta = new Kereta();
kereta.ID = listIndividuJadwal[parent1].LISTGENKERETA[i].ID;
kereta.NAMA = listIndividuJadwal[parent1].LISTGENKERETA[i].NAMA;
kereta.TUJUAN = listIndividuJadwal[parent1].LISTGENKERETA[i].TUJUAN;
if (r.Next(0, 100) = 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
}
36
tab_jadwal_kereta.TabPages.Add(page);
37 }
Pada Kode Program 4.5 merupakan proses untuk mengenerate 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
47
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 3137 merupakan perintah untuk menampilkan hasil penjadwalan kepada
pengguna, setiap individu terpilih ditampilkan didalam masingmasing 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
dibuat adalah seperti yang terlihat pada gambar 4.5.
48
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 masingmasing 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
akan dibuat.
49
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
rekomendasi penjadwalan yang dapat digunakan.
50
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.1 Black Box Testing
No
1
2
Point Pengujian
Input Data
Kereta
Hasi l
penjadwalan
kereta
Validasi Input
Data Input
Hasil Uji
Status
Uji
Data Wajib diisi
dikosongi
Proses
penyimpanan
data kereta
gagal
berhasil
Data Wajib diisi
telah diisi
Proses
penyimpanan
data kereta
berhasil
berhasil
Data yang
dihasilkan
tidak saling
bertabrakan
berhasil
Validasi
nama kereta
Pengecekan hasil rekomendasi
untuk memastikan bahwa jadwal
yang dihasilkan tidak saling
bertabrakan.
51
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.
kebutuhan
penjadwalan
kereta
api
yang
Sesuai dengan
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
keberangkatan.