Algoritma evolusi adalah keluarga algoritma pengoptimalan berdasarkan prinsip seleksi alam Darwin . Sebagai bagian dari seleksi alam, lingkungan tertentu memiliki populasi individu yang bersaing untuk bertahan hidup dan berkembang biak. Kemampuan masing-masing individu untuk mencapai tujuan-tujuan ini menentukan peluang mereka untuk memiliki anak, dengan kata lain untuk meneruskan gen mereka kepada generasi individu berikutnya, yang karena alasan genetik akan memiliki kesempatan yang meningkat untuk melakukan dengan baik, bahkan lebih baik, dalam mewujudkan ini dua tujuan.
Prinsip peningkatan berkelanjutan ini dari generasi ke generasi diambil oleh algoritma evolusioner untuk mengoptimalkan solusi untuk suatu masalah. Pada generasi awal , populasi yang terdiri dari individu yang berbeda dihasilkan secara acak atau dengan metode lain. Seorang individu adalah solusi untuk masalah, kurang lebih baik: kualitas individu sehubungan dengan masalah tersebut disebut kebugaran , yang mencerminkan kecukupan solusi untuk masalah yang harus dipecahkan. Semakin tinggi kebugaran individu, semakin tinggi kemungkinan untuk melewatkan sebagian atau semua genotipnya ke individu generasi berikutnya.
Seorang individu dikodekan sebagai genotipe , yang dapat memiliki bentuk apa pun, seperti vektor bit ** ( algoritma genetika ) atau vektor nyata (strategi evolusi). Setiap genotipe ditransformasikan menjadi fenotip ketika menilai individu, yaitu ketika kebugarannya dihitung. Dalam beberapa kasus, fenotip identik dengan genotipe: itu disebut pengkodean langsung . Kalau tidak, pengkodeannya disebut tidak langsung. Misalnya, Anda ingin mengoptimalkan ukuran paralelip persegi panjang yang ditentukan oleh panjang, tinggi, dan lebarnya. Untuk menyederhanakan contoh, asumsikan bahwa ketiga kuantitas ini adalah bilangan bulat antara 0 dan 15. Kita kemudian dapat menggambarkan masing-masing menggunakan angka biner 4-bit. Contoh dari solusi potensial mungkin untuk genotipe 0001 0111 01010. Fenotip yang sesuai adalah paralelepiped dari panjang 1, tinggi 7 dan lebar 10.
Selama transisi dari generasi lama ke generasi baru disebut operator variasi , yang tujuannya adalah untuk memanipulasi individu. Ada dua jenis operator variasi:
- yang mutasi operator , yang digunakan untuk memperkenalkan variasi dalam individu yang sama, seperti mutasi genetik;
- yang Crossover operator , yang digunakan untuk menyeberang setidaknya dua genotipe yang berbeda, seperti salib genetik dari peternakan.
Algoritma evolusi telah membuktikan diri dalam berbagai bidang seperti riset operasi, robotika, biologi, nuansa, atau kriptografi. Selain itu, mereka dapat mengoptimalkan beberapa tujuan secara bersamaan dan dapat digunakan sebagai kotak hitam karena mereka tidak mengasumsikan sifat apa pun dalam model matematika untuk dioptimalkan. Satu-satunya batasan mereka adalah kompleksitas komputasi.
Franck Dernoncourt
sumber
Algoritma genetika adalah algoritma yang secara acak menghasilkan sejumlah solusi yang dicoba untuk suatu masalah. Serangkaian solusi yang dicoba ini disebut "populasi".
Kemudian mencoba untuk melihat seberapa baik solusi ini memecahkan masalah, menggunakan fungsi kebugaran yang diberikan . Solusi yang dicoba dengan nilai kebugaran terbaik digunakan untuk menghasilkan populasi baru. Ini dapat dilakukan dengan membuat perubahan kecil pada solusi yang dicoba (mutasi) atau dengan menggabungkan solusi yang sudah ada (crossover).
Idenya adalah bahwa, seiring waktu, muncul solusi yang memiliki nilai kebugaran yang cukup tinggi untuk menyelesaikan masalah.
Inspirasi untuk ini berasal dari teori evolusi; solusi terkuat bertahan dan berkembang biak.
Contoh 1
Misalkan Anda mencari cara paling efisien untuk memotong sejumlah bentuk dari sepotong kayu. Anda ingin membuang kayu sesedikit mungkin.
Solusi yang Anda coba adalah pengaturan acak dari bentuk-bentuk ini di atas potongan kayu Anda. Kebugaran akan ditentukan oleh seberapa sedikit kayu yang tersisa setelah memotong bentuk mengikuti pengaturan ini.
Semakin sedikit kayu yang tersisa, semakin baik solusi yang dicoba.
Contoh 2
Misalkan Anda mencoba mencari polinomial yang melewati sejumlah titik. Solusi yang Anda coba adalah polinomial acak.
Untuk menentukan kesesuaian polinomial ini, Anda menentukan seberapa baik polinomial tersebut sesuai dengan poin yang diberikan. (Dalam kasus khusus ini, Anda mungkin akan menggunakan metode kuadrat terkecil untuk menentukan seberapa baik polinom sesuai dengan poin). Selama beberapa percobaan, Anda akan mendapatkan polinomial yang sesuai dengan poin lebih baik, sampai Anda memiliki polinomial yang cukup sesuai dengan poin.
sumber
Jawaban ini meminta contoh praktis tentang bagaimana seseorang dapat digunakan, yang akan saya coba berikan di samping jawaban lainnya. Mereka tampaknya karena pekerjaan yang sangat baik untuk menjelaskan apa itu algoritma genetika. Jadi, ini akan memberi contoh.
Katakanlah Anda memiliki jaringan saraf (meskipun mereka bukan satu-satunya aplikasi itu), yang, dari beberapa input yang diberikan, akan menghasilkan beberapa output. Algoritma genetik dapat membuat populasi ini, dan dengan melihat output mana yang terbaik, berkembang biak dan membunuh anggota populasi. Akhirnya, ini akan mengoptimalkan jaringan saraf jika cukup rumit.
Berikut ini adalah demonstrasi yang saya buat, yang meskipun diberi kode buruk, dapat membantu Anda memahami. http://khrabanas.github.io/projects/evo/evo.html Tekan tombol berevolusi dan dipusingkan dengan tujuan.
Ia menggunakan algoritma genetika sederhana untuk membiakkan, bermutasi, dan memutuskan di antara populasi mana yang bertahan hidup. Bergantung pada bagaimana variabel input diatur, jaringan akan dapat mencapai beberapa tingkat kedekatan dengannya. Dengan cara ini, populasi pada akhirnya akan cenderung menjadi kelompok yang homogen, yang outputnya menyerupai tujuan.
Algoritma genetika sedang mencoba membuat semacam "jaringan saraf", yang dengan menggunakan RGB, akan menghasilkan warna keluaran. Pertama menghasilkan populasi acak. Kemudian dengan mengambil 3 anggota acak dari populasi, memilih satu dengan kebugaran terendah dan mengeluarkannya dari populasi. Kebugaran sama dengan perbedaan dalam kuadrat tujuan teratas + perbedaan dalam kuadrat tujuan bawah. Kemudian membiakkan dua yang tersisa bersama-sama dan menambahkan anak ke tempat yang sama dalam populasi sebagai anggota yang mati. Ketika kawin terjadi, ada kemungkinan mutasi akan terjadi. Mutasi ini akan mengubah salah satu nilai secara acak.
Sebagai catatan tambahan, karena cara pengaturannya, tidak mungkin untuk sepenuhnya benar dalam banyak kasus, meskipun akan mencapai kedekatan relatif.
sumber
Ada sejumlah jawaban yang baik di sini menjelaskan apa itu algoritma genetika, dan memberikan contoh aplikasi. Saya menambahkan beberapa saran tujuan umum tentang apa manfaatnya, tetapi juga kasus di mana Anda TIDAK boleh menggunakannya. Jika nada suara saya kelihatan kasar, itu karena menggunakan GAS dalam salah satu kasus di bagian Tidak Sesuai akan menyebabkan makalah Anda langsung ditolak dari jurnal papan atas.
Pertama, masalah Anda HARUS menjadi masalah optimasi. Anda perlu mendefinisikan "fungsi kebugaran" yang Anda coba optimalkan dan Anda perlu memiliki cara untuk mengukurnya.
Baik:
Tidak tepat:
Akhirnya, jika Anda mempertimbangkan GA, pertimbangkan pekerjaan yang lebih baru di Strategi Evolusi. Saya bias terhadap CMA-ES , yang saya pikir merupakan algoritma sederhana yang bagus yang menangkap gagasan gradien dalam lanskap kebugaran dengan cara yang tidak dilakukan oleh GAS tradisional.
sumber
Seperti yang diamati dalam jawaban lain, yang Anda butuhkan untuk menerapkan Algoritma Genetika (GAS) adalah mewakili solusi potensial untuk masalah Anda dalam bentuk yang tunduk pada crossover dan mutasi. Idealnya, fungsi kebugaran akan memberikan semacam umpan balik halus tentang kualitas solusi, daripada sekadar menjadi 'Needle in a Haystack'.
Berikut adalah beberapa karakteristik masalah yang baik untuk Algoritma Genetika (dan memang Metaheuristik pada umumnya):
Namun, meskipun digunakan secara luas untuk tujuan tersebut, perhatikan bahwa GAS sebenarnya bukan pengoptimal fungsi - mekanisme GA cenderung untuk tidak menjelajahi wilayah 'terpencil' di ruang pencarian dengan harapan menemukan beberapa solusi berkualitas tinggi yang jauh, tetapi lebih untuk mengelompokkan lebih banyak lagi puncak yang mudah dicapai di 'lanskap kebugaran'.
Rincian lebih lanjut tentang penerapan GAS diberikan dalam makalah awal yang terkenal "Apa yang membuat masalah sulit untuk Algoritma Genetika?"
sumber