Algoritma GA (Genetic Algorithm) / Algoritma Genetika 36


Algoritma Genetika adalah salah satu algoritma yang digunakan untuk mengoptimasi hasil akhir berdasarkan sebaran inputan data acak. Contoh kasus yang akan dibahas kali ini adalah untuk mengoptimasi performa mobil dengan mengupgrade parts tertentu.
Algoritma Genetika adalah proses pencarian yang didasarkan pada seleksi alam. Teknik ini secara umum digunakan untuk menghasilkan solusi optimasi dan teknik pencarian. Algoritma Genetika menggunakan teknik yang diinspirasi dari teori evolusi alam, seperti seleksi, warisan, crossover, dan mutasi.



Pada contoh kasus ini, diasumsikan ada 3 kategori parts yang ingin diupgrade, yaitu knalpot, rem, dan mesin.
Masing-masing item memiliki biaya sendiri dan besar poin performa yang dihasilkan.
Maka tentukan pasangan parts dengan jumlah poin performa paling tinggi dan biayanya termasuk dalam biaya yang dimiliki
Contoh data untuk masing-masing kategori adalah sebagai berikut

Knalpot
Nama ItemBiayaPoin Performa
Knalpot 1250010
Knalpot 2500015
Knalpot 3350011
Knalpot 420008
Knalpot 5400012
Rem
Nama ItemBiayaPoin Performa
Rem 15003
Rem 210005
Rem 38004
Rem 47004
Rem 512006
Mesin
Nama ItemBiayaPoin Performa
Mesin 11000030
Mesin 2900025
Mesin 31200040
Mesin 41050033
Mesin 5950028

Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data adalah sebagai berikut

Dim knalpot(4, 1) As Double
knalpot(0, 0) = 2500
knalpot(0, 1) = 10
knalpot(1, 0) = 5000
knalpot(1, 1) = 15
knalpot(2, 0) = 3500
knalpot(2, 1) = 11
knalpot(3, 0) = 2000
knalpot(3, 1) = 8
knalpot(4, 0) = 4000
knalpot(4, 1) = 12

Dim brake(4, 1) As Double
brake(0, 0) = 500
brake(0, 1) = 3
brake(1, 0) = 1000
brake(1, 1) = 5
brake(2, 0) = 800
brake(2, 1) = 4
brake(3, 0) = 700
brake(3, 1) = 4
brake(4, 0) = 1200
brake(4, 1) = 6

Dim mesin(4, 1) As Double
mesin(0, 0) = 10000
mesin(0, 1) = 30
mesin(1, 0) = 9000
mesin(1, 1) = 25
mesin(2, 0) = 12000
mesin(2, 1) = 40
mesin(3, 0) = 10500
mesin(3, 1) = 33
mesin(4, 0) = 9500
mesin(4, 1) = 28



Sebelum masuk kedalam bagian perhitungan, ada beberapa inputan data yang harus diketahui, yaitu
* Tentukan besar modal yang dimiliki
Diasumsikan dalam kasus ini, modal yang tersedia adalah 15000

Const modal As Double = 15000

* Tentukan iterasi
Diasumsikan dalam kasus ini, akan dilakukan 5 kali perulangan mutasi dan crossover dalam sekali perhitungan

Const jumlahIterasi As Double = 5

* Tentukan besar popsize
popsize adalah jumlah baris data yang dibuat dalam satu kali iterasi
Diasumsikan dalam kasus ini, jumlah popsize adalah 10

Const popsize As Double = 10

* Tentukan probabilitas crossover
probabilitas crossover adalah persentase jumlah baris data crossover yang dibuat dalam satu kali iterasi
nantinya jumlah baris data crossover = popsize * probabilitas crossover
Diasumsikan dalam kasus ini, probabilitas crossover adalah 0.4, sehingga nantinya muncul 4 baris data crossover

Const crossover As Double = 0.4

* Tentukan probabilitas mutasi
probabilitas mutasi adalah persentase jumlah baris data mutasi yang dibuat dalam satu kali iterasi
nantinya jumlah baris data mutasi = popsize * probabilitas mutasi
Diasumsikan dalam kasus ini, probabilitas mutasi adalah 0.3, sehingga nantinya muncul 3 baris data mutasi

Const mutasi As Double = 0.3

Langkah-langkah penggunaan algoritma ini adalah

1. Inisialisasi Populasi awal
Populasi adalah baris data sebanyak inputan popsize.
Isi dari populasi adalah pengambilan data secara acak dari masing-masing kategori
Jika total biaya pada baris acak tersebut melebihi modal, maka ulangi pengambilan acak.

iIndeksPopulasi(iPopsize, 0) = rnd.Next(0, 4)
iIndeksPopulasi(iPopsize, 1) = rnd.Next(0, 4)
iIndeksPopulasi(iPopsize, 2) = rnd.Next(0, 4)

iPopulation(iPopsize, 0) = knalpot(iIndeksPopulasi(iPopsize, 0), 0)
iPopulation(iPopsize, 1) = brake(iIndeksPopulasi(iPopsize, 1), 0)
iPopulation(iPopsize, 2) = mesin(iIndeksPopulasi(iPopsize, 2), 0)

Dim iTotal As Double = iPopulation(iPopsize, 0) + iPopulation(iPopsize, 1) + iPopulation(iPopsize, 2)
If iTotal > modal Then Continue Do

2. Hitung Fitness untuk setiap baris data
Semakin tinggi nilai fitness, maka baris data tersebut semakin mendekati data optimal
Rumus untuk nilai fitness bisa disesuaikan, tergantung banyak parameter yang ingin digunakan dalam perhitungan
Diasumsikan dalam kasus ini, rumus nilai fitness adalah hanya melalui jumlah poin performa yang dihasilkan masing-masing parts terpilih

iPopulation(iPopsize, 3) = knalpot(iIndeksPopulasi(iPopsize, 0), 1) + brake(iIndeksPopulasi(iPopsize, 1), 1) + mesin(iIndeksPopulasi(iPopsize, 2), 1)

3. Lakukan perhitungan crossover
Crossover adalah pembuatan baris data baru berdasarkan baris data pada populasi awal
Ambil 2 baris data awal secara acak, kemudian tukar datanya pada sebuah kategori acak, catat hasilnya menjadi 2 baris data baru
Inputan probabilitas = 0.4, maka akan dihasilkan 0.4 * 10 = 4 data baru
Karena dalam sekali perhitungan menghasilkan 2 baris data baru, maka hanya perlu melakukan 2x perhitungan

Dim iIndeksDataAwal1 As Integer = 0
Dim iIndeksDataAwal2 As Integer = 0
Dim iIndeksTukar As Integer = 0

Do While iIndeksDataAwal1 = iIndeksDataAwal2
	iIndeksDataAwal1 = rnd.Next(0, popsize - 1)
	iIndeksDataAwal2 = rnd.Next(0, popsize - 1)
	iIndeksTukar = rnd.Next(0, 2)
Loop

iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 1), 0) = iIndeksPopulasi(IIf(iIndeksTukar = 0, iIndeksDataAwal2, iIndeksDataAwal1), 0)
iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 1), 1) = iIndeksPopulasi(IIf(iIndeksTukar = 1, iIndeksDataAwal2, iIndeksDataAwal1), 1)
iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 1), 2) = iIndeksPopulasi(IIf(iIndeksTukar = 2, iIndeksDataAwal2, iIndeksDataAwal1), 2)

iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 2), 0) = iIndeksPopulasi(IIf(iIndeksTukar = 0, iIndeksDataAwal1, iIndeksDataAwal2), 0)
iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 2), 1) = iIndeksPopulasi(IIf(iIndeksTukar = 1, iIndeksDataAwal1, iIndeksDataAwal2), 1)
iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 2), 2) = iIndeksPopulasi(IIf(iIndeksTukar = 2, iIndeksDataAwal1, iIndeksDataAwal2), 2)

iPopulation(popsize - 1 + (iCrossover * 2 + 1), 0) = iPopulation(IIf(iIndeksTukar = 0, iIndeksDataAwal2, iIndeksDataAwal1), 0)
iPopulation(popsize - 1 + (iCrossover * 2 + 1), 1) = iPopulation(IIf(iIndeksTukar = 1, iIndeksDataAwal2, iIndeksDataAwal1), 1)
iPopulation(popsize - 1 + (iCrossover * 2 + 1), 2) = iPopulation(IIf(iIndeksTukar = 2, iIndeksDataAwal2, iIndeksDataAwal1), 2)

iPopulation(popsize - 1 + (iCrossover * 2 + 2), 0) = iPopulation(IIf(iIndeksTukar = 0, iIndeksDataAwal1, iIndeksDataAwal2), 0)
iPopulation(popsize - 1 + (iCrossover * 2 + 2), 1) = iPopulation(IIf(iIndeksTukar = 1, iIndeksDataAwal1, iIndeksDataAwal2), 1)
iPopulation(popsize - 1 + (iCrossover * 2 + 2), 2) = iPopulation(IIf(iIndeksTukar = 2, iIndeksDataAwal1, iIndeksDataAwal2), 2)

Dim iTotal As Double = iPopulation(popsize - 1 + (iCrossover * 2 + 1), 0) + iPopulation(popsize - 1 + (iCrossover * 2 + 1), 1) + iPopulation(popsize - 1 + (iCrossover * 2 + 1), 2)
If iTotal > modal Then Continue Do
Dim iTotal2 As Double = iPopulation(popsize - 1 + (iCrossover * 2 + 2), 0) + iPopulation(popsize - 1 + (iCrossover * 2 + 2), 1) + iPopulation(popsize - 1 + (iCrossover * 2 + 2), 2)
If iTotal2 > modal Then Continue Do

4. Hitung Fitness untuk setiap baris data baru pada perhitungan crossover

iPopulation(popsize - 1 + (iCrossover * 2 + 1), 3) = knalpot(iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 1), 0), 1) + brake(iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 1), 1), 1) + mesin(iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 1), 2), 1)
iPopulation(popsize - 1 + (iCrossover * 2 + 2), 3) = knalpot(iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 2), 0), 1) + brake(iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 2), 1), 1) + mesin(iIndeksPopulasi(popsize - 1 + (iCrossover * 2 + 2), 2), 1)

5. Lakukan perhitungan mutasi
Mutasi adalah pembuatan baris data baru berdasarkan baris data pada populasi awal
Ambil 1 baris data awal secara acak, kemudian ganti data pada sebuah kategori acak, catat hasilnya menjadi baris data baru
Inputan probabilitas = 0.3, maka akan dihasilkan 0.3 * 10 = 3 data baru

Dim iParentIndeks As Integer = 0
Dim iIndeksTukar As Integer = 0

iParentIndeks = rnd.Next(0, popsize - 1)
iIndeksTukar = rnd.Next(0, 2)

If iIndeksTukar = 0 Then
	Dim iIndeksMasterItem As Double = -1
	Do While iIndeksMasterItem = -1 Or iIndeksMasterItem = iIndeksPopulasi(iParentIndeks, 0)
		iIndeksMasterItem = rnd.Next(0, 4)
	Loop

	iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 0) = iIndeksMasterItem
	iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 0) = knalpot(iIndeksMasterItem, 0)
Else
	iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 0) = iIndeksPopulasi(iParentIndeks, 0)
	iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 0) = iPopulation(iParentIndeks, 0)
End If

If iIndeksTukar = 1 Then
	Dim iIndeksMasterItem As Double = -1
	Do While iIndeksMasterItem = -1 Or iIndeksMasterItem = iIndeksPopulasi(iParentIndeks, 1)
		iIndeksMasterItem = rnd.Next(0, 4)
	Loop

	iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 1) = iIndeksMasterItem
	iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 1) = brake(iIndeksMasterItem, 0)
Else
	iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 1) = iIndeksPopulasi(iParentIndeks, 1)
	iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 1) = iPopulation(iParentIndeks, 1)
End If

If iIndeksTukar = 2 Then
	Dim iIndeksMasterItem As Double = -1
	Do While iIndeksMasterItem = -1 Or iIndeksMasterItem = iIndeksPopulasi(iParentIndeks, 2)
		iIndeksMasterItem = rnd.Next(0, 4)
	Loop

	iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 2) = iIndeksMasterItem
	iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 2) = mesin(iIndeksMasterItem, 0)
Else
	iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 2) = iIndeksPopulasi(iParentIndeks, 2)
	iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 2) = iPopulation(iParentIndeks, 2)
End If

Dim iTotal As Double = iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 0) + iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 1) + iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 2)
If iTotal > modal Then Continue Do

6. Hitung Fitness untuk baris data baru pada perhitungan mutasi

iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 3) = knalpot(iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 0), 1) + brake(iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 1), 1) + mesin(iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + (iMutasi + 1), 2), 1)

7. Urutkan baris data ini berdasarkan fitness tertinggi
Kemudian ambil data sebanyak popsize, dan data ini akan digunakan untuk perhitungan selanjutnya

Dim dt As DataTable
dt = New DataTable
dt.Rows.Clear()
dt.Columns.Clear()
dt.Columns.Add("No")
dt.Columns.Add("Knalpot")
dt.Columns.Add("Rem")
dt.Columns.Add("Mesin")
dt.Columns.Add("Fitness")
dt.Columns("Fitness").DataType = GetType(Double)

Dim dr As DataRow
For i As Integer = 0 To UBound(iPopulation)
	dr = dt.NewRow
	dr(0) = i
	For j As Integer = 0 To 3
		dr(j + 1) = iPopulation(i, j)
	Next

	dt.Rows.Add(dr)
Next

Dim dv As DataView = dt.DefaultView
dv.Sort = "Fitness DESC"
dt = dv.ToTable

ReDim iPopulation(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + iPopulasiMutasi, 3)

For i As Integer = 0 To popsize - 1
	For j As Integer = 0 To 3
		iPopulation(i, j) = dt.Rows(i)(j + 1)
	Next
Next

Dim iSortIndeks(popsize - 1) As Double
For i As Integer = 0 To popsize - 1
	iSortIndeks(i) = dt.Rows(i)(0)
Next

Dim dt2 As DataTable
dt2 = New DataTable
dt2.Rows.Clear()
dt2.Columns.Clear()
dt2.Columns.Add("No")
dt2.Columns.Add("Knalpot")
dt2.Columns.Add("Rem")
dt2.Columns.Add("Mesin")
dt2.Columns.Add("Fitness")
dt2.Columns("Fitness").DataType = GetType(Double)

For i As Integer = 0 To UBound(iIndeksPopulasi)
	dr = dt2.NewRow
	dr(0) = i
	For j As Integer = 0 To 3
		dr(j + 1) = iIndeksPopulasi(i, j)
	Next

	dt2.Rows.Add(dr)
Next

ReDim iIndeksPopulasi(popsize - 1 + Math.Round(iPopulasiCrossover / 2) * 2 + iPopulasiMutasi, 3)

For i As Integer = 0 To popsize - 1
	For j As Integer = 0 To 3
		iIndeksPopulasi(i, j) = dt2.Rows(iSortIndeks(i))(j + 1)
	Next
Next

8. Ulangi perhitungan crossover, mutasi dan sorting (point nomor 3 – 7) sebanyak parameter jumlah iterasi
Setelah itu akan didapatkan data paling optimal, yaitu baris data paling awal / pertama

/br>

Hasil akhir adalah: (klik untuk perbesar gambar)

cmd3c

Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.


Tinggalkan Balasan ke Alvin S. Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

36 pemikiran di “Algoritma GA (Genetic Algorithm) / Algoritma Genetika

  • Chandra

    Sore min, makasih sudah bahas algoritma genetika dan ada source codenya. Jadi agak paham2 dikit judul skripsi yang dipilihin dosen karena pas pengumpulan saya telat. 🙁

    Masalahnya yang dibahas penjadwalan otomatis dan saya bingung mulai darimana bikinnya. Struktur gennya ada saran min? Benar2 ngeblank soalnya.

    Terima kasih.

    • pip Penulis

      Sebelumnya saya ucapkan terima kasih telah berkunjung ke situs saya.

      Saya ingin bertanya, penjadwalan tentang apakah yang dimaksud, karena ada banyak contoh kasus penjadwalan.
      Disini saya asumsikan saja penjadwalan yang dimaksud adalah penjadwalan mata kuliah. Mudah-mudahan pemisalan ini cocok dengan kasus anda.
      Untuk penjadwalan mata kuliah, maka
      Gen adalah mata kuliah itu sendiri.
      Populasi adalah jumlah mata kuliah yang diperbolehkan dalam sebuah jadwal kuliah.
      Nilai Fitness bisa dihitung dari jumlah menit / sks dari masing-masing mata kuliah, semakin tinggi nilainya, berarti semakin banyak mata kuliah yang masuk ke dalam jadwal.

      Sebagai langkah awal pembuatan program, silahkan anda download contoh source code yang sudah saya sediakan pada halaman ini. Setelah Anda mempelajari dan memahami alur program tersebut, maka anda cukup melakukan sedikit modifikasi skrip agar sesuai dengan contoh kasus anda. Jika masih memiliki kesulitan dalam pembuatan program, bisa langsung menggunakan jasa saya 🙂
      Semoga membantu

      • Chandra

        Penjadwalan kelas laboratorium min, jadi yang mengajar nanti adalah asisten dosen. Bingung mau mulai darimana soalnya, jumlah ruangnya kan terbatas, asdos sendiri juga punya jadwal kuliah sendiri, belum lagi mata kuliah yang diajarkan kan tergantung asdosnya mampu ngajar atau tidak, apalagi ada kuota minimalnya.

        Sudah didownload min, tapi di laptop masih pakai Visual Studio 2008. Ngefek ga? Baca2 source codenya tetap galau bagaimana jadi penjadwalannya. 🙁

        Nanti kalau sudah frustasi ane minta bantuannya min, ortu udah kasih deadline tahun depan soalnya. Bisa dibantu teorinya juga kan min jasanya?

        • pip Penulis

          Saya kira penjadwalan mata kuliah, ternyata penjadwalan kelas laboratorium. Tapi pada intinya kedua topik tersebut mirip, sehingga:
          gen adalah mata kuliah yang diajarkan
          populasi adalah beberapa solusi jadwal kuliah yang tersusun dari beberapa mata kuliah
          nilai fitness dihitung dari jumlah menit / sks dari semua mata kuliah dalam jadwal

          Sewaktu men-generate populasi awal secara acak, setiap gen yang dimasukkan dalam populasi harus sudah memenuhi syarat-syarat yang ada. Disinilah dilakukan pengecekan seperti keterbatasan jumlah ruang, jadwal kuliah asdos, dan kuota minimal. Semakin banyak syarat-syarat yang diajukan, maka semakin kompleks program yang dibuat.
          Setelah populasi sudah terbentuk, maka perlu dilakukan proses crossover dan mutasi pada 1 atau beberapa gen. Setelah mengalami proses tersebut, maka harus dilakukan pengecekan syarat-syarat diatas agar populasi yang terbentuk masih tetap memenuhi syarat-syarat yang ada.
          Langkah terakhir adalah melakukan seleksi populasi untuk digunakan dalam perhitungan berikutnya. Populasi dengan nilai fitness yang lebih tinggi akan disimpan, dan sisanya akan dibuang. Kemudian lakukan kembali proses crossover dan mutasi sampai batasan perulangan sudah terpenuhi.

          Pada intinya, tingkat kesulitan program tergantung syarat-syarat yang digunakan. Jika tidak ingin programnya terlalu susah, jangan terlalu banyak memasukkan syarat dalam pembentukan jadwal kuliah. Hal tersebut bisa dicegah dalam penulisan batasan masalah pada laporan skripsi anda. Daripada anda kesulitan sendiri dalam membuat program, lebih baik syarat-syarat nya dikurangi. Jika tetap ingin memasukkan syarat-syarat tersebut, dan masih kesulitan dalam pembuatan programnya, bisa menggunakan jasa saya 🙂

          Skrip yang saya sertakan diatas saya buat dengan menggunakan Microsoft Visual Studio 2012. Lebih aman jika anda menggunakan software tersebut, tetapi bisa saja anda coba dengan versi yang lebih lama. Jika tidak ada perbedaan sintaks antara kedua tahun tersebut, seharusnya tidak akan menyebabkan error.

          Penjelasan teori juga bisa saya bantu apabila masih terdapat kesulitan. Silahkan hubungi saya melalui salah satu kontak yang terdapat pada halaman Hubungi kami. Terima kasih.

        • Chandra

          Haduh, tambah pusing min. Id line dan whatsappnya sudah kuadd min, konsultasi lewat sana. proposal tugas akhir sudah kukirim lewat email [email protected]. tolong dibantu enaknya gimana min. Makasih.

        • pip Penulis

          Baik, komunikasi selanjutnya kita lakukan secara pribadi.

          Terima kasih telah berkunjung di website ini, dan terima kasih karena telah menggunakan jasa kami.

  • Shinta

    min, bisa dijelaskan tentang perbedaan serta kegunaan algoritma kelelawar dengan algoritma genetika? Apakah algoritma kelelawar juga dapat digunakan untuk pengoptimalan penjadwalan?

  • Bobby Kevin Shearer

    Min, mau nanya dong. Kalo untuk optimasi tata letak ruangan apakah bisa menggunakan GA selain dengan VB? Karena saya sedang menyusun laporan kerja praktek dengan topik tsb. Thanks

    • pip Penulis

      Semua topik yang memiliki tujuan penelitian untuk mengoptimasi tentu saja pada umumnya bisa diselesaikan dengan semua algoritma pada kategori Algoritma Optimasi termasuk di dalamnya adalah algoritma pada pos ini. Tetapi tetap harus melihat secara spesifik, karena kondisi masing-masing kasus akan berbeda, sehingga mungkin ada algoritma tertentu yang jauh lebih baik digunakan daripada algoritma ini.

  • Alvin S.

    Permisi Mas saya mau bertanya, bila kasus tersebut saya asumsikan dengan kasu pencarian rute terpendek apakah akan tetap sama ?
    Terima kasih atas ilmu yang sangat bermanfaat ini mas
    assalamu’alaikum

    • pip Penulis

      Algoritma ini tentu saja bisa digunakan untuk menyelesaikan permasalahan pencarian jalur terpendek. Yang perlu anda lakukan adalah membangkitkan populasi dengan menggunakan jalur acak dan kemudian mengganti nilai fitness dengan menghitung nilai jarak (karena kasus anda adalah pencarian jalur terpendek).

      • Alvin S.

        Terima Kasih Mas Infonya, sekarang setelah saya melihat contoh yang sampean share kok saya berpikir sepertinya mutasinya kok tidak ada fungsinya ya mas ? atau saya yg kurang paham. Maaf mas mohon dijelaskan. Terima Kasih Mas
        Assalamu’alaikum

        • pip Penulis

          Mutasi adalah salah satu proses dari algoritma genetika, dimana individu yang terpilih akan mengalami mutasi gen, yaitu perubahan nilai gen individu tersebut tanpa dipengaruhi oleh faktor luar. Proses ini adalah salah satu cara untuk menemukan solusi yang lebih baik daripada solusi sebelumnya. Walaupun dalam implementasi ternyata tidak ditemukan solusi yang lebih baik, prosesnya harus tetap disertakan karena merupakan bagian dari algoritma ini.

    • pip Penulis

      Tentu saja hal tersebut dapat dilakukan, tetapi tidak dapat dijelaskan secara mudah karena topik yang saya gunakan disini berbeda dengan topik optimasi fungsi Himmelblau yang saya gunakan pada pembahasan algoritma lainnya. Diperlukan penyesuaian skrip di beberapa bagian agar dapat melakukan hal tersebut

    • pip Penulis

      Pada kasus penjadwalan berarti anda perlu memasukkan mata kuliah ke dalam slot jadwal kuliah sesuai ketentuan yang telah disepakati. Cara perhitungan fitness dapat dilakukan dengan mencari jadwal kuliah dengan isian terbanyak / sks terbanyak / slot kosong paling sedikit / kondisi – kondisi lainnya

  • Aditya

    Dari beberapa penelitian Algoritma k-Nearest Neighbor, untuk nilai K bisa dioptimalkan dengan menggunakan Algoritma Genetika.
    Nah kira-kira bagaimana gan cara mengimplementasikannya?

    • pip Penulis

      Tentu saja hal tersebut dapat dilakukan. Pada intinya setiap kali perulangan dalam algoritma genetika akan digunakan nilai K yang berbeda untuk mencari nilai K manakah yang memberikan hasil paling baik.

  • allansyah

    boss bisa minta program dengan kasus yg di atas gk boss?
    ana disuru buat program dengan metode AG (tugas Kampus )
    tapi ane bingung boss cara buat nya.
    terimakasih seblmnya boss

  • Allansyah

    bang bisa minta file project di atas gk bang..
    biar ane langsung Run aja bang…
    soal ane dsru buat program algoritma genetik ( tugas kuliah )
    dan waktunya udah mepet bang…
    ane belum terlalu faham dengan visual basik
    Trimaksih sebelumnya….

    • pip Penulis

      File diatas sudah merupakan file proyek secara keseluruhan. Setelah anda menjalankan VIsual Studio, buat proyek baru dengan tipe “Console Application”, kemudian salin isi skrip pada file yang disediakan atau anda bisa menimpa langsung modul kosong pada proyek tersebut

    • pip Penulis

      Saya tidak memiliki contoh kasus untuk menyelesaikan permasalahan TSP, walaupun seharusnya algoritma ini secara umum dapat digunakan untuk menyelesaikan kasus tersebut.

      • Calvin yonathan

        Saya memiliki judul skripsi untuk penentuan vendor pada wedding organizer (nah penentuan vendor ini berlaku untuk customer jadi seperti rekomendasi vendor untuk customer berdasarkan list yang ada dengan atribut : harga, jumlah undangan, venue : indoor atau outdoor, lokasi : jakbar jaksel jakpus jaktim jakut, bridal : internasional atau adat) yang menjadi permasalahan pada algoritma nya, apakah algoritma genetika ini bisa digunakan? Jika tidak adakah rekomendasi saran algoritma yang dapat membantu saya? Mohon dijawab terimakasih

        • pip Penulis

          Berdasarkan deskripsi yang anda berikan sepertinya lebih cocok apabila menggunakan beberapa algoritma klasifikasi yang tersedia pada kategori https://piptools.net/category/algoritma/algortima-pengelompokan-klasifikasi-data/ , akan tetapi algoritma optimasi seperti GA seharusnya juga dapat diterapkan pada kasus tersebut. Mengingat saya tidak mengetahui data yang anda pakai, maka gambaran yang saya dapatkan adalah mencari bobot dari masing-masing atribut yang kemudian diaplikasikan pada setting atribut yang dipilih oleh pengguna.

    • pip Penulis

      Jika yang anda maksud adalah parameter crossover maka nilai tersebut biasanya sudah dijelaskan jika anda mengacu pada referensi jurnal yang membahas algoritma yang sama. Tentunya nilai parameter ini sebaiknya diubah agar sesuai dengan nilai parameter dari referensi jurnal tersebut.

  • sari

    maaf mau tanya, untuk indeksPopulasi, iPopulation, dan rnd apakah sebelumnya di inisialisasikan?
    saya mencoba download source codenya tidak bisa min.. untuk belajar..

    • pip Penulis

      Contoh modul yang saya rancang dilakukan dengan menggunakan bahasa Visual Basic .NET. Pada bahasa tersebut, semua variabel yang digunakan harus dideklarasikan terlebih dahulu tetapi tidak wajib untuk diinisialisasikan. Akan tetapi semua variabel tetap saya inisialisasikan agar tidak terjadi kesalahan nilai yang ingin saya gunakan.

      Saya baru saja mencoba tombol download modul dan masih berjalan dengan baik. Silahkan anda coba kembali.

    • pip Penulis

      Pembacaan data dari database tentunya dapat dilakukan. Hal tersebut saya hindari karena modul yang saya bagikan sebisa mungkin tidak bergantung pada library tertentu sehingga dapat dijalankan secara murni pada visual studio versi manapun.