BAB IV HASIL DAN ANALISIS

dokumen-dokumen yang mirip
PENDAHULUAN. A. Membuat Database dalam SQL SERVER. 1. Klik Kanan pada databases lalu pilih new database

BAB II MICROSOFT VISUAL STUDIO

Aplikasi Login Dengan Database dan Tanpa Database Pada Visual Basic 2010

PEMROGRAMAN VB.NET. Koneksi Ke Database

BAB IV IMPLEMENTASI DAN TESTING

BAB VIII PENGENALAN DATABASE

Bab 4 Hasil dan Pembahasan

Modul x login dan Periode

BAB IV IMPLEMENTASI DAN PENGUJIAN

Budi Permana, S.Kom Pendahuluan. Lisensi Dokumen:

MODUL 4 Pemrograman ADO.NET : Disconnected Environtment

PEMROGRAMAN VISUAL BASIC

P11 & 12 Operasi DML pada Form Aplikasi (Project Aplikasi Rumah Sakit)

Budi permana, S.Kom

PEMROGRAMAN VB.NET. Sintaks Pada Class

BAB 3 PERANCANGAN PROGRAM. dari OOP (Object Oriented Programming) di mana dalam prosesnya, hal-hal

MODUL 2 SELECTION & LOOPING PADA FORM

Materi Pemrograman Database 1 Didik Nugroho,S.Kom,M.kom MODUL III MEMBUAT FORM MENYIMPAN PROSES PEMBELIAN

BAB IV IMPLEMENTASI DAN EVALUASI SISTEM. telah dibuat sebelumnya, sehinggga user dapat memahami jalannya sistem tersebut.

PEMROGRAMAN INPUT JURNAL TRANSAKSI

BAB IV IMPLEMENTASI DAN PENGUJIAN. Dalam pembuatan program ini penulis menggunakan Visual Basic. Net

Bab IV Implementasi Sistem

Gratis Tutorial Pemograman Visual Basic MEMBUAT CRUD VISUAL BASIC.NET DATABASE MYSQL

BAB III ANALISIS DAN PERANCANGAN

Backup dan Restore Database SQL Server 2005 Lewat Aplikasi Backup

Input, edit dan hapus data Master Barang

Koneksi Sederhana Database dengan C# (Lihat, Tambah, dan Hapus Data)

Aplikasi CRUD dengan Visual Basic 2012 [APLIKASI CRUD DENGAN VISUAL BASIC 2012 & MYSQL] September 18, & MySQL. Bahtiar Imran

Disini kita akan bahas cara koneksi antara Database MySQL dengan VB.Net 2010, semoga dengan ini E-book ini bisa ingat sepanjang jaman ya ^ ^

MEMBUAT FORM INPUT DATA DENGAN VB NET 2005 DAN DATABASE MS SQL SERVER 2005 EXPRESS


KONEKSI DATABASE SQL DENGAN VB.NET

Source Code Test Program Dengan VB Net



M. Choirul Amri.

MODUL PRAKTIKUM PEMROGRAMAN VISUAL LANJUT


MODUL 2 PERANCANGAN INTERFACE

1.1 Mengenal Visual Basic (VB) 1.2 Mengenal Integrated Development Environment (IDE) VB 6

Bab 4 Hasil dan Pembahasan

visit :

Menjelaskan variabel aksi sebagai data string nilai,hasil dan simpan sebagai data double.

Bab 4 Hasil dan Pembahasan

DASHBOARD LIBRARY UNTUK VISUALISASI INFORMASI

BAB IV IMPLEMENTASI SISTEM

Modul Pembangunan Aplikasi Basis Data Lanjut 2014

BAB III METODE DAN PERANCANGAN. Tahap iniakan mencari dan memahami bahan-bahan pustaka seperti jurnal, buku, dan

BAB 2 LANDASAN TEORI

BAB V IMPLEMENTASI DAN PENGUJIAN SISTEM

LAMPIRAN SKRIPSI. A. Lampiran Capture Program. Gambar L.1 Tampilan Layar Menu Home. Gambar L.2 Tampilan Layar Menu Login

Denda = 28 % x pokok PKB x 2 ( angka 2 dilihat catatan no1) =.(denda PKB)

Bab 4 Hasil dan Pembahasan

BAB IV IMPLEMENTASI DAN EVALUASI. mempersiapkan kebutuhan system (baik hardware maupun software), persiapan

BAB 4 HASIL DAN PEMBAHASAN


KEAHLIAN PEMROGAMAN JAVA

Form Login Menggunakan Combobox Dengan VB.Net dan MySQL Workbench

Bill of Material. Bab ini menjelaskan mengenai pembuatan form bill of material yang digunakan dalam program aplikasi sistem informasi manufaktur.

Aplikasi Payroll dengan ASP.Net

Program Database Penjualan Barang

BAB IV IMPLEMENTASI DAN PENGUJIAN

LAMPIRAN A USER MANUAL

LISTING PROGRAM. Private Sub MDIParent1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Bab 4. Hasil Dan Pembahasan

BAB III ANALISA MASALAH DAN RANCANGAN PROGRAM

BAB IV HASIL DAN PEMBAHASAN

Visual Basic 6.0 For Beginners

LAMPIRAN. Dim WithEvents diagnosa As New DB_MYSQL Dim sql = "select * from gejala order by kode asc"

Tahap Instalasi PostgreSQL di Windows

Pengenalan Microsoft Visual Studio 2010

8 H Ya Ya 0 Tidak Tidak 0 Tidak G gejala

Data Hasil Penelitian bobot 200 butir persilangan tanaman jagung

Writting Procedure and Function

Cepat Mahir Visual Basic 6.0. Cepat Mahir Visual Basic 6.0. Bab 10 Penggunaan Kontrol Array. Krisna D. Octovhiana

Modul 6 Function dan Trigger

Bentuk umum penulisan rumusannya, adalah sebagai berikut :

Sistem Distribusi Data Melalui COM+ Dengan Visual Basic

PENGENALAN VISUAL BASIC NET

Bab 4 Pembahasan Dan Hasil Pengujian


BAB IV HASIL DAN UJI COBA

BAB IV IMPLEMENTASI DAN PENGUJIAN

Modul 8. Pokok Bahasan: Class dan Object Field Metode Properti Deklarasi Objek dan Instantiasi Objek Constructor Event Inheritance

BAB IV HASIL DAN UJI COBA


PEMROGRAMAN TERSTRUKTUR II

Gambar 5.1 Hierarki Sistem Admin

Mata Kuliah: Pemrograman Bisnis I (VB.NET) Minggu : IX Reference Site : p1.html Pokok Bahasan :


1. Kompetensi Memahami berbagai teknologi pemrograman basis data, khususnya MySQL, pada Visual Basic 6.0.

BAB IV IMPLEMENTASI DAN PENGUJIAN

MODUL II. OBJECK, PROPERTY, METHOD dan EVENT

Bab Hasil Pembuatan Aplikasi

SISTEM INFORMASI AKUNTANSI PERSEDIAAN BARANG DENGAN MENGGUNAKAN METODE FIFO PADA PT.WINDU PERSADA CARGO

Tutorial Untuk Membuat Program Database Mahasiswa Teknik Industri Dengan Menggunakan Koneksi VB.NET Dengan Microsoft Access

Pemrograman Database Java

PEMROGRAMAN PHP DASAR

Basis Data 2. Procedure dan Function Database. Arif Basofi, S.Kom. MT. Teknik Informatika, PENS

BAB III ANALISIS DAN DESAIN SISTEM

Transkripsi:

29 BAB IV HASIL DAN ANALISIS 4.1 Hasil Karya 4.1.1 Tampilan Form a. Home Gambar 4.1 Tampilan awal aplikasi Pada saat membuka aplikasi, pengguna akan disuguhkan tampilan awal yang sederhana. Skema adalah nama untuk aplikasi ini, diambil dari bahasa Denmark yang berarti skedul, rencana, atau jadwal. Tampilan awal dari Skema terinspirasi dari desain yang sederhana dan elegan. Di bagian pojok kanan tulisan Skema terdapat logo yang berbentuk seperti DNA (Deoxyribonucleic Acid) dan juga berbentuk seperti jam pasir. Dari logo Skema tersebut dapat diambil makna bahwa DNA mewakili untuk genetika, sedangkan jam pasir melambangkan proses atau waktu.

30 Jadi, dalam logo Skema menceritakan tentang sesuatu yang dapat memproses genetika, dalam hal ini adalah aplikasi yang melakukan proses penghitungan probabilitas menggunakan algoritma genetika. Gambar 4.2 Logo Skema Di bagian bawah tulisan Skema terdapat beberapa tombol yang digunakan untuk memanggil form yang diinginkan. Berbeda dengan tombol pada umumnya, tombol di aplikasi ini didesain berbentuk tautan untuk membuat aplikasi ini terlihat sederhana tapi memiliki fitur yang mumpuni. b. Pelajaran Form Pelajaran berisi tentang segala sesuatu tentang apa yang menyangkut tentang pelajaran untuk terselenggaranya KBM (Kegiatan Belajar Mengajar) meliputi data mata pelajaran, data guru pengampu, data kelas yang ada, dan plot mengajar. Plot mengajar digunakan untuk membuat plot tentang guru pengampu mengajar pelajaran apa dan kelas yang dimana saja guru tersebut mengajar.

31 Gambar 4.3 Tab Mata Pelajaran dalam form Pelajaran Pada tab Mata Pelajaran terdapat pilihan untuk mengisi data mata pelajaran baru, mengedit atau menghapus data mata pelajaran yang sudah ada. Gambar 4.4 Tab guru dalam form Pelajaran Tab Guru berisi tentang data guru, sama seperti tab Mata Pelajaran data di tab Guru juga dapat ditambah, diedit, maupun dihapus. c. Ruang

32 d. Jadwal Gambar 4.5 Menu Ruang Gambar 4.6 Menu Jadwal Pada gambar di atas dapat dilihat bahwa pada bagian kiri terdapat 4 opsional untuk memproses jadwal. Sedangkan dibagian kanan adalah hasil dari jadwal yang telah diproses oleh aplikasi. 4.1.2 Pengkodean Dari sisi pengkodean terdapat 3 garis besar untuk aplikasi ini, yaitu pengkodean pada form untuk interaksi dengan pengguna, pemodelan bisnis untuk transaksi data dari dan ke database, kemudian yang paling rumit dan menyita banyak waktu untuk

33 riset dan uji coba adalah pengkodean untuk algoritma. Berikut adalah penjelasan dari rincian di atas: 4.1.2.1 Form Dalam pembuatan aplikasi Skema menggunakan menggunakan OOP (Object Oriented Programming) atau pemrograman berbasis objek, jadi setiap kelas memiliki struktur kode yang hampir sama untuk aliran data dari database ke form atau CRUD (Create, Read, Update, and Delete). Gambar 4.7 Windows form pada aplikasi Skema Kode Program 4.3 Mengambil data pelajaran di database dalam form Pelajaran Imports BusinessLib Public Class Pelajaran Private busobj As PelajaranIni = Nothing #Region " Read " Private Sub Pelajaran_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load busobj = New PelajaranIni Try Home.Cursor = Cursors.WaitCursor dgvpmapel.datasource = busobj.readmapel dgvpkelas.datasource = busobj.readkelas dgvpguru.datasource = busobj.readguru dgvplot.datasource = busobj.readplot cbplotrefresh() Home.Cursor = Cursors.Arrow Catch ex As Exception MessageBox.Show(ex.Message) Home.Cursor = Cursors.Arrow End Try End Sub #End Region

34 Dari kode di atas dapat dilihat bahwa semua data diambil melalui sebuah Class Library bernama BusinessLib. Kemudian dibuatlah variabel busobj untuk memanggil sebuah class yang bernama PelajaranIni yang berada di dalam BusinessLib, busobj inilah yang berfungsi untuk memanggil data dari database melalui perantara class PelajaranIni. Data kemudian ditampung dalam Data Grid View. Jadi setiap menu Pelajaran diklik maka semua data dari database akan langsung dibaca dan ditampung di Data Grid View masing-masing sub-menu. Kode Program 4.3 Menambah data pelajaran di database dalam form Pelajaran Imports BusinessLib Public Class Pelajaran Private busobj As PelajaranIni = Nothing Private Sub btnsavemp_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnsavemp.click If rbtambah.checked Then 'untuk membedakan tambah baru dan edit data Try busobj = PelajaranIni.InsertData() 'memanggil fungsi insert data, dan mengisi value _newdata menjadi true With busobj.pilihan = "mapel".tolower.kodemapel = tbkodemapel.text.namamapel = tbnamamapel.text End With busobj.save() 'menyimpan data baru MessageBox.Show("Data berhasil ditambahkan", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MsgBox(ex.Message) End Try dgvpmapel.datasource = busobj.readmapel 'reload dgv

35 Di dalam kode program di atas mengunakan fungsi if dan else, jadi apabila Radio Button diklik untuk tambah data maka fungsi if akan berjalan dan langsung melakukan proses penambahan data melalui class PelajaranIni yang berada dalam class library BusinessLib. Begitu pula dengan mengedit data, apabila Radio Button diklik edit data maka fungsi else yang gantian berjalan dan melakukan proses edit data melalui alur yang sama (melewati BusinessLib). Kode Program 4.3 Mengedit data pelajaran di database dalam form Pelajaran Else Try Dim pilihan As DataRowView = dgvpmapel.selectedrows(0).databounditem 'mengambil data dari dgv Dim id As String = pilihan.row(0).tostring 'inisialisasi id sebagai patokan busobj = PelajaranIni.UpdateData(id) 'berisi id yg terpilih dari dgv With busobj.pilihan = "mapel".tolower.kodemapel = tbkodemapel.text.namamapel = tbnamamapel.text End With busobj.save() 'edit data MessageBox.Show("Data berhasil diubah", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MsgBox(ex.Message) End Try dgvpmapel.datasource = busobj.readmapel 'reload dgv cbplotrefresh() End Sub Apabila kita perhatikan baris kode di atas dapat dilihat bahwa untuk proses edit, data diambil dahulu kemudian baru menyimpan perubahan ke dalam database.

36 Agar data yang baru ditambah atau diedit langsung terbaca maka akan dilakukan refresh di DataGridView setiap kali data berhasil diproses. Kemudian yang terakhir mengenani transaksi data dari form adalah hapus data. Kode untuk menghapus data cukup sederhana dan tidak terlalu rumit untuk dibuat. Kode Program 4.4 Menghapus data pelajaran di database dalam form Pelajaran Private Sub HapusToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HapusToolStripMenuItem.Click Select Case tcpelajaran.selectedtab.name.tostring 'seleksi nama tab Case "tpmapel" Dim pilihan As DataRowView = dgvpmapel.selectedrows(0).databounditem 'mengambil data dari dgv Dim namamapel As String = pilihan.row(2).tostring 'inisialisasi id sebagai patokan MessageBox.Show("Anda yakin ingin mengapus mata pelajaran " + namamapel, "Hapus data?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If vbyes Then Try busobj.pilihan = "Mapel".ToLower busobj.mapelid = pilihan.item("mapelid").tostring busobj.delete() dgvpmapel.datasource = busobj.readmapel MessageBox.Show("Mata pelajaran " + namamapel + " berhasil dihapus :D", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MsgBox(ex.Message) End Try dgvplotrefresh() MessageBox pertama berfungsi untuk memberikan peringatan kepada user agar tidak salah saat menghapus data yang telah dipilih. Setelah selesai proses menghapus maka akan ada

37 informasi bahwa data tersebut telah dihapus dan DataGridView akan refresh lagi untuk memperbarui data. 4.1.2.2 Basis Data Dalam pengkodean basis data digunakan Class Library yang berfungsi agar class ini nantinya dapat direference ke class lainnya yang membutuhkan transaksi data dari database. BusinessLib memiliki beberapa class yang berfungsi untuk melayani transaksi data dari setiap form yang berbeda, misal class PelajaranIni berfungsi untuk melayani transaksi data dari form Pelajaran. Utilities Gambar 4.8 Class pada BusinessLib Dalam class di atas terdapat kelas bernama yang berfungsi untuk menginisialisasikan koneksi ke Database Engine yaitu SQL SERVER 2008 agar tidak dipanggil berulang kali saat ingin membuka koneksi. Kode Program 4.5 Class Utilities Public Class Utilities Public Shared Function koneksi() Return ("data source=toshibatkj-01\sqlexpress ; database = skemadb; integrated security=sspi") End Function End Class Setelah terhubung ke database dengan memanggil fungsi koneksi, maka selanjutnya adalah mencoba mengambil

38 data dari database. Untuk mengambilnya, kode yang digunakan cukup sederhana dan menggunakan query dasar yang biasa dipakai untuk mengambil data. Kode Program 4.6 Mengambil data dari database Public Function ReadMapel() As DataTable Dim dt As New DataTable Using cn As New SqlConnection(Utilities.koneksi) Try cn.open() Try Using cm As New SqlCommand("select * from Mapel", cn) dt.load(cm.executereader) End Using Catch ex As Exception Throw ex End Try Catch ex As Exception Throw ex Finally cn.close() End Try End Using Return dt End Function Data yang telah diambil dari database ditampung di Data Table. Hal ini dilakukan agar memudahkan saat ditampilkan di DataGridView pada form. Untuk menambahkan data ke database diperlukan fungsi yang dapat diakses oleh semua class dikarenakan aplikasi tidak boleh langsung menyuntikkan data dari form langsung ke database karena hal tersebut kurang aman dan tidak efektif. Jadi dibutuhkan 2 method yaitu shared method untuk menjembatani antara form dengan BusinessLib dan yang kedua instance method untuk melakukan seleksi data akan masuk proses tambah atau edit sebelum diteruskan ke data portal untuk ditulis ke database.

39 Kode Program 4.7 Menambah data ke database 'shared method Public Shared Function InsertData() As PelajaranIni Dim obj As New PelajaranIni obj._newdata = True obj._pilihan = "" Return obj End Function 'instance method Public Sub save() Select Case _pilihan Case "mapel".tolower If _newdata Then Call CreateMapel() Else Call UpdateMapel()... 'data portal Private Sub CreateMapel() Dim qry As String = "INSERT INTO Mapel(KodeMapel,NamaMapel) VALUES (@kdmp,@nmmp)" Using cn As New SqlConnection(Utilities.koneksi) Try cn.open() Using cm As New SqlCommand(qry, cn) cm.parameters.addwithvalue("@kdmp", _kodemapel) cm.parameters.addwithvalue("@nmmp", _namamapel) cm.executenonquery() End Using Catch ex As Exception Throw ex Finally cn.close() End Try End Using End Sub Menambahkan data ke database dibutuhkan variabel yang berfungsi untuk menampung data dari form yang telah dimasukkan oleh user. Kemudian variabel tersebut dijadikan untuk mengisi value agar dapat terbaca di query sebagai parameter yang sebelumnya didefinisikan sebagai alias, misal @kdmp, @nmmp, @idmp, dan lainnya.

40 Kode 'shared Program method 4.8 Mengedit data dari database Public Shared Function DeleteData(id As Integer) As PelajaranIni 'shared method Public Dim obj Shared As New Function PelajaranIni UpdateData(id As Integer) As PelajaranIni obj.mapelid = id obj.guruid Dim As = New idpelajaranini 'jadi si id ini langsung menginput obj.kelasid ke semua = idvariabel obj.plotid obj.mapelid = = id id 'nanti si pilihan yang ngecek obj._pilihan obj.guruid = = id ""'si id itu masuk ke pilihan mana Return obj.kelasid = id End obj.plotid Function = id obj._pilihan = "" 'instance Return method obj Public End Function Sub Delete() Select Case _pilihan 'instance Case method "mapel".tolower Public Sub Call save() DeleteMapel() Select Case Case "Guru".ToLower _pilihan Case Call "mapel".tolower DeleteGuru() Case "Kelas".ToLower If _newdata Then Call DeleteKelas() Call CreateMapel() Case "Plot".ToLower Else Call Cekrelasi() Call UpdateMapel() Call End DeletePlot() If End Select... End Sub 'data portal 'data portal Private Sub UpdateMapel() Private Dim qry Function As String Cekrelasi() = "UPDATE Mapel SET KodeMapel=@kdmp,NamaMapel=@nmmp Dim dr As SqlDataReader WHERE MapelID=@mpid" Using Dim qry cn As As String New SqlConnection(Utilities.koneksi) qry Try = "SELECT * FROM PlotMengajar WHERE MapelID=@mpid" cn.open() Using Using cn As cm New As New SqlConnection(Utilities.koneksi) SqlCommand(qry, cn) Try cm.parameters.addwithvalue("@mpid", _mapelid) cn.open() cm.parameters.addwithvalue("@kdmp", _kodemapel) Try cm.parameters.addwithvalue("@nmmp", _namamapel) cm.executenonquery() Using cm As New SqlCommand(qry, cn) cm.parameters.addwithvalue("@mpid", End Using _mapelid) Catch dr ex = As cm.executereader Exception Throw _isthere ex = True Finally End Using cn.close() Catch ex As Exception End Try Throw ex End End Using Try End Sub Catch ex As Exception Throw ex Kode Program 4.9 Finally Menghapus data dari database cn.close() End Try End Using Return _isthere End Function... Seperti pada saat menambah data, mengedit data juga mengunakan fungsi shared method dan juga instance method untuk prosesnya. Yang jadi pembeda adalah pada fungsi shared method berisi value yang berasal dari form dan tentunya query dalam data portal.

41... Private Sub DeleteMapel() Dim qry As String If _isthere Then qry="delete FROM PlotMengajar Where MapelId=@mpid;"& _ "DELETE FROM Mapel Where MapelId = @mpid;" Else qry = "DELETE FROM Mapel Where MapelId = @mpid;" Using cn As New SqlConnection(Utilities.koneksi) Try cn.open() Using cm As New SqlCommand(qry, cn) cm.parameters.addwithvalue("@mpid", _mapelid) cm.executenonquery() End Using Catch ex As Exception _isthere = True Call DeleteMapel() Finally cn.close() End Try End Using End Sub

42 Dalam proses hapus, data terlebih dahulu dicek punya relasi dengan dengan tabel PlotMengajar atau tidak, kalau data tersebut mempunyai relasi maka digunakanlah query yang pertama (fungsi if) yaitu menghapus terlebih dahulu id mata pelajaran di tabel PlotMengajar kemudian baru menghapus data yang ada di tabel Mapel. Apabila data yang ingin dihapus tidak mempunyai relasi, maka digunakanlah query kedua (fungsi else) untuk menghapus data di tabel Mapel. 4.1.2.3 Algoritma Genetika Dalam algoritma genetika harus digunakan beberapa variabel acak untuk proses optimasi. Skema memiliki fitur untuk memberikan nilai acak tersebut untuk proses penghitungan optimasi tersebut. Variabel Jumlah gen dan Populasi per generasi menggunakan bilangan asli, untuk menentukannya tergantung dari banyaknya data. Oleh karena itu secara default Jumlah Gene diberi nilai 100 agar semua data di PlotMengajar dapat ditampung. Sedangkan untuk Populasi per generasi diberi nilai default 10 karena dianggap ideal sebagai sampel data. Jika ingin

43 mengganti variabel disarankan untuk memasukkan nilai yang lebih besar dari nilai sebelumnya, karena pada saat proses penghitungan optimasi dengan nilai yang kecil sering terjadi overload data atau data tidak dapat diproses lebih lanjut karena kurangnya sampel data. Kemudian untuk variabel probabilitas crossover dan probabilitas mutasi tidak harus diganti, akan tetapi apabila menginginkan hasil yang lebih bervarisasi maka dapat diganti sesuai keinginan. Nilai untuk variabel tersebut mempunyai rentan antara 0 sampai 1, dan tidak boleh bernilai 0 dan atau 1. Secara default nilai variabel untuk Probabilitas crossover dan Probabilitas mutasi masing-masing 0.5 dan 0.1, angka tersebut diperoleh dari hasil trial and error pada saat proses development aplikasi Skema. Gambar 4.9 Variabel dalam form Jadwal Jadi fitur variabel sangat membantu untuk pengguna awam menggunakan Skema. Pengguna awam

44 pun tidak terlalu dipusingkan oleh pengisian variabel karena tingkat kesalahan pemilihan variabel tersebut sudah diperhitungkan sebelumnya. Kesalahan dapat terjadi apabila variabel Jumlah Gen di form lebih sedikit dibanding variabel gen yang ada di Class Library Algoritma. Variabel gen ini didapat dari array 2 dimensi yang berisi data jumlah mata pelajaran, data ruang, dan data waktu. Pseudo code 4.1. Algoritma Genetika Inisialisasi Populasi Repeat Evaluasi Populasi Pilih individu/ kromosom terbaik Lakukan Crossover Mutasi Populasi Baru Sampai mendapat individu yg diinginkan dari generasi yg ditetapkan Kode Program 4.10 Inisialisasi awal 'inisialisasi awal 'panggil fungsi di class SetParameter agobj = New SetParameter JumlahGen = agobj.initialgene matapelajaran = agobj.initialmapel gurump = agobj.initialguru ruang = agobj.initialruang() waktu = agobj.initialwaktu() 'Public class SetParameter Public Function InitialGene() Dim qry As String = "SELECT COUNT(*) FROM PlotMengajar" Using cn As New SqlConnection(Utilities.koneksi) Try cn.open() Using cm As New SqlCommand(qry, cn) jumlahgene = Convert.ToInt32(cm.ExecuteScalar()) 'jumlahgene = jumlahgene - 1 End Using Catch ex As Exception Throw ex Finally cn.close() End Try End Using Return jumlahgene End Function

45 Kode Program 4.11 Proses algoritma genetika (garis besar) 'inisialisasi populasi ag = New AG ag.genetikai(jumlahkromosom, matapelajaran, gurump, ruang, waktu, probcrossover, probmutasi) ag.init() Dim found As Boolean = False For i As Integer = 0 To maksiterasi ag.hitungfitness() ag.seleksi() ag.crossover() ag.mutasi() If ag.cekterbaik() Then MsgBox("Jadwal optimal telah ditemukan :D", MsgBoxStyle.Information, "Success!") found = True Exit For If found = False Then MsgBox("Gagal memproses jadwal optimal :( Silakan ganti parameter di atas", MsgBoxStyle.Critical, "Failed") Exit Sub Kode Public Program Sub 4.12 hitungfitness() Evaluasi populasi Call hitunggurubentrok() Call hitungruanganbentrok() _fitness = 1.0F / (1.0F + _tabrakang + _tabrakanr) End Sub Public Sub hitunggurubentrok() 'guru yg sama mengajar di kelas berbeda dalam satu waktu _tabrakang = 0 Dim _isfinish As Boolean = False _indexskip = New List(Of Integer) For i As Integer = 0 To _jumlahgen - 1 _isfinish = False If Not _indexskip.contains(i) Then For j As Integer = i + 1 To _jumlahgen - 1 If Not _indexskip.contains(j) Then If _gurumapel(i) = _gurumapel(j) And _gen(i, 2) = _gen(j, 2) Then If _isfinish = False Then _tabrakang = _tabrakang + 1 _isfinish = True _indexskip.add(j) End Sub

46 Public Sub seleksi() _totalfitness = 0.0F 'cari total fitness semua kromosom For i As Integer = 0 To _jumlahkromosom - 1 _totalfitness = _totalfitness + _kromosom(i)._fitness 'cari probabilitas masing" fitness For i As Integer = 0 To _jumlahkromosom - 1 _kromosom(i)._probabilitasfitness = _kromosom(i)._fitness / _totalfitness 'cari kumulatif masing" fitness For i As Integer = 0 To _jumlahkromosom - 1 If i = 0 Then _kromosom(i)._kumulatifmax = Kode _kromosom(i)._probabilitasfitness Program 4.13 Seleksi Else _kromosom(i)._kumulatifmax = _kromosom(i - 1)._kumulatifMax + _kromosom(i)._probabilitasfitness 'kumulatif itu pas kromosom dijumlahkan terus dibagi lagi dengan angka yang sama Dim r As Random = New Random _randomseleksi = New Double(_jumlahKromosom - 1) {} 'memilih For i As Integer = 0 To _jumlahkromosom - 1 Dim _terpilih As Integer = 0 _randomseleksi(i) = r.double() 'cari dimana probabilitasnya yang cocok For j As Integer = 0 To _jumlahkromosom - 1 If _randomseleksi(i) < _kromosom(j)._kumulatifmax Then terpilih = j utk mengisi ke kromosom yg terpilih Exit For For j As Integer = 0 To _jumlahkromosom _hasilseleksi(i)._gen(j, 0) = _kromosom(_terpilih)._gen(j, 0) _hasilseleksi(i)._gen(j, 1) = _kromosom(_terpilih)._gen(j, 1) _hasilseleksi(i)._gen(j, 2) = _kromosom(_terpilih)._gen(j, 2) _kromosom = _hasilseleksi End Sub

47 Public Sub crossover() Dim r As New Random _randomcrossover = New Double(_jumlahKromosom - 1) {} _crossoverterpilih = New List(Of Integer) For i As Integer = 0 To _jumlahkromosom - 1 _randomcrossover(i) = r.double() If _randomcrossover(i) <= _probabilitascrossover Then _crossoverterpilih.add(i) Kode Program 4.14 Crossover (bagian pertama) If _crossoverterpilih.count >= 2 Then Dim r2 As New Random Dim titik As Integer = r2.(0, _kromosom(0)._jumlahgen - 1) Dim temp() As Integer = New Integer(2) {} For i As Integer = 0 To _crossoverterpilih.count - 1 For j As Integer = i + 1 To _crossoverterpilih.count - 1 Dim sebelum1 As StringBuilder = New StringBuilder Dim sebelum2 As StringBuilder = New StringBuilder Dim sesudah1 As StringBuilder = New StringBuilder Dim sesudah2 As StringBuilder = New StringBuilder For k As Integer = 0 To 3 'jumlah sebelum dan sesudah sebelum1.append(_kromosom(_crossoverterpilih(i)). _gen(k, 0).ToString + " ") sebelum1.append(_kromosom(_crossoverterpilih(i)). _gen(k, 1).ToString + " ") sebelum1.append(_kromosom(_crossoverterpilih(i)). _gen(k, 2).ToString + " ") sebelum2.append(_kromosom(_crossoverterpilih(i)). _gen(k, 0).ToString + " ") sebelum2.append(_kromosom(_crossoverterpilih(i)). _gen(k, 1).ToString + " ") sebelum2.append(_kromosom(_crossoverterpilih(i)). _gen(k, 2).ToString + " ") For x As Integer = titik To _kromosom(0)._jumlahgen - 1 temp(0) = _kromosom(_crossoverterpilih(i))._gen(x, 0) temp(1) = _kromosom(_crossoverterpilih(i))._gen(x, 1) temp(2) = _kromosom(_crossoverterpilih(i))._gen(x, 2) kromosom(_crossoverterpilih(i))._gen(x, 0) = _kromosom(_crossoverterpilih(j))._gen(x, 0) _kromosom(_crossoverterpilih(i))._gen(x, 1) = _kromosom(_crossoverterpilih(j))._gen(x, 1) _kromosom(_crossoverterpilih(i))._gen(x, 2) = _kromosom(_crossoverterpilih(j))._gen(x, 2)

48 Kode Program 4.15 Crossover (bagian kedua) For k As Integer = 0 To 3 sesudah1.append(_kromosom(_crossoverterpilih(i))._gen(k, 0).ToString + " ") sesudah1.append(_kromosom(_crossoverterpilih(i))._gen(k, 1).ToString + " ") sesudah1.append(_kromosom(_crossoverterpilih(i))._gen(k, 2).ToString + " ") sesudah2.append(_kromosom(_crossoverterpilih(i))._gen(k, 0).ToString + " ") sesudah2.append(_kromosom(_crossoverterpilih(i))._gen(k, 1).ToString + " ") sesudah2.append(_kromosom(_crossoverterpilih(i))._gen(k, 2).ToString + " ") Public Sub mutasi() End Sub Dim r3 As New Random Kode Program _randommutasi 4.16 Mutasi = New Double(_jumlahKromosom * _kromosom(0)._jumlahgen - 1) {} For i As Integer = 0 To _randommutasi.length - 1 _randommutasi(i) = r3.double() If _randommutasi(i) < _probabilitasmutasi Then Dim row, column As Integer row = Math.Floor(i / _kromosom(0)._jumlahgen) column = i Mod _kromosom(0)._jumlahgen Dim index As Integer index = _waktu.indexof(_kromosom(row)._gen(column, 2)) If index = _waktu.count - 1 Then index = 0 _kromosom(row)._gen(column, 2) = _waktu(index + 1) End Sub

49 Kode Program 4.17 Populasi baru (apabila ditemukan) Public Function cekterbaik() Dim optimal As Integer = -1 Dim maksimal As Integer = 0 Dim isterbaik As Boolean = False For i As Integer = 0 To _jumlahkromosom - 1 If _kromosom(maksimal)._fitness < _kromosom(i)._fitness Then maksimal = i If _kromosom(maksimal)._fitness = 1 Then optimal = maksimal Exit For If Not optimal = -1 Then _kromosomterbaik = _kromosom(optimal) isterbaik = True Else _kromosomterbaik = _kromosom(maksimal) isterbaik = False Return isterbaik End Function End Class 4.2 Hasil Pengujian 4.2.1 Inisialisasi Awal Inisialisasi awal bertujuan untuk menghimpun data-data dari database yang berhubungan dengan proses Algoritma Genetika yaitu membuat gen. Dalam inisialisasi awal dibutuhkan variabel berbentuk array dan list of array yang berfungsi untuk menampung parameter dan atau value yang diambil dari database.

50 Gambar 4.10 Array value dalam variabel matapelajaran 4.2.2 Inisialisasi Algoritma Genetika Setelah mendapatkan beberapa value dari inisialisasi awal, hal berikutnya adalah membuat kromosom. Variabel Populasi per gen menentukan jumlah kromosom yang dibuat, semakin tinggi nilai variabelnya semakin banyak pula jumlah kromosom yang diciptakan. Gambar 4.11 Value pada variabel kromosom

51 Pada gambar di atas dapat terlihat bahwa variabel kromosom memiliki nilai list of array 10 karena parameter yang diberikan untuk Populasi per generasi pada form adalah 10. Pada masingmasing list of array terdapat variabel gen yang berfungsi untuk menampung nilai gen yang terbentuk dari data mata pelajaran, guru pengampu, ruang, dan waktu dalam bentuk array. 4.2.3 Hitung Fitness Pada hitung fitness, setiap kromosom akan dihitung satu persatu nilai fitnessnya. Apabila fitness bernilai mendekati 1 atau nilainya 1 maka kromosom pada indeks itulah yang akan dipilih. Gambar 4.12 Nilai fitness pada salah satu kromosom Untuk menghitung fitness perlu dihitung terlebih dahulu nilai variabel pendukungnya. Sub class hitunggurubentrok dan hitungruanganbentrok berfungsi untuk mengidentifikasi berapa value untuk variabel _tabrakang untuk guru dan _tabrakanr untuk ruang. Jadi gambaran sederhananya kalau pada gen di dalam kromosom ada yang sama akan mengurangi nilai variabelnya. Dalam hal ini diasumsikan apabila ada guru yang sama mengajar di kelas berbeda dalam satu waktu maka akan terjadi bentrokan, begitu pula pada ruangan. Variabel _fitness bertipe single, karena dengan tipe data single nilai didapatkan bisa utuh. Berbeda dengan tipe data decimal yang sangat presisi pada setiap perhitungnya, tipe data single hanya mengandalkan floating number itulah yang

52 membuatnya lebih cepat memproses perhitungan. Sebagai perbandingan saat membagi angka 1 dengan 3 kemudian dikali lagi 3 maka hasilnya adalah 0.9999 kalau menggunakan tipe data decimal, tapi menghasilkan nilai 1 apabila menggunakan tipe data single. Maka dari itu dipilihlah tipe data single untuk menghitung fitness yang bernilai angka desimal yang banyak. Akan tetapi tipe data ini tidak disarankan untuk perhitungan matematika karena hanya mempunyai panjang 16 bit. Gambar 4.13 Salah satu kromosom yang nilai fitnessnya 1 4.2.4 Seleksi Setelah mendapat kromosom dengan nilai fitness 1 proses belum selesai, karena biasanya yang memiliki nilai fitness 1 tidak hanya satu kromosom saja. Oleh sebab itulah dilakukan seleksi.

53 Pada proses seleksi ada beberapa tahapan yaitu mencari nilai total fitness semua kromosom, mencari probabilitas masingmasing fitness pada setiap kromosom, mencari nilai kumulatif masing-masing fitness pada setiap kromosom, dan yang terakhir memilih kromosom yang lolos seleksi. Gambar 4.14 Kromosom yang telah terseleksi 4.2.5 Crossover / Kawin Silang Crossover atau bisa juga disebut kawin silang berfungsi untuk meng-crossover kromosom-kromosom dari hasil seleksi sehingga menghasilkan individu baru. Pada praktiknya, melakukan crossover tidaklah mudah. Sebelum di-crossover variabel terlebih dahulu dimasukkan ke dalam variabel bertipe string builder. Tipe data string builder dipilih karena ada banyak looping yang berisi banyak value. Value dari setiap variabel tersebut kemudian digunakan untuk mengisi parameter dari variabel dengan nama sebelum1 dan sebelum2 yang nantinya akan di-crossover. Kelebihan dari tipe data string builder adalah value dapat diisi perbagian, sehingga value dapat diambil pada

54 bagian belakang untuk kemudian dijadikan bahan untuk melakukan crossover. Gambar 4.15 Value sebelum crossover (string builder data type) Gambar 4.16 Value sesudah crossover (string builder data type) 4.2.6 Mutasi Mutasi digunakan untuk mendapatkan hasil tidak terduga dari suatu solusi (salah satu atau beberapa value dalam kromosom) dengan cara merubah value dari gen secara acak yang membuat gen tersebut berevolusi. Solusi itu memberikan nilai yang berbeda untuk fungsi fitness. Mutasi hanya merubah suatu kromosom, dan tidak berpengaruh kepada kromosom yang lainnya dalam populasi.

55 Gambar 4.17 Gen dari kromosom yang telah bermutasi 4.2.7 Cek Fitness Terbaik Setelah melalui banyak proses seperti yang telah dijelaskan, algoritma genetika masih mempunyai satu proses terakhir sebelum mencapai hasil. Kromosom dari populasi yang telah dibuat dicari nilai fitness yang paling tinggi. Jadi semua kromosom dicari nilai fitnessnya, dengan begitu didapatlah kromosom yang mempunyai nilai fitness tertinggi. Apabila dalam sebuah populasi tidak menemukan kromosom terbaik, maka akan dilakukan proses ulang dari awal pembentukan gen sampai cek fitness terbaik lagi sampai ditemukan fitness yang terbaik.

56 Gambar 4.18 Kromosom terbaik ditemukan 4.2.8 Hasil Hasil akan langsung ditampilkan pada DataGridView di samping menu variabel, dengan begitu jadwal langsung dapat lihat. Apabila data tidak ditampilkan maka tinggal klik tombol proses dan aplikasi akan meng-generate hasil yang lainnya. Gambar 4.16 Hasil Jadwal 4.3 Analisa Sistem Setelah melalui proses yang panjang dan rumit, aplikasi berhasil mencapai tujuan utam yaitu menghasilkan jadwal tanpa adanya tabrakan. Dari hasil pengujian diatas dapat diketahui bahwa semua data telah dimasukkan dan telah diproses menggunakan algoritma genetika oleh Skema.

57 Akan tetapi dapat terlihat masih ada beberapa bug yang sebenarnya tidak terlalu fatal akan tetapi tetap harus ada perbaikan untuk versi selanjutnya. Karena maintenance harus selalu dilakukan agar aplikasi yang dibuat mempunyai bug seminimal mungkin.