Algoritma genetika (GA) dan pemrograman genetik (GP) adalah bidang penelitian yang menarik.
Saya ingin tahu tentang masalah spesifik yang telah Anda selesaikan menggunakan GA / GP dan perpustakaan / kerangka kerja apa yang Anda gunakan jika Anda tidak menggulirnya sendiri.
Pertanyaan:
- Masalah apa yang Anda gunakan GA / GP untuk memecahkan?
- Pustaka / kerangka apa yang Anda gunakan?
Saya mencari pengalaman langsung, jadi tolong jangan menjawab kecuali Anda memilikinya.
Jawaban:
Bukan pekerjaan rumah.
Pekerjaan pertama saya sebagai programmer profesional (1995) adalah menulis sistem perdagangan otomatis berbasis-genetika untuk masa depan S&P500. Aplikasi ini ditulis dalam Visual Basic 3 [!] Dan saya tidak tahu bagaimana saya melakukan sesuatu saat itu, karena VB3 bahkan tidak memiliki kelas.
Aplikasi dimulai dengan populasi string panjang tetap yang dihasilkan secara acak (bagian "gen"), yang masing-masing sesuai dengan bentuk spesifik dalam data harga menit-demi-menit dari futures S & P500, serta pesanan khusus (beli atau jual) dan jumlah stop-loss dan stop-profit. Setiap string (atau "gen") memiliki kinerja laba yang dievaluasi dengan menjalankan selama 3 tahun data historis; kapan pun "bentuk" yang ditentukan cocok dengan data historis, saya mengasumsikan pesanan beli atau jual yang sesuai dan mengevaluasi hasil perdagangan. Saya menambahkan peringatan bahwa setiap gen dimulai dengan jumlah uang tetap dan dengan demikian berpotensi bangkrut dan dikeluarkan dari kumpulan gen sepenuhnya.
Setelah setiap evaluasi populasi, para penyintas dikawinkan silang secara acak (dengan hanya mencampur bit dari dua orang tua), dengan kemungkinan gen dipilih sebagai orang tua yang sebanding dengan keuntungan yang dihasilkannya. Saya juga menambahkan kemungkinan mutasi titik untuk sedikit mempercantik. Setelah beberapa ratus generasi ini, saya berakhir dengan populasi gen yang dapat mengubah $ 5.000 menjadi rata-rata sekitar $ 10.000 tanpa kemungkinan kematian / kerusakan (pada data historis, tentu saja).
Sayangnya, saya tidak pernah mendapat kesempatan untuk menggunakan sistem ini secara langsung, karena bos saya kehilangan hampir $ 100.000 dalam waktu kurang dari 3 bulan berdagang dengan cara tradisional, dan ia kehilangan kesediaannya untuk melanjutkan proyek. Dalam retrospeksi, saya pikir sistem akan menghasilkan keuntungan besar - bukan karena saya harus melakukan sesuatu dengan benar, tetapi karena populasi gen yang saya hasilkan cenderung bias terhadap pesanan pembelian (sebagai lawan dari menjual pesanan) sekitar 5: 1 rasio. Dan seperti yang kita ketahui dengan tinjauan 20/20, pasar naik sedikit setelah 1995.
sumber
each of which corresponded to a specific shape in the minute-by-minute price data
?Saya membuat makhluk kecil yang hidup di dunia kecil ini. Mereka memiliki otak jaringan saraf yang menerima beberapa input dari dunia dan hasilnya adalah vektor untuk gerakan di antara tindakan lainnya. Otak mereka adalah "gen".
Program ini dimulai dengan populasi acak makhluk dengan otak acak. Input dan output neuron statis tetapi apa yang ada di antaranya tidak.
Lingkungan mengandung makanan dan bahaya. Makanan meningkatkan energi dan ketika Anda memiliki energi yang cukup, Anda dapat kawin. Bahaya akan mengurangi energi dan jika energi 0, mereka mati.
Akhirnya makhluk berevolusi untuk bergerak di seluruh dunia dan menemukan makanan dan menghindari bahaya.
Saya kemudian memutuskan untuk melakukan percobaan kecil. Saya memberi otak makhluk itu output neuron yang disebut "mulut" dan input neuron yang disebut "telinga". Mulai lagi dan terkejut menemukan bahwa mereka berevolusi untuk memaksimalkan ruang dan setiap makhluk masing-masing akan tinggal di bagian masing-masing (makanan ditempatkan secara acak). Mereka belajar untuk bekerja sama satu sama lain dan tidak saling menghalangi. Selalu ada pengecualian.
Kemudian saya mencoba sesuatu yang menarik. Aku makhluk mati akan menjadi makanan. Coba tebak apa yang terjadi! Dua jenis makhluk berevolusi, makhluk yang menyerang seperti di kawanan, dan makhluk yang sangat dihindari.
Jadi apa pelajarannya di sini? Komunikasi berarti kerja sama. Segera setelah Anda memperkenalkan elemen di mana menyakiti orang lain berarti Anda mendapatkan sesuatu, maka kerja sama hancur.
Saya bertanya-tanya bagaimana ini mencerminkan sistem pasar bebas dan kapitalisme. Maksud saya, jika bisnis dapat melukai pesaing mereka dan lolos begitu saja , maka jelas mereka akan melakukan segala daya mereka untuk melukai pesaing.
Edit:
Saya menulisnya di C ++ tanpa menggunakan kerangka kerja. Menulis kode neural net dan GA saya sendiri. Eric, terima kasih telah mengatakan itu masuk akal. Orang-orang biasanya tidak percaya pada kekuatan GA (meskipun batasannya jelas) sampai mereka memainkannya. GA sederhana tetapi tidak sederhana.
Untuk yang ragu, jaring saraf telah terbukti dapat mensimulasikan fungsi apa pun jika mereka memiliki lebih dari satu lapisan. GA adalah cara yang cukup sederhana untuk menavigasi ruang solusi menemukan lokal dan berpotensi minimum global. Kombinasikan GA dengan jaring saraf dan Anda memiliki cara yang cukup baik untuk menemukan fungsi yang menemukan solusi perkiraan untuk masalah umum. Karena kami menggunakan jaring saraf, maka kami mengoptimalkan fungsi untuk beberapa input, bukan beberapa input ke fungsi karena yang lain menggunakan GA
Berikut ini adalah kode demo untuk contoh survival: http://www.mempko.com/darcs/neural/demos/eaters/ Membangun instruksi:
darcs clone --lazy http://www.mempko.com/darcs/neural/
cd neural
cmake .
make
cd demos/eaters
./eaters
sumber
Pada Januari 2004, saya dihubungi oleh Philips New Display Technologies yang menciptakan elektronik untuk e-ink komersial pertama, Sony Librie, yang baru dirilis di Jepang, bertahun-tahun sebelum Amazon Kindle dan yang lainnya masuk ke pasar di AS. sebuah Eropa.
Insinyur Philips memiliki masalah besar. Beberapa bulan sebelum produk seharusnya memasuki pasar, mereka masih mendapatkan ghosting di layar ketika mengganti halaman. Masalahnya adalah 200 driver yang menciptakan medan elektrostatik. Masing-masing driver ini memiliki tegangan tertentu yang harus ditetapkan antara nol dan 1000 mV atau sesuatu seperti ini. Tetapi jika Anda mengubah salah satunya, itu akan mengubah segalanya.
Jadi mengoptimalkan tegangan masing-masing pengemudi secara terpisah adalah hal yang mustahil. Jumlah kemungkinan kombinasi nilai ada dalam miliaran, dan butuh sekitar 1 menit untuk kamera khusus untuk mengevaluasi satu kombinasi. Para insinyur telah mencoba banyak teknik optimasi standar, tetapi tidak ada yang mendekati.
Kepala teknisi menghubungi saya karena saya sebelumnya telah merilis perpustakaan Pemrograman Genetik ke komunitas open-source. Dia bertanya apakah GP / GA akan membantu dan apakah saya bisa terlibat. Saya melakukannya, dan selama sekitar satu bulan kami bekerja bersama, saya menulis dan menyetel pustaka GA, pada data sintetik, dan dia mengintegrasikannya ke dalam sistem mereka. Kemudian, suatu akhir pekan mereka membiarkannya berjalan dengan hal yang nyata.
Senin berikutnya saya mendapat email-email cemerlang dari dia dan perancang perangkat keras mereka, tentang bagaimana tidak ada yang bisa mempercayai hasil luar biasa yang ditemukan GA. Ini dia. Belakangan tahun itu produk tersebut menyentuh pasar.
Saya tidak dibayar satu sen untuk itu, tetapi saya mendapat hak 'menyombongkan diri'. Mereka mengatakan dari awal mereka sudah melebihi anggaran, jadi saya tahu apa kesepakatannya sebelum saya mulai mengerjakannya. Dan itu adalah kisah yang hebat untuk aplikasi GAS. :)
sumber
Saya menggunakan GA untuk mengoptimalkan tugas tempat duduk di resepsi pernikahan saya. 80 tamu lebih dari 10 tabel. Fungsi evaluasi didasarkan pada menjaga orang-orang dengan teman kencan mereka, menempatkan orang-orang dengan sesuatu yang sama bersama, dan menjaga orang-orang dengan pandangan yang sangat berbeda di meja yang terpisah.
Saya menjalankannya beberapa kali. Setiap kali, saya mendapat sembilan meja bagus, dan satu dengan semua bola aneh. Pada akhirnya, istri saya melakukan tugas tempat duduk.
Pengoptimal salesman keliling saya menggunakan pemetaan novel kromosom ke rencana perjalanan, yang membuatnya sepele untuk membiakkan dan bermutasi kromosom tanpa risiko menghasilkan tur yang tidak valid.
Pembaruan : Karena beberapa orang bertanya bagaimana ...
Mulailah dengan sejumlah tamu (atau kota) dalam suatu pemesanan yang sewenang-wenang tetapi konsisten, misalnya, berdasarkan abjad. Sebut ini solusi referensi. Pikirkan indeks tamu sebagai nomor tempat duduknya.
Alih-alih mencoba menyandikan urutan ini langsung di kromosom, kami menyandikan instruksi untuk mengubah solusi referensi menjadi solusi baru. Secara khusus, kami memperlakukan kromosom sebagai daftar indeks dalam array untuk ditukar. Untuk mendapatkan decode kromosom, kita mulai dengan solusi referensi dan menerapkan semua swap yang ditunjukkan oleh kromosom. Menukar dua entri dalam array selalu menghasilkan solusi yang valid: setiap tamu (atau kota) masih muncul tepat sekali.
Dengan demikian kromosom dapat dihasilkan secara acak, bermutasi, dan disilangkan dengan yang lain dan akan selalu menghasilkan solusi yang valid.
sumber
temp = a[c1]; a[c1] = a[c2]; a[c2] = temp
). Tidak masalah jika dua indeks identik, karena akan tetap berisi setiap tamu (atau kota) tepat satu kali.Saya menggunakan algoritma genetika (serta beberapa teknik terkait) untuk menentukan pengaturan terbaik untuk sistem manajemen risiko yang mencoba menjaga petani emas agar tidak menggunakan kartu kredit curian untuk membayar MMO. Sistem akan menerima beberapa ribu transaksi dengan nilai-nilai "diketahui" (penipuan atau tidak) dan mencari tahu kombinasi terbaik dari pengaturan untuk mengidentifikasi transaksi penipuan dengan benar tanpa memiliki terlalu banyak false positive.
Kami memiliki data tentang beberapa lusin (boolean) karakteristik transaksi, yang masing-masing diberi nilai dan dijumlahkan. Jika total lebih tinggi dari ambang, transaksi itu penipuan. GA akan membuat sejumlah besar set nilai acak, mengevaluasinya terhadap kumpulan data yang diketahui, memilih yang memiliki skor terbaik (baik pada deteksi penipuan dan membatasi jumlah positif palsu), kemudian berkembang biak beberapa yang terbaik dari setiap generasi menghasilkan generasi kandidat yang baru. Setelah beberapa generasi, serangkaian nilai penilaian terbaik dianggap sebagai pemenang.
Membuat kumpulan data yang diketahui untuk diuji adalah kelemahan sistem Achilles. Jika Anda menunggu tolak bayar, Anda tertinggal beberapa bulan ketika mencoba merespons para penipu, sehingga seseorang harus meninjau secara manual sejumlah besar transaksi untuk membangun kumpulan data tanpa harus menunggu terlalu lama.
Ini akhirnya mengidentifikasi sebagian besar penipuan yang masuk, tetapi tidak bisa cukup di bawah 1% pada item yang paling rentan penipuan (mengingat bahwa 90% dari transaksi yang masuk bisa penipuan, yang melakukannya dengan cukup baik).
Saya melakukan semua ini dengan perl. Satu kali menjalankan perangkat lunak pada kotak linux yang cukup lama akan memakan waktu 1-2 jam untuk dijalankan (20 menit untuk memuat data melalui tautan WAN, sisa waktu yang dihabiskan untuk mengolahnya). Ukuran generasi mana pun dibatasi oleh RAM yang tersedia. Saya akan menjalankannya berulang-ulang dengan sedikit perubahan pada parameter, mencari set hasil yang sangat bagus.
Semua itu menghindari beberapa kesalahan yang datang dengan secara manual mencoba untuk mengubah nilai relatif dari puluhan indikator penipuan, dan secara konsisten muncul dengan solusi yang lebih baik daripada yang bisa saya buat dengan tangan. AFAIK, masih digunakan (sekitar 3 tahun setelah saya menulisnya).
sumber
Tipping Sepakbola. Saya membangun sistem GA untuk memprediksi hasil pertandingan minggu ke minggu di AFL (Aussie Rules Football).
Beberapa tahun yang lalu saya bosan dengan kolam sepakbola standar, semua orang hanya online dan mengambil pilihan dari beberapa pakar di media. Jadi, saya pikir itu tidak terlalu sulit untuk mengalahkan sekelompok jurusan jurnalisme penyiaran, kan? Pikiran pertama saya adalah mengambil hasil dari Massey Ratings dan kemudian mengungkapkan pada akhir musim strategi saya setelah memenangkan ketenaran dan kejayaan. Namun, karena alasan saya tidak pernah menemukan Massey tidak melacak AFL. Yang sinis dalam diri saya percaya itu karena hasil dari setiap pertandingan AFL pada dasarnya menjadi peluang acak, tetapi keluhan saya tentang perubahan peraturan baru-baru ini berada di forum yang berbeda.
Sistem ini pada dasarnya dianggap sebagai kekuatan ofensif, kekuatan defensif, keunggulan lapangan tuan rumah, peningkatan dari minggu ke minggu (atau ketiadaannya) dan kecepatan perubahan untuk masing-masingnya. Ini menciptakan satu set persamaan polinomial untuk setiap tim selama musim. Pemenang dan skor untuk setiap pertandingan untuk tanggal tertentu dapat dihitung. Tujuannya adalah untuk menemukan set koefisien yang paling cocok dengan hasil semua game sebelumnya dan menggunakannya untuk memprediksi permainan minggu mendatang.
Dalam praktiknya, sistem akan menemukan solusi yang secara akurat memprediksi lebih dari 90% hasil pertandingan sebelumnya. Itu kemudian akan berhasil memilih sekitar 60-80% dari game untuk minggu yang akan datang (itu adalah minggu tidak di set pelatihan).
Hasilnya: tepat di atas tengah pak. Tidak ada hadiah uang tunai utama atau sistem yang bisa saya gunakan untuk mengalahkan Vegas. Itu menyenangkan.
Saya membangun semuanya dari awal, tidak ada kerangka yang digunakan.
sumber
Selain beberapa masalah umum, seperti Travelling Salesman dan variasi pada program Mona Lisa karya Roger Alsing , saya juga menulis sebuah pemecah masalah Sudoku yang evolusioner. (yang membutuhkan pemikiran lebih orisinal di pihak saya, daripada hanya menerapkan kembali ide orang lain). Ada algoritma yang lebih andal untuk memecahkan Sudokus tetapi pendekatan evolusi bekerja dengan cukup baik.
Dalam beberapa hari terakhir saya telah bermain-main dengan program evolusi untuk menemukan "deck dingin" untuk poker setelah melihat artikel ini di Reddit. Ini tidak cukup memuaskan saat ini tetapi saya pikir saya bisa memperbaikinya.
Saya memiliki kerangka kerja saya sendiri yang saya gunakan untuk algoritma evolusioner.
sumber
Saya mengembangkan bir buatan sendiri untuk sistem profil permukaan laser 3D yang dikembangkan perusahaan saya untuk industri angkutan pada tahun 1992. Sistem ini mengandalkan triangulasi 3 dimensi dan menggunakan pemindai garis laser khusus, kamera 512x512 (dengan kamera pengambilan kustom hw). Jarak antara kamera dan laser tidak akan pernah tepat dan titik fokus kamera tidak dapat ditemukan di posisi 256.256 seperti yang Anda harapkan!
Itu adalah mimpi buruk untuk mencoba dan bekerja parameter kalibrasi menggunakan geometri standar dan menyelesaikan persamaan persamaan gaya anil.
Algoritma Genetika dihidupkan pada suatu malam dan saya membuat kubus kalibrasi untuk mengujinya. Saya tahu dimensi kubus dengan akurasi tinggi dan dengan demikian idenya adalah bahwa GA saya dapat mengembangkan seperangkat parameter triangulasi khusus untuk setiap unit pemindaian yang akan mengatasi variasi produksi.
Triknya berhasil. Saya terperangah untuk sedikitnya! Dalam sekitar 10 generasi, kubus 'virtual' saya (dihasilkan dari pemindaian mentah dan dibuat ulang dari parameter kalibrasi) benar-benar tampak seperti kubus! Setelah sekitar 50 generasi saya memiliki kalibrasi yang saya butuhkan.
sumber
Seringkali sulit untuk mendapatkan kombinasi warna yang tepat ketika Anda berencana untuk mengecat rumah Anda. Seringkali, Anda memiliki beberapa warna dalam pikiran, tetapi itu bukan salah satu warna, vendor menunjukkan kepada Anda.
Kemarin, Prof. saya yang merupakan peneliti GA menyebutkan tentang kisah nyata di Jerman (maaf, saya tidak punya referensi lebih lanjut, ya, saya bisa mengetahuinya jika ada yang meminta). Orang ini (sebut saja dia lelaki kulit berwarna ) biasa pergi dari pintu-pintu untuk membantu orang menemukan kode warna yang tepat (dalam RGB ) yang akan menjadi lemari untuk apa yang ada dalam benak pelanggan. Inilah cara dia akan melakukannya:
Orang kulit berwarna biasa membawa sebuah program perangkat lunak yang menggunakan GA. Dia biasa memulai dengan 4 warna berbeda - masing-masing dikodekan sebagai Kromosom berkode (yang nilai dekodenya adalah nilai RGB). Konsumen memilih 1 dari 4 warna (Yang paling dekat dengan yang ada dalam pikirannya). Program kemudian akan menetapkan kebugaran maksimum untuk individu itu dan pindah ke generasi berikutnya menggunakan mutasi / crossover . Langkah-langkah di atas akan diulang sampai konsumen menemukan warna yang tepat dan kemudian warna pria digunakan untuk memberitahunya kombinasi RGB!
Dengan memberikan kebugaran maksimum pada warna, mendekati apa yang ada di benak konsumen, si pewarna semakin meningkatkan peluang untuk menyatu dengan warna, yang ada dalam benak konsumen. Saya menemukan itu sangat menyenangkan!
Sekarang saya sudah mendapatkan -1, jika Anda berencana untuk lebih -1, pls. jelaskan alasan untuk melakukannya!
sumber
Beberapa minggu yang lalu, saya menyarankan solusi pada SO menggunakan algoritma genetika untuk memecahkan masalah tata letak grafik. Ini adalah contoh masalah optimisasi terbatas.
Juga di bidang pembelajaran mesin, saya menerapkan kerangka aturan klasifikasi berbasis GA di c / c ++ dari awal.
Saya juga menggunakan GA dalam proyek sampel untuk pelatihan jaringan saraf tiruan (JST) yang bertentangan dengan menggunakan algoritma backpropagation yang terkenal .
Selain itu, dan sebagai bagian dari penelitian pascasarjana saya, saya telah menggunakan GA dalam pelatihan Hidden Markov Model sebagai pendekatan tambahan untuk algoritma Baum-Welch berbasis EM (dalam c / c ++ lagi).
sumber
Sebagai bagian dari gelar sarjana CompSci saya, kami ditugaskan masalah menemukan bendera jvm optimal untuk mesin virtual penelitian Jikes. Ini dievaluasi menggunakan suite benchmark Dicappo yang mengembalikan waktu ke konsol. Saya menulis alogirhy yang terdistribusi yang mengubah flag-flag ini untuk meningkatkan runtime dari benchmark benchmark, meskipun butuh berhari-hari untuk mengimbangi jitter hardware yang mempengaruhi hasil. Satu-satunya masalah adalah saya tidak benar belajar tentang teori kompiler (yang merupakan maksud dari penugasan).
Saya bisa menyemai populasi awal dengan flag default yang ada, tetapi yang menarik adalah bahwa algoritma tersebut menemukan konfigurasi yang sangat mirip dengan level optimisasi O3 (tetapi sebenarnya lebih cepat dalam banyak tes).
Sunting: Juga saya menulis kerangka algoritma genetika saya sendiri di Python untuk tugas, dan hanya menggunakan perintah popen untuk menjalankan berbagai tolok ukur, meskipun jika itu bukan tugas yang dinilai saya akan melihat pyEvolve.
sumber
Pertama, "Pemrograman Genetik" oleh Jonathan Koza ( di amazon ) cukup banyak THE buku tentang genetik dan evolusi algoritma / teknik pemrograman, dengan banyak contoh. Saya sangat menyarankan memeriksanya.
Mengenai penggunaan algoritma genetika saya sendiri, saya menggunakan algoritme genetik (yang ditanam di rumah) untuk mengembangkan algoritma segerombolan untuk skenario pengumpulan / penghancuran objek (tujuan praktis bisa saja membersihkan ladang ranjau). Berikut ini tautan ke kertas . Bagian paling menarik dari apa yang saya lakukan adalah fungsi kebugaran multi-stage, yang merupakan keharusan karena fungsi kebugaran sederhana tidak memberikan informasi yang cukup untuk algoritma genetika untuk cukup membedakan antara anggota populasi.
sumber
Saya adalah bagian dari tim yang menyelidiki penggunaan Evolutionary Computation (EC) untuk secara otomatis memperbaiki bug dalam program yang ada. Kami telah berhasil memperbaiki sejumlah bug nyata di proyek perangkat lunak dunia nyata (lihat beranda proyek ini ).
Kami memiliki dua aplikasi teknik perbaikan EC ini.
Yang pertama ( informasi kode dan reproduksi tersedia melalui halaman proyek ) mengembangkan pohon sintaksis abstrak yang diuraikan dari program C yang ada dan diimplementasikan di Ocaml menggunakan mesin EC kustom kami sendiri.
Yang kedua ( informasi kode dan reproduksi tersedia melalui halaman proyek ), kontribusi pribadi saya untuk proyek, mengembangkan perakitan x86 atau kode byte Java yang dikompilasi dari program yang ditulis dalam sejumlah bahasa pemrograman. Aplikasi ini diimplementasikan di Clojure dan juga menggunakan mesin EC buatannya sendiri.
Salah satu aspek bagus dari Evolutionary Computation adalah kesederhanaan teknik memungkinkan untuk menulis implementasi kustom Anda sendiri tanpa terlalu banyak kesulitan. Untuk teks pengantar Genetik Pemrograman Genetik yang tersedia secara bebas, lihat Panduan Lapangan untuk Pemrograman Genetik .
sumber
Seorang rekan kerja dan saya sedang mengerjakan solusi untuk memuat barang ke truk menggunakan berbagai kriteria yang dibutuhkan perusahaan kami. Saya telah mengerjakan solusi Genetic Algorithm ketika dia menggunakan Branch And Bound dengan pemangkasan agresif. Kami masih dalam proses menerapkan solusi ini, tetapi sejauh ini, kami telah mendapatkan hasil yang baik.
sumber
Beberapa tahun yang lalu saya menggunakan ga untuk mengoptimalkan tata bahasa asr (pengenalan suara otomatis) untuk tingkat pengenalan yang lebih baik. Saya mulai dengan daftar pilihan yang cukup sederhana (di mana ga menguji kombinasi istilah yang mungkin untuk setiap slot) dan bekerja sampai tata bahasa yang lebih terbuka dan kompleks. Kebugaran ditentukan dengan mengukur pemisahan antara istilah / urutan di bawah semacam fungsi jarak fonetik. Saya juga bereksperimen dengan membuat variasi yang sama lemah pada tata bahasa untuk menemukan satu yang dikompilasi ke representasi yang lebih kompak (pada akhirnya saya pergi dengan algoritma langsung, dan secara drastis meningkatkan ukuran "bahasa" yang dapat kita gunakan dalam aplikasi) .
Baru-baru ini saya telah menggunakannya sebagai hipotesis default untuk menguji kualitas solusi yang dihasilkan dari berbagai algoritma. Ini sebagian besar melibatkan kategorisasi dan berbagai jenis masalah pemasangan (yaitu membuat "aturan" yang menjelaskan sekumpulan pilihan yang dibuat oleh pengulas atas dataset).
sumber
Saya membuat kerangka kerja GA lengkap bernama "GALAB", untuk menyelesaikan banyak masalah:
sumber
Saya pernah menggunakan GA untuk mengoptimalkan fungsi hash untuk alamat memori. Alamatnya berukuran 4K atau 8K ukuran halaman, sehingga menunjukkan beberapa kemungkinan dalam pola bit alamat (bit paling tidak signifikan semua nol; bit tengah bertambah secara teratur, dll.) Fungsi hash asli adalah "chunky" - cenderung mengelompokkan hits pada setiap ember hash ketiga. Algoritma yang ditingkatkan memiliki distribusi yang hampir sempurna.
sumber
Saya tidak tahu apakah pekerjaan rumah berarti ...
Selama studi saya, kami menggulirkan program kami sendiri untuk menyelesaikan masalah Travelling Salesman.
Idenya adalah untuk membuat perbandingan pada beberapa kriteria (kesulitan untuk memetakan masalah, kinerja, dll) dan kami juga menggunakan teknik lain seperti Simulated annealing .
Ini bekerja cukup baik, tetapi kami butuh beberapa saat untuk memahami bagaimana melakukan fase 'reproduksi' dengan benar: memodelkan masalah yang ada menjadi sesuatu yang cocok untuk pemrograman Genetika benar-benar mengejutkan saya sebagai bagian tersulit ...
Itu adalah kursus yang menarik karena kami juga mencoba-coba jaringan saraf dan sejenisnya.
Saya ingin tahu apakah ada yang menggunakan pemrograman semacam ini dalam kode 'produksi'.
sumber
Saya membuat GA sederhana untuk mengekstraksi pola yang berguna dari spektrum frekuensi musik saat dimainkan. Outputnya digunakan untuk mendorong efek grafis dalam plugin winamp.
Saya memiliki beberapa GAS yang disetel ke bagian spektrum yang berbeda serta batas BPM yang berbeda, sehingga mereka tidak cenderung menyatu ke arah pola yang sama. Output dari 4 teratas dari setiap populasi dikirim ke mesin rendering.
Efek samping yang menarik adalah bahwa kebugaran rata-rata di seluruh populasi adalah indikator yang baik untuk perubahan dalam musik, meskipun umumnya butuh 4-5 detik untuk mengetahuinya.
sumber
Sebagai bagian dari tesis saya, saya menulis kerangka java umum untuk algoritma optimasi multi-objektif mPOEMS (Multiobjective optimasi prototipe dengan langkah-langkah peningkatan berevolusi), yang merupakan GA menggunakan konsep evolusi. Itu adalah generik dengan cara bahwa semua bagian yang bebas masalah telah dipisahkan dari bagian yang tergantung pada masalah, dan sebuah antarmuka siap untuk menggunakan kerangka kerja dengan hanya menambahkan bagian yang tergantung pada masalah. Jadi orang yang ingin menggunakan algoritma tidak harus mulai dari nol, dan itu memfasilitasi banyak pekerjaan.
Anda dapat menemukan kode di sini .
Solusi yang dapat Anda temukan dengan algoritme ini telah dibandingkan dalam karya ilmiah dengan algoritme canggih SPEA-2 dan NSGA, dan telah terbukti bahwa algoritme tersebut memiliki kinerja yang sebanding atau bahkan lebih baik, tergantung pada metrik yang Anda gunakan. ambil untuk mengukur kinerja, dan terutama tergantung pada masalah optimasi yang Anda cari.
Anda dapat menemukannya di sini .
Juga sebagai bagian dari tesis dan bukti kerja saya menerapkan kerangka kerja ini untuk masalah pemilihan proyek yang ditemukan dalam manajemen portofolio. Ini adalah tentang memilih proyek yang menambah nilai terbesar bagi perusahaan, mendukung sebagian besar strategi perusahaan atau mendukung tujuan sewenang-wenang lainnya. Misalnya pemilihan sejumlah proyek dari kategori tertentu, atau memaksimalkan sinergi proyek, ...
Tesis saya yang menerapkan kerangka kerja ini untuk masalah pemilihan proyek: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf
Setelah itu saya bekerja di departemen manajemen portofolio di salah satu kekayaan 500, di mana mereka menggunakan perangkat lunak komersial yang juga menerapkan GA untuk masalah pemilihan proyek / optimasi portofolio.
Sumber lebih lanjut:
Dokumentasi kerangka kerja: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf
makalah presentasi mPOEMS: http://portal.acm.org/citation.cfm?id=1792634.1792653
Sebenarnya dengan sedikit antusiasme, semua orang dapat dengan mudah mengadaptasi kode kerangka kerja generik ke masalah optimisasi multi-tujuan yang sewenang-wenang.
sumber
Di tempat kerja saya memiliki masalah berikut: diberikan tugas M dan N DSP, apa cara terbaik untuk menetapkan tugas ke DSP? "Best" didefinisikan sebagai "meminimalkan muatan DSP yang paling banyak dimuat". Ada berbagai jenis tugas, dan berbagai jenis tugas memiliki berbagai konsekuensi kinerja tergantung pada di mana mereka ditugaskan, jadi saya menyandikan himpunan tugas pekerjaan-ke-DSP sebagai "string DNA" dan kemudian menggunakan algoritma genetika untuk "berkembang biak" string penugasan terbaik yang saya bisa.
Ini bekerja cukup baik (jauh lebih baik daripada metode saya sebelumnya, yang mengevaluasi setiap kombinasi yang mungkin ... pada ukuran masalah non-sepele, itu akan memakan waktu bertahun-tahun untuk menyelesaikan!), Satu-satunya masalah adalah bahwa tidak ada cara untuk mengatakan apakah solusi optimal sudah tercapai atau belum. Anda hanya bisa memutuskan apakah "upaya terbaik" saat ini sudah cukup baik, atau biarkan berjalan lebih lama untuk melihat apakah itu bisa lebih baik.
sumber
Ada kompetisi di codechef.com (situs yang bagus, kompetisi pemrograman bulanan) di mana orang seharusnya memecahkan sudoku yang tidak terpecahkan (orang harus sedekat mungkin dengan sesedikit mungkin kolom / baris / dll yang salah).
Apa yang akan saya lakukan, adalah pertama-tama menghasilkan sudoku yang sempurna dan kemudian menimpa bidang, yang telah diberikan. Dari dasar yang cukup bagus ini saya menggunakan pemrograman genetika untuk meningkatkan solusi saya.
Saya tidak bisa memikirkan pendekatan deterministik dalam kasus ini, karena sudoku 300x300 dan pencarian akan memakan waktu terlalu lama.
sumber
Saya menggunakan algoritma genetika sederhana untuk mengoptimalkan rasio sinyal terhadap noise dari gelombang yang direpresentasikan sebagai string biner. Dengan membalik bit dengan cara tertentu selama beberapa juta generasi, saya dapat menghasilkan transformasi yang menghasilkan rasio sinyal terhadap noise yang lebih tinggi dari gelombang itu. Algoritme bisa juga "Simulasi Annealing" tetapi tidak digunakan dalam kasus ini. Pada intinya, algoritma genetika adalah sederhana, dan ini hampir sama dengan kasus penggunaan yang saya lihat, jadi saya tidak menggunakan kerangka kerja untuk pembuatan dan seleksi generasi - hanya seed acak dan Rasio Signal-to-Noise berfungsi di tangan.
sumber
Dalam seminar di sekolah, kami mengembangkan aplikasi untuk menghasilkan musik berdasarkan mode musik. Program ini dibangun di Jawa dan outputnya adalah file midi dengan lagu tersebut. Kami menggunakan perbedaan pendekatan GA untuk menghasilkan musik. Saya pikir program ini dapat bermanfaat untuk mengeksplorasi komposisi baru.
sumber
di tingkat sarjana, kami menggunakan NERO (kombinasi dari jaringan saraf dan algoritma genetika) untuk mengajar robot dalam game untuk membuat keputusan yang cerdas. Itu sangat keren.
sumber
Saya mengembangkan simulasi navigasi robot berbasis multithreaded swing melalui serangkaian medan grid acak dari sumber makanan dan tambang dan mengembangkan strategi berbasis algoritma genetika mengeksplorasi optimasi perilaku robot dan kelangsungan hidup gen terkuat untuk kromosom robot. Ini dilakukan dengan menggunakan charting dan pemetaan setiap siklus iterasi.
Sejak itu, saya telah mengembangkan lebih banyak perilaku permainan. Contoh aplikasi yang saya buat baru-baru ini untuk diri saya sendiri adalah algoritma genetika untuk menyelesaikan masalah petugas penjualan keliling dalam pencarian rute di Inggris dengan mempertimbangkan status awal dan tujuan, serta satu / beberapa titik koneksi, penundaan, pembatalan, pekerjaan konstruksi, jam sibuk, pemogokan publik, pertimbangan antara rute tercepat vs termurah. Kemudian berikan rekomendasi yang seimbang untuk rute yang akan diambil pada hari tertentu.
Secara umum, strategi saya adalah menggunakan representasi gen POJO berdasarkan kemudian saya menerapkan implementasi antarmuka khusus untuk seleksi, mutasi, strategi crossover, dan titik kriteria. Fungsi kebugaran saya pada dasarnya menjadi sangat kompleks berdasarkan pada strategi dan kriteria yang saya butuhkan sebagai ukuran heuristik.
Saya juga telah melihat penerapan algoritma genetika ke dalam pengujian otomatis dalam kode menggunakan siklus mutasi sistematis di mana algoritma memahami logika dan mencoba untuk memastikan laporan bug dengan rekomendasi untuk perbaikan kode. Pada dasarnya, cara untuk mengoptimalkan kode saya dan memberikan rekomendasi untuk perbaikan serta cara mengotomatiskan penemuan kode program baru. Saya juga mencoba menerapkan algoritma genetika untuk produksi musik di antara aplikasi lain.
Secara umum, saya menemukan strategi evolusi seperti kebanyakan strategi optimasi metaheuristik / global, mereka lambat untuk belajar pada awalnya tetapi mulai meningkat ketika solusi menjadi lebih dekat dan lebih dekat ke keadaan tujuan dan selama fungsi kebugaran dan heuristik Anda selaras untuk menghasilkan konvergensi dalam ruang pencarian Anda.
sumber
Saya pernah mencoba membuat pemain komputer untuk permainan Go, secara eksklusif berdasarkan pada pemrograman genetik. Setiap program akan diperlakukan sebagai fungsi evaluasi untuk urutan gerakan. Program yang dihasilkan tidak terlalu bagus, bahkan pada papan 3x4 yang agak kecil.
Saya menggunakan Perl, dan mengkodekan semuanya sendiri. Saya akan melakukan hal-hal yang berbeda hari ini.
sumber
Setelah membaca The Blind Watchmaker , saya tertarik pada program pascal, Dawkins mengatakan dia telah mengembangkan untuk menciptakan model organisme yang dapat berkembang dari waktu ke waktu. Saya cukup tertarik untuk menulis sendiri menggunakan Swarm . Saya tidak membuat semua grafik makhluk mewah yang dia lakukan, tetapi 'kromosom' saya mengendalikan sifat-sifat yang memengaruhi kemampuan organisme untuk bertahan hidup. Mereka hidup di dunia yang sederhana dan bisa membantingnya terhadap satu sama lain dan lingkungan mereka.
Organisme hidup atau mati sebagian karena kebetulan, tetapi juga didasarkan pada seberapa efektif mereka beradaptasi dengan lingkungan lokal mereka, seberapa baik mereka mengkonsumsi nutrisi & seberapa sukses mereka bereproduksi. Itu menyenangkan, tetapi juga lebih banyak bukti bagi istri saya bahwa saya seorang geek.
sumber
Beberapa waktu yang lalu, tetapi saya memutar GA untuk mengembangkan apa yang ada di kernel pemrosesan gambar untuk menghilangkan jejak sinar kosmik dari gambar Hubble Space Telescope (HST). Pendekatan standar adalah untuk mengambil banyak eksposur dengan Hubble dan hanya menyimpan hal-hal yang sama di semua gambar. Karena waktu HST sangat berharga, saya penggemar astronomi, dan baru-baru ini menghadiri Kongres Komputasi Evolusi, saya berpikir untuk menggunakan GA untuk membersihkan paparan tunggal.
Masing-masing individu dalam bentuk pohon yang mengambil area 3x3 piksel sebagai input, melakukan beberapa perhitungan, dan menghasilkan keputusan tentang apakah dan bagaimana memodifikasi piksel tengah. Kebugaran dinilai dengan membandingkan output dengan gambar yang dibersihkan dengan cara tradisional (yaitu susun eksposur).
Ini sebenarnya semacam bekerja, tetapi tidak cukup baik untuk menjamin tidak menggunakan pendekatan asli. Jika saya tidak dibatasi oleh tesis saya, saya mungkin telah memperluas bagian genetik yang tersedia untuk algoritma. Saya cukup yakin saya bisa memperbaikinya secara signifikan.
Perpustakaan yang digunakan: Jika saya ingat dengan benar, IRAF dan cfitsio untuk pemrosesan data gambar astronomi dan I / O.
sumber
Saya bereksperimen dengan GA di masa muda saya. Saya menulis sebuah simulator dengan Python yang berfungsi sebagai berikut.
Gen-gen itu mengkodekan bobot jaringan saraf.
Input jaringan saraf adalah "antena" yang mendeteksi sentuhan. Nilai yang lebih tinggi berarti sangat dekat dan 0 berarti tidak menyentuh.
Outputnya adalah dua "roda". Jika kedua roda maju, pria itu maju. Jika roda berada di arah yang berlawanan, pria itu berbalik. Kekuatan output menentukan kecepatan putaran roda.
Labirin sederhana dihasilkan. Itu sangat sederhana - bahkan bodoh. Ada awal di bagian bawah layar dan gol di bagian atas, dengan empat dinding di antaranya. Setiap dinding memiliki ruang yang diambil secara acak, jadi selalu ada jalan.
Saya mulai secara acak (saya menganggapnya sebagai bug) pada awalnya. Segera setelah satu pria mencapai tujuan, atau batas waktu tercapai, kebugaran dihitung. Itu berbanding terbalik dengan jarak ke gawang saat itu.
Saya kemudian memasangkannya dan "membesarkan" mereka untuk menciptakan generasi berikutnya. Probabilitas dipilih untuk dibiakkan sebanding dengan kebugarannya. Terkadang ini berarti seseorang dibiakkan dengan dirinya sendiri berulang kali jika memiliki kebugaran relatif yang sangat tinggi.
Saya pikir mereka akan mengembangkan perilaku "memeluk dinding kiri", tetapi mereka tampaknya selalu mengikuti sesuatu yang kurang optimal. Dalam setiap percobaan, bug bertemu dengan pola spiral. Mereka akan berputar ke luar sampai mereka menyentuh dinding ke kanan. Mereka akan mengikuti itu, lalu ketika mereka sampai ke celah, mereka akan spiral ke bawah (jauh dari celah) dan di sekitar. Mereka berbelok 270 derajat ke kiri, lalu biasanya memasuki celah. Ini akan membuat mereka melewati sebagian besar tembok, dan seringkali ke tujuan.
Salah satu fitur yang saya tambahkan adalah memasukkan vektor warna ke dalam gen untuk melacak keterkaitan antar individu. Setelah beberapa generasi, mereka semua memiliki warna yang sama, yang memberi tahu saya bahwa saya harus memiliki strategi pemuliaan yang lebih baik.
Saya mencoba membuat mereka mengembangkan strategi yang lebih baik. Saya mempersulit jaringan syaraf - menambah memori dan segalanya. Itu tidak membantu. Saya selalu melihat strategi yang sama.
Saya mencoba berbagai hal seperti memiliki kumpulan gen terpisah yang hanya digabungkan kembali setelah 100 generasi. Tetapi tidak ada yang akan mendorong mereka ke strategi yang lebih baik. Mungkin itu tidak mungkin.
Hal lain yang menarik adalah grafik kebugaran dari waktu ke waktu. Ada beberapa pola yang pasti, seperti kebugaran maksimum yang turun sebelum naik. Saya belum pernah melihat buku evolusi berbicara tentang kemungkinan itu.
sumber