Genetik bir algoritmanın durma noktasını tanımlamak algoritmanın amacını bozar mı?


11

Wikipedia bir GA'nın sonlandırma noktasını şu şekilde tanımlar:

Genel olarak algoritma, maksimum sayıda nesil üretildiğinde veya popülasyon için tatmin edici bir uygunluk seviyesine ulaşıldığında sona erer. Algoritma maksimum sayıda nesil nedeniyle sonlandıysa, tatmin edici bir çözüme ulaşılmış olabilir veya olmayabilir.

Şimdi, tatmin edici bir fitness seviyesine ulaşıldığında sona ererse ve bu fitness seviyesini tanımlayan sizseniz, neden özellikleri zaten bildiğinizden, neden sadece "mükemmel" genomu kendiniz oluşturamazsınız? Bu mükemmel genomun?

Sanırım burada biraz kafam karıştı. Bir GA'nın amacının sürekli olarak evrimleşmek ve bize düşündüğümüzden daha iyi bir çözüm göstermek olduğunu düşündüm ve fitness fonksiyonumuz yol boyunca yardımcı olan bir şeydi, sonlandırma olarak kaideye koyduğumuz bir şey değildi " mükemmel "devlet. Bu noktaya zarar vermiyor mu?


1
Muhtemelen cstheory için daha uygun.
Karl Bielefeldt

Olsa bile yoktu :)
slandau

1
@Karl: Soru cstheory için biraz yumuşak. Muhtemelen orada kapanacak.
Robert Harvey

2
Teşekkürler, @Robert. Şimdi neden orayı ziyaret etmediğimi hatırlıyorum. Sanırım bu "çatlaklar arasında" sorularından biri.
Karl Bielefeldt

1
Zaten "mükemmel dostunuzun" özelliklerini de biliyorsunuz: sizi mükemmel bir şekilde mutlu edecekler! Ama bu onları bulmak için yeterli değil (onları sıfırdan inşa edelim ...). Deneme de gereklidir.
Kilian Foth

Yanıtlar:


17

Kondisyon fonksiyonu algoritmanızın çıktısını değerlendirir . İdeal bir çıktıyı gördüğünüzde tanımak oldukça mümkündür, ancak herhangi bir girdiden bu çıktıyı üretme adımlarını bilmezsiniz. Genetik algoritmaların en faydalı olduğu yer burasıdır.

Örneğin, GA'nın yaygın bir eğlenceli uygulaması, bir sanal yaratığı verimli bir şekilde hareket ettirebilen bir animasyon üretmektir. Yaratığın nispeten düz bir çizgide belirli bir hızda hareket edip etmediğini söylemek kolaydır. Bu sizin fitness fonksiyonunuz. Bunu yapmak için "kas" hareketlerinin tam sırasını söylemek çok daha zordur.


3
Ayrıca, x nesillerinden sonra sık sık durduğunuzu da belirtmelisiniz, çünkü GA, optimal fitness puanınızı karşılamayan yerel bir minima / maxima'ya `` sıkışmış '' olduğu için süresiz olarak dönebilir. Seçiminiz / geçişiniz / mutasyon işlevleriniz sorun kümesi için yeterince iyi ayarlanmamışsa bu olabilir.
Steven Evers

Ben ilk Malbolge "Hello World" üreten Andrew Cooke'un genetik algoritma çözümünü hatırlamak ve daha sonra kaybolan @Karl daha iyi bir çözüm ona gönderilecektir stackoverflow.com/questions/5338627/...
pageman

8

Genellikle bir çözümün uygunluğunu belirleyebilir, ancak doğrudan çözümün kendisini belirleyemezsiniz. Diyelim ki hızlı tavşanlar geliştirmeye çalışıyorsunuz ve tavşan hızını etkileyen birkaç gen var. Tavşan hızını test edebilirsiniz, ancak hızla ilgili genlerin tüm kombinasyonlarını numaralandırmak pratik olmaz. Böyle bir durumda, tavşanları yarıştıran ve en hızlı olanları yetiştiren bir GA'nız olabilir. Bunu sonsuza kadar yapabilirsiniz, ancak muhtemelen şu durumlarda durmayı tercih edersiniz:

  • X'ten daha hızlı bir tavşan buldunuz veya
  • n kuşaklara göre artan iyileşme bir miktar eşiğin altına düştü veya
  • m nesiller boyunca tavşan yetiştirdin

5

GA'nın tüm amacı, size uygunluk düzeyine sahip soruna çözüm sunmaktır. Bu çözümü diğer daha geleneksel arama algoritmalarını kullanarak bulmak çok zordur, bu nedenle genellikle bir GA kullanıyorsunuz.

Veya bir fitness değer limiti yerine, kaç nesil çalıştırmak istediğinize karar verebilirsiniz (ne kadar çok nesil çalıştırırsanız, daha yüksek fitness değerleri bulma şansınız o kadar yüksektir). Örneğin, seyahat eden satıcı probleminde, gitmeniz gereken şehirler arasında en düşük maliyete sahip bir yol elde etmek.

Durma durumunuzun kabul edilebilir belirli bir kondisyon düzeyi veya belirli bir zaman kısıtlaması (GA'yı maksimum bir süre boyunca çalıştırması veya yol bulma veya AI uygulamaları gibi zaman açısından kritik uygulamalar için sınırlı sayıda nesil) olup olmadığı genellikle sorununuz tarafından belirlenir. alan adı.


3

Sezgisel olarak, bir genetik algoritmanın amacı, basit bir mantıksal analize borç vermeyen bir soruna algoritmik bir çözüm formüle etmektir. Bu hedefe ulaşıldığında, GA'nın daha fazla uğraşmasına gerek yoktur.

Tabii ki, daha iyi "uygunluk" isteniyorsa, genetik algoritma, daha yüksek düzeyde optimize edilmiş bir çözüm bulunup bulunmadığını görmek için çalışmaya bırakılabilir veya genetik algoritmanın kendisi, daha iyi bir çözüm üzerinde birleşip birleşmeyeceğini görmek için değiştirilebilir.


2

Genetik algoritma, iyi genleri daha fazla yayılarak ödüllendirmek için bir yol gerektirir. Kötü genlerden iyi genler söylemenin bir yolu yoksa, genetik bir algoritma kullanamazsınız.

Genetik bir algoritmanın çalışması için, daha uygun olmayan çözümlerin yerine daha uygun çözümlerin çoğaltılmasına izin vermelisiniz. Aksi takdirde, sadece rastgele çözümler deniyor olacaksınız.

İşte kendi deneyimlerime göre tipik bir örnek: İlk sesli arama sistemlerinden birini geliştirerek, konuşulan bir adı aynı adı taşıyan bir kopyayla eşleştirmek için bir algoritma bulmakta zorlandık. 25 kişiden bir isim seçerken% 95 doğruluk oranının yeterli olduğu söylendi. Her biri 10 kez 25 isim söyleyen bir grup insanımız vardı.

İlk olarak, konuşulan kelimenin uzunluğunu ve normalize edilmiş birkaç parçasındaki frekans enerjisini ölçen bir girdi sistemi geliştirdik. Ardından, bu parametrelerdeki eşleşmelere ağırlık atanan ve bu parametreler yoluyla iki parametre setini karşılaştıran bir algoritma geliştirdik.

Şimdi son bir adımımız vardı - bu ağırlıkların değeri ne olmalı?

1.000 rasgele ağırlık seti oluşturduk ve onları korpusa karşı test ettik. En kötüyü yapan 500'ü attık. Kalan 500 için, her birini çoğalttık ve bunlardan birinde, ağırlıklardan birini rastgele kaldırdık veya indirdik.

Bu işlemi bir bilgisayarda yaklaşık% 95 doğruluk ölçütünü karşılayan bir dizi ağırlığa sahip olana kadar yaklaşık iki hafta boyunca tekrarladık. Daha sonra bunu, toplulukta olmayan veriler üzerinde test ettik. Yaklaşık% 92 oranında doğruydu. Bu nedenle, korpusta% 98 doğruluk elde etmek için daha uzun sürdük ve bu ağırlık kümesi, korpusta olmayan verilerde% 95 doğruluk üretti.

Yani, genetik algoritma çalıştırmak için bir fitness fonksiyonuna sahip olmanız gerekir. Kötü genlerden iyi genleri anlatmanın bir yolu yoksa, iyi genlerin çoğaldığından ve kötü genlerin olmadığından nasıl emin olabilirsiniz?


0

Bir çözüm previos yinelemesinden çok farklı olmayana kadar tekrarlayın. Çok fazla şey için, lütfen sabit bir toleransı anlayın.

Solution in iteration n-6: 600
Solution in iteration n-5: 800
Solution in iteration n-4: 768
Solution in iteration n-3: 780 
Solution in iteration n-2: 778
Solution in iteration n-1: 778.23
Solution in iteration n: 780.18
Solution in iteration n+1: 780.1815

Bu örnekte, sabit toleransınız 0.01 ise, (n + 1) durmanızı söyler çünkü abs (çözelti (n + 1) -solüsyon (n)) <0.01.

Devam, algoritmanız ne zaman söyleyebilir: Bu daha iyi olmayacak!


0

Size hızlı bir cevap için ana soru: Neye ulaşmak istediğinizi bilmek ve oraya nasıl gideceğinizi bilmek arasında büyük bir fark vardır.

Daha ayrıntılı olarak, örneğin, genetik / evrimsel algoritmalar kullanılarak çözülen en popüler problemlerden biri ile, genellikle sınıfta bir vaka çalışması, bir grafikte optimum rotayı bulma. Bu genellikle ağda bir uçtan diğer uca en ucuz rotayı bulmak için kullanılır. Maliyetleri (atlama sayısı, her şeritten gelen maliyet, vb.) Tanımlarken, sonuçtan memnun olduğunuz hedef maliyetinizi (kondisyon düzeyi) de tanımlarsınız. Algoritmanız en iyisini bulamayabilir, ancak algoritmik olarak kabul edilebilir bir optimum bulur. Bununla daha iyi bir cevap bulmanın maliyet / fayda ilişkisinin yasak olduğunu kastediyorum.

GA / EA ile çok hızlı bir şekilde% 95 + en uygun cevabı bulmanın normal bir davranış olduğunu göreceksiniz, ancak son% 5'in daraltılması katlanarak daha pahalıya mal olacak. Yani teori, en iyi sonucu en kısa sürede elde etmek için kabul edilebilir bir optimum tanımlamanızdır. Bulmanın maliyeti, örneğin ilk% 1, ilk% 5'in üzerindeki faydalarından daha ağır basabileceğinden, kabul edilebilir optimum düzeyinizi tanımlarsınız.

Özetle, herhangi bir sorunun cevabını artık vermiyorsunuz, sadece problem başına kabul edilebilir optimumunuzu, daha iyi bir cevap bulmanın pratik olmadığı noktayı tanımlıyorsunuz.


0

Negatif ve pozitif test senaryolarını fitness fonksiyonları olarak ve girdi olarak kırık kodla sağlayarak C'deki hataları genetik algoritmalarla düzeltmek için bazı araştırmalar var . Bu sorunun örneğidir olabilir bir insan tarafından çözülecek ama genetik algoritma yapmak için daha kolaydır. Dikkat etmek önemlidir:

Bu makalede açıklanan yöntemler sıfırdan yeni programlar geliştirmese de, mevcut hataları onarmak için eski yazılımların nasıl geliştirileceğini göstermektedir.

Ancak, yeni programlar var çizilmeye sadece evrimleştiği edilmiş C. yazılmış birkaç aşikar olmayan programlar değil Malbolge ezoterik programlama dili tüm (bilgi) yazılı değil evrimleşmiş edilmiş olması. Dil, bir programcının kullanması için çok karmaşıktır ve programları tek başına mantıktan verimli bir şekilde çıkarmak için çok kıvrılmıştır, bu nedenle içinde yazılan programların çoğu genetik algoritmalar tarafından üretilmiştir. Uygunluk fonksiyonu genellikle beklenen çıktıya düzenleme mesafesidir.

Bu bir bakıma güzel daireseldir. Karmaşık genetik kodun evrimsel süreçler tarafından yazıldığını gözlemleyerek, kodun nasıl çalıştığını bile bilmeden, farklı karmaşık bir dilde kod üretmek için evrimsel süreçleri simüle edebiliriz!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.