"Genetik Algoritmalar - Çok Kolay!" makalesi için tartışma - sayfa 16

 
Alexey_74:

Andrew, bir soru daha.

Bu değişkenlerin bu değerlerinin çoğu optimizasyon problemi için uygun olduğunu söyleyebilir miyiz?

Evet.

Ayarlar, aranabilirliği (arama alanının kapsamını) artırmak için bir miktar "rezerv" ile alınır. Daha doğru değerler için (ancak küresel bir ekstremum bulunma olasılığı azalır), mutasyon parametrelerini ve aralık sınırı kaydırma katsayısını azaltabilirsiniz.

 
Alexey_74:

Andrew, bir soru daha.

Bu değişkenlerin bu değerlerinin çoğu optimizasyon problemi için uygun olduğunu söyleyebilir miyiz? Bazı kaynaklarda söylendiği gibi "... Problemlerin %90'ı geleneksel bir perceptron kullanılarak çözülebilir".

ZAGASTE GA :)

Algoritma tek iş parçacıklıdır, bir Uzman Danışmana kolayca yerleştirilebilir, bir test cihazında çalıştırılabilir ve GA'lar arasında yarışmalar düzenlenebilir boo-gah-gah.

 

Harika.

Andrei, biliyorsun, küstahlığıma şaşırdım ama bazı "eleştirileri" dile getirmek zorundayım ))

ServiceFunction() işlevi UGA kodunda üç yerde çağrılır. Ancak bunun bir faydası yok. Elbette, dinamikleri ekranda görebilirsiniz, ancak o kadar hızlıdır ki zaten göremez ve değerlendiremezsiniz. UGA()'nın gövdesindeki çağrısını kaldırabilirsiniz. UGA()'yı çağırdıktan sonra bir kez çağırmak yeterlidir.

"... ve kemancı gereksizdir, o sadece fazladan yakıt tüketir" (kin dza dza (c))

  ts=GetTickCount();
  UGA( ... );
  ts=GetTickCount()-ts;
  ServiceFunction();
 
Yine, çok önemli değil. bu yüzden bir hizmet işlevi, hata ayıklama, görselleştirme veya başka bir şey için kullanabilir veya hiç kullanmayabilirsiniz, kim sever. :)
 

Bir deney yaptım. "Frekansları" 47, 81, 187 olan üç sinüzoidin toplamını yaptım. Bunu aldım.

Daha sonra doğrudan numaralandırma yoluyla (3 döngü, 2 iç içe) aramaya başladım, ancak korelasyon katsayısı değeri = 1.0 olduğunda kesintiye uğradım. Bu koşul olmasaydı, tüm bu saçmalıklar çok daha uzun sürerdi. Ancak bu şekilde 375 saniyede (6 dakikadan biraz fazla) yapıldı.

GA bunu 2 saniyede yaptı. ))

Ama bir soru var. İşte sonuç.

Son 2 rakam: 2747 - FF çağrılarının sayısı; 506 - korelasyon katsayısı r 1.0'a eşit olduğunda "durumların" sayısı. Algoritmanın daha da hızlı çalışabileceği ortaya çıktı, çünkü r 1.0'dan büyük olamaz ve r=1'e ilk ulaşıldığında görev tamamlanmış sayılır. Ancak algoritma r=1.0 durumuna 506 kez ulaşmıştır.

Bunlar parametrelerdi

parametreler

Ve bu FF.

void FitnessFunction(int chromos)
{
  int cnt = 1;

  while(cnt<=GeneCount)
  {
    F1=Colony[cnt][chromos]; cnt++;
    F2=Colony[cnt][chromos]; cnt++;
    F3=Colony[cnt][chromos]; cnt++;

    Fill(sum);
    r=Pirson(sin,sum,nobs);
    if(r>0.99999999) count++;
  }
  AmountStartsFF++;

  Colony[0][chromos]=r;
}

Soru - algoritmaya (bazen) daha erken sonlandırmanın mümkün (gerekli) olduğunu açıklamanın herhangi bir yolu var mı? Yoksa bunu kategorik olarak yapmamalı ve yakınsamaya ulaşılmasını mı beklemeliyiz?

 

Uzun zamandır "kaç tane" sorusunun cevabını öğrenmek istiyordum. Bu sefer bir momentum aldım ve üzerine 50 sinüzoid koydum. Değer aralığı 1-500. Yani, yanılmıyorsam, doğrudan arama 500^50, yani 8.881784197001212523333890533447266e+134 iterasyonla sonuçlanıyor (eğer hesap makinem bana yalan söylemediyse). Saniyeye (dakika, saat, gün, yıl) dönüştürmenin mümkün olmadığı açıktır. Sonucu sadece uzak torunlar görecektir. GA bunu 1 saatte yaptı. 20 dakika. Vay canına. Ek olarak, 50 sinüzoidin toplamının momentum ile korelasyon katsayısının 0.5275 olduğu ortaya çıktı. Neden"ek olarak"? Çünkü daha önce bu noktayı kontrol etmek için tek bir fırsatım bile olmamıştı. Ve bazı durumlarda..... bazı düşünceleri akla getiriyor.

Sinüzoidlere takılmadım, sadece hepsi parmaklarımın ucunda. Ayrıca, amaç sürekli sinyallerin maksimum benzerliğini elde etmek olduğundan, sonuç tam da bu benzerliktir, başka bir deyişle, sonuç belirsizdir, ayrıca kolayca doğrulanabilir.

Andrey, Ürününüz için çok teşekkür ederim. Yakın gelecekte başka bir makalenizi okumak istiyorum. Elit seçim ile GA. ))

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
Alexey_74:
...

Soru - algoritmaya (bazen) daha erken sonlandırmanın mümkün olduğunu (bazen) açıklamanın herhangi bir yolu var mı? Ya da kategorik olarak yapılmamalı ve yakınsamaya ulaşılana kadar beklemeliyiz?

Bu mümkün. Ve hatta gereklidir. İncelenen fonksiyon hakkında bir şey biliyorsanız (sizin probleminizde olduğu gibi: FF<=1), gereksiz hesaplamalardan kaçınmak ve böylece arama süresini azaltmak için bu bilgiyi aktif olarak kullanmalısınız.

Bu uygulamada algoritmayı dışarıdan kontrol etmek için herhangi bir kol yoktur, ancak zorunlu durdurma bayrağını kontrol etmek için bir işlev eklemek yeterlidir.

Hakkında bir devam makalesi hazırlanmakta olan algoritmanın bir sonraki neslinde, algoritmayı dışarıdan kontrol etmek için çok daha fazla olasılık vardır (genellikle başlatma ve dışarıdan kontrol altında çalışır ve şu anda olduğu gibi değil - FF algoritmanın kendisi tarafından başlatılır, bu nedenle değişiklik yapmadan otomatik optimize eden baykuşlarda kullanma imkanı yoktur).

 
Alexey_74:

....

Andrew, Ürünün için tekrar çok teşekkür ederim. Yakın gelecekte makalelerinizden birine daha itibar etmek istiyorum. Elit seçim ile GA. ))

Teşekkür için teşekkürler. :)

Kesinlikle bir devamı olacak.

Ve optimum olanı bulmada iyi şanslar! Hayatta, işte, ben... Her şeyde.

 
Sormaya korkuyorum.... )) Doğru mu anladım? Algoritmanın yeni nesli bir DLL olarak biçimlendirilebilir mi?
 
Evet.