"Popülasyon optimizasyon algoritmaları: Fidan dikimi ve büyütme (Saplings Sowing and Growing up, SSG)" makalesi için tartışma

 

Yeni makaleye göz atın: Popülasyon optimizasyon algoritmaları: Fidan dikimi ve büyütme (Saplings Sowing and Growing up, SSG).

Fidan dikimi ve büyütme (SSG) algoritması, çok çeşitli koşullarda hayatta kalmak için olağanüstü yetenek gösteren gezegendeki en dirençli organizmalardan birinden esinlenmiştir.

Algoritma, yazarları tarafından net bir açıklamaya sahip olmayan birkaç algoritmadan biridir (sadece genel hükümler ve fikirler verilmiştir). Yazarlar tarafından sunulan algoritma operatörleri de programın algoritmik uygulaması için hazır talimatlar değildir. Yavru ve ebeveyn ağaçlar ve bunların etkileşimi hakkında net talimatlar yoktur. Operatörlerin yürütüldüğü sıra için herhangi bir gereklilik yoktur ve herhangi bir kullanıcı daha iyi bir fidan elde etmek için sıralarını değiştirebilir.

Geniş anlamda, SSG bir optimizasyon algoritması değildir, optimizasyon kalitesini artırmak için diğer algoritmaları tamamlamak üzere tasarlanmış genel bir kurallar bütünüdür. Başka bir deyişle, SSG herhangi bir evrimsel popülasyon algoritması için bir eklentidir, bu nedenle hayal gücü için yerim ve optimizasyon algoritmasının belirli bir uygulamasını denemek için fırsatım var. Önceki algoritmaları yazarken edindiğim bazı düşünce ve deneyimlerimi SSG ile çalışmak için kullandım. Deneylerimin sonuçlarını aşağıda okuyucunun değerlendirmesine sunuyorum.

Algoritmayı anlamaya başlamak için ağacı bir optimizasyon temsilcisi olarak düşünmemiz gerekir. Ağaç, her bir dalın problemin optimize edilen bir parametresi olduğu bir optimizasyon probleminin çözümüdür. Yavru ve ebeveyn ağaçların soyut ve sanatsal bir çizimi Şekil 1'de verilmiştir. Ağaç gövdesi, optimize edilecek parametreler kümesidir. Her bir dal optimize edilen ayrı bir parametredir ve dalın uzunluğu ilgili parametrenin izin verilen değer aralığı ile sınırlıdır. Dalların yönü önemli değildir ve sadece aralarındaki farkı vurgulamak için şekilde gösterilmiştir.

trees


Yazar: Andrey Dik

 

Yerel ekstremumları bulmak için en iyi algoritma nedir?

Kabaca konuşmak gerekirse, yerel ekstremumlara (köşelere) en iyi düşen parametrelerin bir listesini üretmemiz gerekir.

Bir kirpi örneğini kullanarak, iğnelerinin uçlarının koordinatlarını gösterin.

 

Söyleyin bana, aşağıdaki özelliklere sahip herhangi bir optimizasyon algoritması var mı?

sayıları büyük olduğunda parametrelerin sadece bir kısmının seçilmesi;

Seçilen parametreler sadece bir genetik algoritma veya genetik ile değiştirilebilen bir algoritma kullanılarak optimize edilir;

mevcut iterasyon için aktif parametreleri seçme algoritması önemli değildir, aralıkları ve optimizasyon adımını değiştirmeye izin verilir

 
fxsaber #:

Yerel ekstremumları bulmak için en iyi algoritma nedir?

Kabaca konuşmak gerekirse, yerel ekstremumlara (köşelere) en iyi düşen parametrelerin bir listesini üretmemiz gerekir.

Bir kirpi örneğini kullanarak, iğnelerinin uçlarının koordinatlarını gösterin.

Herhangi bir küresel arama görevi için, tablonun üst kısmındaki herhangi bir algoritma en iyi sonucu verecektir. Örneğin fonksiyonun düzgün veya ayrık olduğunu biliyorsanız en uygun olanı tek tek seçebilir veya problemdeki optimize edilen parametrelerin sayısına göre en uygun olanı seçebilirsiniz.

Genellikle problemi yerel ekstremumları bulmayı gerektirecek şekilde ayarlamayın, çünkü çoğu pratik problemde yerel ekstremumların sayısı bilinmemektedir (eğer öyle olmasaydı, analitik yöntemleri kullanmak daha kolay olurdu) ve küresel ekstremumların sayısı bilinmektedir - bir (aynı değere sahip birkaç küresel varsa, bu bir olduğu gerçeğine eşdeğerdir). Bu yüzden genellikle problem, fonksiyon mümkün olduğunca monoton olacak şekilde ayarlanır, bir örnek hata minimizasyonudur.

Genel durumda yerel arama problemlerini çözmek için herhangi bir algoritma bilmiyorum ve belirli bir problem için özel algoritmalar yazmak nadiren uygundur. Bu gibi durumlarda, problemi çözmek için FF'nin nasıl temsil edilebileceğini düşünürdüm. AO'yu kümelemeye bir eklenti olarak kullanmak gibi farklı yaklaşımlar olabilir. Probleme bir başka yaklaşım da FF'yi küresel minimumdan küresel maksimuma (önceden bulunması gereken) varsayımsal "katmanlara" bölmek ve ardından her katmanı sırayla incelemektir, yani AO için bir toplu görev yöneticisi yapmanız gerekir.

Kısacası, sizi hayal kırıklığına uğratacağım - genel formda yerel ekstremumları arama problemlerini çözmek için hiçbir algoritma yoktur. FF'yi değiştirmek özel bir algoritma yapmaktan daha kolaydır.

 
Aliaksandr Hryshyn genetik algoritma veya genetik ile değiştirilebilen bir algoritma kullanılarak optimize edilir;

3. Mevcut iterasyon için aktif parametreleri seçme algoritması önemsizdir, aralıkların ve optimizasyon adımının değiştirilmesine izin verilir

1. AO, optimizasyon için kendisine kaç tane ve hangi parametrelerin gönderileceğini önemsemez, bu nedenle tüm parametreleri AO'ya gönderebilirsiniz veya hepsini değil.

2. Herhangi bir algoritmayı tek tek, ortaklaşa, sıralı ve birleşik olarak uygulayabilirsiniz. Makalelerdeki algoritmaları tek tip hale getirmeye çalıştım.

3. Sunulan algoritmalardan herhangi biri, prensip olarak optimizasyon süreci sırasında doğrudan ayarlanabilir. Birikmiş popülasyonun sıfırlanmaması için yalnızca başlatmayı düzeltmeniz gerekir. Örneğin, optimize edilmiş parametrelerin adımını geçen epoklarla orantılı olarak azaltmak (veya artırmak) mümkündür.

 
Andrey Dik #:

Kısacası, sizi hayal kırıklığına uğratacağım - genel formda yerel ekstremumları arama problemlerini çözmek için hiçbir algoritma yoktur. FF'yi değiştirmek, özel bir algoritma oluşturmaktan daha kolaydır.

Teşekkür ederim. Çok sayıda çekirdek söz konusu olduğunda optimizasyonun zorla kesilmesi yoluyla dolaylı olarak yerel olanları buluyorum. Kabaca konuşmak gerekirse, Tester'da 20 aracı var, 2000 geçişten sonra optimizasyonu kesiyorum.

 
fxsaber #:

Teşekkür ederim. Çok sayıda çekirdek söz konusu olduğunda optimizasyonun zorla kesilmesi yoluyla dolaylı olarak yerel olanları buluyorum. Kabaca söylemek gerekirse, Tester'da 20 aracı var, 2000 geçişten sonra optimizasyonu kesiyorum.

Bu kesinlikle bilimsellik karşıtı! ))))) Yine de zekice.

IWO, COA, ABC, BFO gibi popülasyonun lokasyonlara göre gruplara ayrılma eğiliminde olduğu artan "kümelenme" algoritmaları olduğunu düşünüyordum, bu algoritmaların popülasyonları, ajanlar arasındaki Öklid mesafesini ölçerek ajan kümeleri için analiz edilebilir (AO'da mantıksal bir arama birimi bir ajan olarak adlandırılır), yani aralarında minimum mesafe olan ajan gruplarını arayın.

Ayrıca COA ve HS veya MA gibi geri alma (bir ajan aynı konumdan farklı yönlerde tekrar tekrar arama denemeleri yaptığında) algoritmalarında bir deneme sayacı ayarlamayı, birkaç iterasyon boyunca popülasyon durumlarının dilimlerini yapmayı ve en fazla sayıda denemeye sahip ajanların yerel ekstremum olacağını deneyebilirsiniz. MA ve BFO doğal olarak böyle bir sayaca sahiptir.

Yani, yerelleri aramanın kesin bir yolu olmadığını söyledim (bir global aramak bu açıdan "kesin" olarak kabul edilebilir), ancak yukarıda tarif ettiğim gibi yaklaşık olarak arayabilirsiniz. Kesin bir çözüm için FF hakkında farklı bilgiler bilmeniz gerekir.


ZЫ. Bu konuyla ilgilenen herkese ilginç bir soru: yerel ekstremumlar ile küresel ekstremumlar arasındaki fark nedir (FF değerlerindeki farklılıkları hesaba katmadan)?

ZZY İlk soruyu yanıtladıktan sonra birçok soru kendiliğinden ortadan kalkar.

 
Andrey Dik #:

yaklaşık olarak yukarıda açıklandığı gibi arama yapabilirsiniz.

Ne yazık ki bu konuda hiç becerikli değilim, bu yüzden yaklaşık ama hazır bir çözümle ilgileniyorum.

ZЫ. Bu konuyla ilgilenen herkes için ilginç bir soru: yerel ekstremumlar ile küresel ekstremumlar arasındaki fark nedir (FF değerlerindeki farklılıkları hesaba katmadan)?

Optimizasyonun sonucunu bir geçişler kümesi olarak alırsak, girdi hesaplanan geçişlerin uzayına kümeleme uygulandıktan sonra yerel olanların ipuçları görünür olacaktır. Ayrıca her kümede "dar" optimizasyon elde ederiz.

 
fxsaber #:

Yerel ekstremumları bulmak için en iyi algoritma nedir?

Kabaca konuşmak gerekirse, yerel ekstremumlara (köşelere) en iyi düşen parametrelerin bir listesini üretmemiz gerekir.

Kirpi örneğini kullanarak, kirpinin iğnelerinin uçlarının koordinatlarını gösterin.

Yani kirpinin tüm iğnelerini mi bulmanız gerekiyor? Yoksa herhangi birini ama tam olarak bir iğneyi mi?
 
mytarmailS #:
Yani kirpinin üzerindeki tüm iğneleri mi bulmanız gerekiyor? Yoksa sadece birini, herhangi birini ama tam olarak doğru iğneyi mi?

Birkaç anten.

 
fxsaber #:

Maalesef hiç becerikli değilim, bu yüzden yaklaşık ama hazır bir çözümle ilgileniyorum.

Optimizasyonun sonucunu bir geçişler kümesi olarak alırsak, girdi sayılan geçişler uzayına kümeleme uygulandıktan sonra yerel olanların ipuçları görünür olacaktır. Ayrıca her kümede "dar" optimizasyon elde ediyoruz.

Öklid mesafesine göre kümeleme (Kohonen kümelemesi olabilir), yerellerin yakınındaki opt-parametrelerin gruplandırılmasını gösterecektir.