Apa sebenarnya algoritma genetika dan masalah apa yang baik untuk mereka?


16

Saya memperhatikan bahwa beberapa pertanyaan di situs ini menyebutkan algoritma genetika dan itu membuat saya sadar bahwa saya tidak tahu banyak tentang itu.

Saya pernah mendengar istilah itu sebelumnya, tapi itu bukan sesuatu yang pernah saya gunakan, jadi saya tidak punya banyak ide tentang bagaimana mereka bekerja dan untuk apa mereka baik. Yang saya tahu adalah bahwa mereka melibatkan semacam evolusi dan perubahan nilai secara acak.

Bisakah Anda memberi saya penjelasan singkat, lebih disukai termasuk semacam contoh praktis yang menggambarkan prinsip-prinsip dasar?

Jawaban:


11

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.

masukkan deskripsi gambar di sini


Terima kasih telah menjawab ini di sini! Meskipun saya pribadi berpikir ini adalah pertanyaan ideal untuk AI SE, karena ini dasar dan "tingkat tinggi", jangan malu-malu mengarahkan OP dan pembaca untuk Cross Validated untuk pertanyaan lebih lanjut tentang masalah ini, cocok untuk tumpukan itu .
DukeZhou

8

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.


Apa yang dimaksud dengan solusi ? Bisakah Anda memberi saya contoh praktis dengan masalah tertentu, jadi saya bisa membayangkan seperti apa kelihatannya?
Lurker Disenchanted

@InquisitiveLurker Saya telah menambahkan contoh. Beri tahu saya jika tidak cukup jelas; Saya akan dengan senang hati memperbarui jawaban saya.
SL Barth - Reinstate Monica

6

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.


6

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:

  • Fungsi crossover mudah didefinisikan dan alami : Ketika berhadapan dengan jenis data tertentu, fungsi crossover / mutasi mungkin mudah untuk didefinisikan. Misalnya string (mis. Urutan DNA atau gen) dapat dimutasi dengan mudah dengan menyambung dua string kandidat untuk mendapatkan yang baru (inilah sebabnya mengapa alam menggunakan algoritma genetika!). Pohon (seperti pohon filogenetik atau pohon parse) dapat disambung juga, dengan mengganti cabang dari satu pohon dengan cabang dari yang lain. Bentuk (seperti sayap pesawat atau bentuk perahu) dapat dimutasi dengan mudah dengan menggambar kotak pada bentuk dan menggabungkan bagian kotak yang berbeda dari orang tua untuk mendapatkan anak. Biasanya ini berarti masalah Anda terdiri dari bagian-bagian berbeda dan menyusun bagian-bagian dari solusi berbeda adalah solusi kandidat yang valid.
    • Ini berarti bahwa jika masalah Anda didefinisikan dalam ruang vektor di mana koordinat tidak memiliki makna khusus, GAS bukan pilihan yang baik. Jika sulit untuk merumuskan masalah Anda sebagai GA, itu tidak layak.
  • Evaluasi Black Box : Jika untuk seorang kandidat, fungsi kebugaran Anda dievaluasi di luar komputer, GAS adalah ide yang bagus. Misalnya, jika Anda menguji bentuk sayap di terowongan udara, algoritma genetika akan membantu Anda menghasilkan bentuk kandidat yang baik untuk dicoba.
    • Pengecualian: Simulasi . Jika fungsi kebugaran Anda mengukur seberapa baik kinerja nosel dan mensimulasikan dinamika fluida untuk setiap bentuk nosel, GAS dapat bekerja dengan baik untuk Anda. Mereka juga dapat bekerja jika Anda mensimulasikan sistem fisik melalui waktu dan tertarik pada seberapa baik kinerja desain Anda selama operasi misalnya. memodelkan pola gerak . Namun, metode yang menggunakan persamaan diferensial parsial sebagai kendala sedang dikembangkan dalam literatur, misalnya. Optimalisasi terbatas PDE , jadi ini mungkin berubah di masa mendatang.

Tidak tepat:

  • Anda dapat menghitung gradien untuk fungsi Anda: Jika Anda memiliki akses ke gradien fungsi Anda, Anda dapat melakukan gradient descent, yang secara umum jauh lebih efisien daripada GAS. Keturunan gradien mungkin memiliki masalah dengan minima lokal (seperti akan GAS) tetapi banyak metode telah dipelajari untuk mengurangi ini.
  • Anda tahu fungsi kebugaran dalam bentuk tertutup : Kemudian, Anda mungkin dapat menghitung gradien. Banyak bahasa memiliki perpustakaan yang mendukung diferensiasi otomatis , jadi Anda bahkan tidak perlu melakukannya secara manual. Jika fungsi Anda tidak dapat dibedakan, maka Anda dapat menggunakan keturunan subgradien .
  • Masalah optimisasi Anda adalah dari bentuk yang diketahui, seperti program linier atau program kuadratik : GAS (dan metode optimasi kotak hitam secara umum) sangat tidak efisien dalam hal jumlah kandidat yang perlu mereka evaluasi, dan sebaiknya dihindari jika memungkinkan.
  • Ruang solusi Anda kecil : Jika Anda dapat membuat grid ruang pencarian Anda secara efisien, Anda dapat menjamin bahwa Anda telah menemukan solusi terbaik, dan dapat membuat plot kontur ruang solusi untuk melihat apakah ada wilayah yang perlu Anda jelajahi lebih lanjut.

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.


CMA-ES baik untuk masalah di mana solusi dapat direpresentasikan sebagai vektor bernilai nyata.
NietzscheanAI

5

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):

  • NP-complete - Jumlah solusi yang mungkin untuk masalah ini eksponensial, tetapi memeriksa kesesuaian solusi relatif murah (secara teknis, dengan polinomial waktu dalam ukuran input).
  • Black box - GAS bekerja dengan cukup baik bahkan jika Anda tidak memiliki model masalah yang harus diselesaikan. Ini berarti bahwa pendekatan ini juga berguna sebagai pendekatan 'prototyping cepat' untuk menyelesaikan masalah.

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?"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.