English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
Popülasyon optimizasyon algoritmaları: Gri kurt optimizasyonu (Grey Wolf Optimizer, GWO)

Popülasyon optimizasyon algoritmaları: Gri kurt optimizasyonu (Grey Wolf Optimizer, GWO)

MetaTrader 5Örnekler | 4 Ağustos 2023, 15:00
426 0
Andrey Dik
Andrey Dik

İçindekiler

1. Giriş
2. Algoritma tanımı
3. Test fonksiyonları
4. Test sonuçları


1. Giriş

Gri kurt algoritması, 2014 yılında geliştirilmiş bir metasezgisel stokastik sürü zekası algoritmasıdır. Bu fikir, gri kurt sürüsünün avlama modeline dayanmaktadır. Dört tür kurt vardır: alfa, beta, delta ve omega. Alfa, karar verme ve sürüyü yönetme konusunda en fazla "ağırlığa" sahiptir. Daha sonra alfaya itaat eden ve diğer kurtlar üzerinde güç sahibi olan beta ve delta gelir. Omega kurt ise her zaman diğer baskın kurtlara itaat eder.

Kurt hiyerarşisi matematiksel modelinde, alfa-α kurtlar sürüdeki baskın kurtlar olarak kabul edilir ve emirleri sürü üyeleri tarafından yerine getirilmelidir. Beta-β kurtlar, karar verme sürecinde alfaya yardımcı olan ve alfa rolü için en iyi adaylar olarak kabul edilen ikincil kurtlardır. Delta-δ kurtlar, alfa ve betaya itaat etmelidir, ancak bu kurtlar da omega üzerinde hakimiyet kurarlar. Omega-ω kurtlar ise sürünün günah keçileri ve en önemsiz bireyleri olarak kabul edilir. Sadece en son yemek yemelerine izin verilir. Alfa en uygun çözüm olarak değerlendirilir.

İkinci ve üçüncü en iyi çözümler sırasıyla beta ve deltadır. Geri kalan çözümler de omegadır. En uygun kurtlara (alfa, beta ve delta), yani ava en yakın olanlara, diğer kurtlar tarafından yaklaşılacağı varsayılır. Her yaklaşımdan sonra kimin alfa, beta ve delta olduğu yeniden belirlenir ve böylece kurtlar tekrar düzenlenir. Bu formasyon, kurtlar minimum mesafede saldırı için en uygun yerde bulunacak bir sürü halinde toplanana kadar gerçekleşir.

Algoritma sırasında, kurtların avı aradığı, çevrelediği ve saldırdığı 3 ana aşama gerçekleşir. Arama sonucunda ava en yakın kurtlar olan alfa, beta ve delta ortaya çıkar. Baskın olanlara itaat eden geri kalanlar ise avı çevrelemeye başlayabilir veya en iyi seçeneği aramak için rastgele hareket etmeye devam edebilir.


2. Algoritma tanımı

Sürüdeki hiyerarşi Şekil 1'de şematik olarak gösterilmektedir.  Alfa sürüde baskın role sahiptir.

dominance

Şekil 1. Bir kurt sürüsünde sosyal hiyerarşi




Matematiksel model ve algoritma
Sosyal hiyerarşi:

  • Alfa kurtlar (α) - en iyi çözüm.
  • Beta kurtlar (β) - ikinci en iyi çözüm.
  • Delta kurtlar (δ) - üçüncü en iyi çözüm.
  • Omega kurtlar (ω) - diğer olası çözümler.

Avın çevrelenmesi: halihazırda en iyi alfa, beta ve delta çözümleri mevcut olduğunda, sonraki eylemler omegaya bağlıdır.



stages

Şekil 2. Avlanma aşamaları: arama, çevreleme ve saldırı.


Algoritmanın tüm yinelemeleri üç aşamayla temsil edilir: arama, çevreleme ve saldırı. Algoritmanın kanonik versiyonu, algoritmanın yakınsamasını iyileştirmek için kullanılan а katsayısına sahiptir. Katsayı her yinelemede sıfıra doğru yaklaşır. Katsayı 1'i aştığı sürece kurtların başlatılması devam eder. Bu aşamada, avın konumu hakkında hiçbir bilgi yoktur, dolayısıyla kurtlar rastgele dağıtılmalıdır.

"Arama" aşamasından sonra, uygunluk fonksiyonunun değeri belirlenir ve ancak bundan sonra "çevreleme" aşamasına geçilebilir. Çevreleme aşamasında, a katsayısı 1'den büyüktür. Bu, alfa, beta ve deltanın önceki konumlarından uzaklaşacağı anlamına gelir ve böylece hedeflenen avın konumunun netleşmesi sağlanacaktır. а katsayısı 1'e eşit olduğunda "saldırı" aşaması başlar. Katsayı, yinelemelerin sonuna kadar 0'a doğru düşecektir. Bu da kurtların, avın en iyi konumunun zaten bulunduğunu varsayarak ava yaklaşmasına neden olur. Bununla birlikte, eğer kurtlardan biri daha iyi bir çözüm bulursa, avın konumu ve kurtların hiyerarşisi güncellenecektir, ancak katsayı hala 0'a doğru hareket etmeye devam edecektir. a'nın değişme süreci lineer olmayan bir fonksiyonla temsil edilir. Aşamalar şematik olarak Şekil 2'de gösterilmektedir.

Omega kurtların davranışı tüm yinelemeler boyunca değişmez: o anda baskın olan bireylerin konumları arasındaki geometrik merkezi takip etmekten ibarettir. Şekil 3'te alfa, beta ve delta, katsayılar tarafından ayarlanan bir yarıçapla önceki konumlarından rastgele bir yönde saparlar, omegalar ise onların aralarındaki merkeze doğru (yarıçap dahilinde bu merkezden bir miktar sapma olasılığı ile birlikte) hareket eder. Yarıçaplar a katsayısı tarafından tanımlanır ve bu katsayı, hatırladığımız gibi, değişerek yarıçapların da orantılı olarak daralmasına neden olur.




surrounding

Şekil 3. Alfa, beta ve delta ile ilişkili olarak omega hareketinin diyagramı


GWO algoritmasının yalancı kodu aşağıdaki gibidir:

1) Gri kurt popülasyonunu rastgele başlat.
2) Popülasyonun her bir üyesinin uygunluğunu hesapla.
3) Sürü liderleri:
- α = en iyi uygunluk değerine sahip üye
- β = ikinci en iyi üye (uygunluk değeri açısından)
- δ = üçüncü en iyi üye (uygunluk değeri açısından)
Tüm omega kurtların konumunu α, β, δ'ya bağlı formüllere göre güncelle.
4) Popülasyonun her bir üyesinin uygunluğunu hesapla.
5) 3. adımı tekrarla.

Algoritma koduna geçelim. Orijinal versiyona yaptığım tek ekleme, sürüdeki lider kurtların sayısını ayarlayabilmektir. Artık tüm sürüye kadar istediğimiz sayıda lider ayarlayabiliriz. Bu, belirli görevler için faydalı olabilir.

Her zamanki gibi, algoritmanın temel birimiyle başlıyoruz - problemin çözümü olan kurt. Bu, bir koordinat dizisi ve bir av değeri (uygunluk fonksiyonu) içeren bir yapıdır. Yapı, sürünün liderleri ve küçük üyeleri için aynıdır. Bu, algoritmayı basitleştirir ve döngüsel işlemlerde aynı yapıları kullanmamıza olanak sağlar. Tüm yinelemeler sırasında kurtların rolleri birçok kez değişir. Roller, sıralamadan sonra dizideki konuma göre benzersiz bir şekilde belirlenir. Liderler dizinin başındadır.

//——————————————————————————————————————————————————————————————————————————————
struct S_Wolf
{
  double c []; //coordinates
  double p;    //prey
};
//——————————————————————————————————————————————————————————————————————————————

Kurt sürüsü kompakt ve anlaşılır bir sınıf tarafından temsil edilir. Burada optimize edilecek parametrelerin aralıklarını ve adımlarını, en iyi av konumunu, en iyi çözüm değerini ve yardımcı fonksiyonları bildiririz.

//——————————————————————————————————————————————————————————————————————————————
class C_AO_GWO //wolfpack
{
  //============================================================================
  public: double rangeMax  []; //maximum search range
  public: double rangeMin  []; //manimum search range
  public: double rangeStep []; //step search
  public: S_Wolf wolves    []; //wolves of the pack
  public: double cB        []; //best prey coordinates
  public: double pB;           //best prey

  public: void InitPack (const int    coordinatesP,   //number of opt. parameters
                         const int    wolvesNumberP,  //wolves number
                         const int    alphaNumberP,   //alpha beta delta number
                         const int    epochCountP);   //epochs number

  public: void TasksForWolves      (int epochNow);
  public: void RevisionAlphaStatus ();


  //============================================================================
  private: void   ReturnToRange (S_Wolf &wolf);
  private: void   SortingWolves ();
  private: double SeInDiSp      (double In, double InMin, double InMax, double Step);
  private: double RNDfromCI     (double Min, double Max);

  private: int    coordinates;     //coordinates number
  private: int    wolvesNumber;    //the number of all wolves
  private: int    alphaNumber;     //Alpha beta delta number of all wolves
  private: int    epochCount;

  private: S_Wolf wolvesT    [];   //temporary, for sorting
  private: int    ind        [];   //array for indexes when sorting
  private: double val        [];   //array for sorting

  private: bool   searching;       //searching flag
};
//——————————————————————————————————————————————————————————————————————————————

Geleneksel olarak, sınıf bildirimini başlatma takip eder. Burada kurtların uygunluğunu minimum 'double' değerine sıfırlıyoruz ve dizilerin büyüklüğünü dağıtıyoruz.

//——————————————————————————————————————————————————————————————————————————————
void C_AO_GWO::InitPack (const int    coordinatesP,   //number of opt. parameters
                         const int    wolvesNumberP,  //wolves number
                         const int    alphaNumberP,   //alpha beta delta number
                         const int    epochCountP)    //epochs number
{
  MathSrand (GetTickCount ());
  searching = false;
  pB        = -DBL_MAX;

  coordinates  = coordinatesP;
  wolvesNumber = wolvesNumberP;
  alphaNumber  = alphaNumberP;
  epochCount   = epochCountP;

  ArrayResize (rangeMax,  coordinates);
  ArrayResize (rangeMin,  coordinates);
  ArrayResize (rangeStep, coordinates);
  ArrayResize (cB,        coordinates);

  ArrayResize (ind, wolvesNumber);
  ArrayResize (val, wolvesNumber);

  ArrayResize (wolves,  wolvesNumber);
  ArrayResize (wolvesT, wolvesNumber);

  for (int i = 0; i < wolvesNumber; i++)
  {
    ArrayResize (wolves  [i].c, coordinates);
    ArrayResize (wolvesT [i].c, coordinates);
    wolves  [i].p = -DBL_MAX;
    wolvesT [i].p = -DBL_MAX;
  }
}
//——————————————————————————————————————————————————————————————————————————————

Her yinelemede çağrılan ilk public metot, anlaşılması en zor ve en kapsamlı olanıdır. Burası algoritmanın ana mantığıdır. Aslında, algoritmanın performansı, formüllerle sıkı bir şekilde tanımlanan olasılıksal bir mekanizma tarafından sağlanmaktadır. Bu metodu adım adım inceleyelim. İlk yinelemede (o anda hedeflenen avın konumu bilinmemektedir), bayrağı kontrol ettikten sonra, optimize edilen parametrelerin maksimum/minimum aralığından değerler üreterek kurtları rastgele yönlere gönderiyoruz.

//----------------------------------------------------------------------------
//space has not been explored yet, then send the wolf in a random direction
if (!searching)
{
  for (int w = 0; w < wolvesNumber; w++)
  {
    for (int c = 0; c < coordinates; c++)
    {
      wolves [w].c [c] = RNDfromCI (rangeMin [c], rangeMax [c]);
      wolves [w].c [c] = SeInDiSp  (wolves [w].c [c], rangeMin [c], rangeMax [c], rangeStep [c]);
    }
  }
   
  searching = true;
  return;
}

Algoritma tanımının kanonik versiyonunda, vektörleri yöneten formüller vardır. Ancak, kod biçiminde çok daha nettirler. Omega kurtların hesaplanması alfa, beta ve delta kurtların hesaplanmasından önce yapılır, çünkü liderlerin önceki değerlerinin kullanılması gerekir.

Avlanmanın üç aşamasını (arama, çevreleme ve saldırı) sağlayan ana bileşen a katsayısıdır. Mevcut yinelemeye ve toplam yineleme sayısına lineer olmayan bir bağımlılığı temsil eder ve 0'a eğilimlidir.
Ai ve Сi formülleri:
  • Ai = 2.0 * a * r1 - a
  • Ci = 2.0 * r2
Burada r1 ve r2, [0.0;1.0] aralığında rastgele sayılardır.
Xn += wolves [abd].c [c] - Ai * (Ci * wolves [abd].c [c] - wolves [w].c [c])
ifadesinde kurtların koordinatları lider kurtların ortalama değerlerine göre ayarlanır. Algoritmada herhangi bir sayıda lider belirtilebildiğinden, koordinatların toplanması bir döngü içerisinde gerçekleştirilir. Devamında, elde edilen toplam lider sayısına bölünür. Bu işlem her koordinat için ayrı ayrı gerçekleştirilir ve her seferinde yeni bir r1 ve r2 değeri üretilir. Gördüğümüz üzere, omega kurtların yeni konumu, kendi mevcut konumları dikkate alınarak liderlerin konumlarına göre ayarlanır.
//----------------------------------------------------------------------------
double a  = sqrt (2.0 * (1.0 - (epochNow / epochCount)));
double r1 = 0.0;
double r2 = 0.0;

double Ai = 0.0;
double Ci = 0.0;
double Xn = 0.0;

double min = 0.0;
double max = 1.0;

//omega-----------------------------------------------------------------------
for (int w = alphaNumber; w < wolvesNumber; w++)
{
  Xn = 0.0;

  for (int c = 0; c < coordinates; c++)
  {
    for (int abd = 0; abd < alphaNumber; abd++)
    {
      r1 = RNDfromCI (min, max);
      r2 = RNDfromCI (min, max);
      Ai = 2.0 * a * r1 - a;
      Ci = 2.0 * r2;
      Xn += wolves [abd].c [c] - Ai * (Ci * wolves [abd].c [c] - wolves [w].c [c]);
    }

    wolves [w].c [c] = Xn /= (double)alphaNumber;
  }

  ReturnToRange (wolves [w]);
}

Ve işte liderlerin hesaplanması. Her bir koordinat için a, Ai ve Ci katsayıları hesaplanır. Aradaki tek fark, liderlerin konumlarının, o anki en iyi av koordinatlarına ve kendi konumlarına göre değişmesidir. Liderler avın etrafında dönerek içeri ve dışarı hareket eder ve saldırıdaki küçük kurtları kontrol eder.

//alpha, beta, delta----------------------------------------------------------
for (int w = 0; w < alphaNumber; w++)
{
  for (int c = 0; c < coordinates; c++)
  {
    r1 = RNDfromCI (min, max);
    r2 = RNDfromCI (min, max);

    Ai = 2.0 * a * r1 - a;
    Ci = 2.0 * r2;

    wolves [w].c [c] = cB [c] - Ai * (Ci * cB [c] - wolves [w].c [c]);
  }

  ReturnToRange (wolves [w]);
}

Bu, her yinelemede çağrılan ikinci public metottur. Sürüdeki liderlerin durumu burada güncellenir. Kurtlar uygunluk değerlerine göre sıralanır. Tüm sürü için depolananlardan daha iyi av koordinatları bulunursa, değerler güncellenir.

//——————————————————————————————————————————————————————————————————————————————
void C_AO_GWO::RevisionAlphaStatus ()
{
  SortingWolves ();

  if (wolves [0].p > pB)
  {
    pB = wolves [0].p;
    ArrayCopy (cB, wolves [0].c, 0, 0, WHOLE_ARRAY);
  }
}
//——————————————————————————————————————————————————————————————————————————————


3. Test fonksiyonları

Skin, Forest ve Megacity fonksiyonlarını halihazırda biliyoruz. Bu test fonksiyonları, optimizasyon algoritmalarını test etmek için tüm karmaşıklık kriterlerini karşılamaktadır. Ancak, dikkate alınmayan bir husus vardır. Testin objektifliğini artırmak için bu uygulanmalıdır. Gereklilikler aşağıdaki gibidir:

  1. Global ekstremum, aralığın sınırlarında olmamalıdır. Algoritmanın aralık dışı için kontrolü yoksa, algoritmanın mükemmel sonuçlar göstereceği durumlar mümkündür. Bunun nedeni, dahili bir kusur nedeniyle değerlerin sınırlarda yer alacak olmasıdır.
  2. Global ekstremum, aralık koordinatlarının merkezinde olmamalıdır. Burada, algoritmanın aralık üzerinde ortalama değerler ürettiği durum dikkate alınır.
  3. Global minimum, koordinatların merkezinde yer almalıdır. Bu, madde 2'de açıklanan durumları hariç tutmak için gereklidir.
  4. Test fonksiyonunun sonuçlarının hesaplanmasında, fonksiyonun tüm tanım kümesi üzerinde rastgele üretilen sayıların (fonksiyon çok değişkenli olduğunda), aslında bu sonuçlar rastgele elde edilmesine rağmen, maksimumun yaklaşık %50'si kadar ortalama bir sonuç vereceği durum dikkate alınmalıdır.

Bu gereklilikler göz önünde bulundurularak, test fonksiyonlarının sınırları revize edildi ve aralığın merkezleri fonksiyon değerlerinin minimumlarına kaydırıldı. Bunu yapmak, optimizasyon algoritmalarının test sonuçlarının objektifliğini yüksek düzeye çıkarmak için gerekliydi. Dolayısıyla, yeni test fonksiyonlarında, rastgele sayı üretimine dayalı optimizasyon algoritması doğal olarak düşük bir genel sonuç göstermektedir. Güncellenmiş derecelendirme tablosu makalenin sonunda yer almaktadır.

Skin fonksiyonu. Optimizasyon algoritmasının kafasını karıştırabilecek ve bunlardan birinde takılıp kalmasına neden olabilecek birkaç yerel ekstremuma sahip düzgün bir fonksiyondur. Tek global ekstremum, çevredeki zayıf değişen değerlerle kendini gösterir. Bu fonksiyon, algoritmanın tek bir alana odaklanmak yerine keşfedilebilir alanlara bölünebilme yeteneğini açıkça ortaya koyar. Özellikle yapay arı kolonisi (Artificial Bee Colony, ABC) algoritması bu şekilde davranır.

skin

Şekil 4. Skin test fonksiyonu

Forest fonksiyonu. Birkaç düzgün ve birkaç türevlenemez ekstremumu bulunan bir fonksiyondur. Bu, optimizasyon algoritmalarının "samanlıkta iğne" bulma becerisi için değerli bir testtir. Tek bir global maksimum nokta bulmak, özellikle fonksiyon çok sayıda değişken içeriyorsa, çok zor bir iştir. Karınca kolonisi algoritması (Ant Colony Optimization, ACO), hedefe giden yolları inanılmaz bir şekilde belirleyen karakteristik davranışıyla bu görevde kendini kanıtlamıştır.



forest

Şekil 5. Forest test fonksiyonu

Megacity fonksiyonu. Fonksiyon, bir global ve birkaç yerel ekstremum içeren ayrık bir optimizasyon problemidir. Son derece karmaşık yüzeyi, gradyan gerektiren algoritmalar için iyi bir test sağlar. Global maksimuma doğru olası yön hakkında herhangi bir bilgi vermeyen tamamen düz bir "zemin" de (aynı zamanda minimumdur) fonksiyona ek bir karmaşıklık katar.


megacity

Şekil 6. Megacity test fonksiyonu

Gelen argümanların aralık dışı değerler için kontrolleri test fonksiyonlarının koduna eklenmiştir. Fonksiyonların önceki versiyonlarında, optimizasyon algoritmaları, haksız bir şekilde fonksiyonun gerçekte tanım aralığında sahip olduğundan daha büyük fonksiyon değerleri elde edebiliyordu.


4. Test sonuçları

Test fonksiyonlarında yapılan değişikliklerle bağlantılı olarak test ortamı da güncellenmiştir. Test ortamı ekranının sağ tarafında, optimizasyon algoritmalarının yakınsama grafiklerini hala görebilirsiniz. Yeşil çizgi, iki değişkenli fonksiyonlar üzerindeki yakınsama sonuçlarını temsil eder. Mavi çizgi, 40 değişkenli fonksiyonları temsil eder. Kırmızı çizgi ise 1000 değişkenli fonksiyonları temsil eder. Büyük siyah daire, fonksiyonun global maksimumunun konumunu gösterir. Küçük siyah daire ise optimizasyon algoritmasının mevcut çözüm değerinin konumunu gösterir. Beyaz çizgilerden oluşan artı işareti, test fonksiyonlarının geometrik merkezini gösterir ve global minimuma karşılık gelir. Bu, test edilen algoritmaların davranışının görsel olarak daha iyi algılanması için eklenmiştir. Beyaz noktalar, ortalama ara çözümleri gösterir. Renkli küçük noktalar ise ilgili boyutun koordinat çiftlerini gösterir. Renk, test fonksiyonunun boyutunun sıralı konumunu belirtir.

Önceki makalelerde ele alınan optimizasyon algoritmalarının yeni test ortamı üzerinde test edilmesinin güncellenmiş sonuçları aşağıdaki tablodan görülebilir. Daha fazla görsel netlik için, yakınsama hızıyla ilgili satır tablodan çıkarılmıştır - test ortamının animasyonundan görsel olarak belirlenebilir. Algoritma açıklamasını içeren bir sütun eklenmiştir.

ACOm (Ant Colony Optimization) test sonuçları:

2022.11.28 12:17:00.468    Test_AO_ACO (EURUSD,M1)    =============================
2022.11.28 12:17:06.382    Test_AO_ACO (EURUSD,M1)    1 Skin's; Func runs 10000 result: 4.844203223078298
2022.11.28 12:17:06.382    Test_AO_ACO (EURUSD,M1)    Score: 0.98229
2022.11.28 12:17:14.191    Test_AO_ACO (EURUSD,M1)    20 Skin's; Func runs 10000 result: 4.043383610736287
2022.11.28 12:17:14.191    Test_AO_ACO (EURUSD,M1)    Score: 0.79108
2022.11.28 12:17:55.578    Test_AO_ACO (EURUSD,M1)    500 Skin's; Func runs 10000 result: 1.2580170651681026
2022.11.28 12:17:55.578    Test_AO_ACO (EURUSD,M1)    Score: 0.12602
2022.11.28 12:17:55.578    Test_AO_ACO (EURUSD,M1)    =============================
2022.11.28 12:18:01.491    Test_AO_ACO (EURUSD,M1)    1 Forest's; Func runs 10000 result: 1.7678766100234538
2022.11.28 12:18:01.491    Test_AO_ACO (EURUSD,M1)    Score: 1.00000
2022.11.28 12:18:09.508    Test_AO_ACO (EURUSD,M1)    20 Forest's; Func runs 10000 result: 1.0974381500585855
2022.11.28 12:18:09.508    Test_AO_ACO (EURUSD,M1)    Score: 0.62077
2022.11.28 12:18:53.348    Test_AO_ACO (EURUSD,M1)    500 Forest's; Func runs 10000 result: 0.20367726028454042
2022.11.28 12:18:53.348    Test_AO_ACO (EURUSD,M1)    Score: 0.11521
2022.11.28 12:18:53.348    Test_AO_ACO (EURUSD,M1)    =============================
2022.11.28 12:18:59.303    Test_AO_ACO (EURUSD,M1)    1 Megacity's; Func runs 10000 result: 4.6
2022.11.28 12:18:59.303    Test_AO_ACO (EURUSD,M1)    Score: 0.38333
2022.11.28 12:19:07.598    Test_AO_ACO (EURUSD,M1)    20 Megacity's; Func runs 10000 result: 5.28
2022.11.28 12:19:07.598    Test_AO_ACO (EURUSD,M1)    Score: 0.44000
2022.11.28 12:19:53.172    Test_AO_ACO (EURUSD,M1)    500 Megacity's; Func runs 10000 result: 0.2852
2022.11.28 12:19:53.172    Test_AO_ACO (EURUSD,M1)    Score: 0.02377
2022.11.28 12:19:53.172    Test_AO_ACO (EURUSD,M1)    =============================
2022.11.28 12:19:53.172    Test_AO_ACO (EURUSD,M1)    All score for C_AO_ACOm: 0.4980520084646583

ABCm (Artificial Bee Colony) test sonuçları:

2022.11.28 12:35:47.181    Test_AO_ABCm (EURUSD,M1)    =============================
2022.11.28 12:35:52.581    Test_AO_ABCm (EURUSD,M1)    1 Skin's; Func runs 10000 result: 4.918379986612587
2022.11.28 12:35:52.581    Test_AO_ABCm (EURUSD,M1)    Score: 1.00000
2022.11.28 12:35:59.454    Test_AO_ABCm (EURUSD,M1)    20 Skin's; Func runs 10000 result: 3.4073825805846374
2022.11.28 12:35:59.454    Test_AO_ABCm (EURUSD,M1)    Score: 0.63922
2022.11.28 12:36:32.428    Test_AO_ABCm (EURUSD,M1)    500 Skin's; Func runs 10000 result: 1.0684464927353337
2022.11.28 12:36:32.428    Test_AO_ABCm (EURUSD,M1)    Score: 0.08076
2022.11.28 12:36:32.428    Test_AO_ABCm (EURUSD,M1)    =============================
2022.11.28 12:36:38.086    Test_AO_ABCm (EURUSD,M1)    1 Forest's; Func runs 10000 result: 1.766245456669898
2022.11.28 12:36:38.086    Test_AO_ABCm (EURUSD,M1)    Score: 0.99908
2022.11.28 12:36:45.326    Test_AO_ABCm (EURUSD,M1)    20 Forest's; Func runs 10000 result: 0.35556125136004335
2022.11.28 12:36:45.326    Test_AO_ABCm (EURUSD,M1)    Score: 0.20112
2022.11.28 12:37:22.301    Test_AO_ABCm (EURUSD,M1)    500 Forest's; Func runs 10000 result: 0.06691711149962026
2022.11.28 12:37:22.301    Test_AO_ABCm (EURUSD,M1)    Score: 0.03785
2022.11.28 12:37:22.301    Test_AO_ABCm (EURUSD,M1)    =============================
2022.11.28 12:37:28.047    Test_AO_ABCm (EURUSD,M1)    1 Megacity's; Func runs 10000 result: 12.0
2022.11.28 12:37:28.047    Test_AO_ABCm (EURUSD,M1)    Score: 1.00000
2022.11.28 12:37:35.689    Test_AO_ABCm (EURUSD,M1)    20 Megacity's; Func runs 10000 result: 1.9600000000000002
2022.11.28 12:37:35.689    Test_AO_ABCm (EURUSD,M1)    Score: 0.16333
2022.11.28 12:38:11.609    Test_AO_ABCm (EURUSD,M1)    500 Megacity's; Func runs 10000 result: 0.33880000000000005
2022.11.28 12:38:11.609    Test_AO_ABCm (EURUSD,M1)    Score: 0.02823
2022.11.28 12:38:11.609    Test_AO_ABCm (EURUSD,M1)    =============================
2022.11.28 12:38:11.609    Test_AO_ABCm (EURUSD,M1)    All score for C_AO_ABCm: 0.4610669021761763

ABC (Artificial Bee Colony) test sonuçları:

2022.11.28 12:29:51.177    Test_AO_ABC (EURUSD,M1)    =============================
2022.11.28 12:29:56.785    Test_AO_ABC (EURUSD,M1)    1 Skin's; Func runs 10000 result: 4.890679983950205
2022.11.28 12:29:56.785    Test_AO_ABC (EURUSD,M1)    Score: 0.99339
2022.11.28 12:30:03.880    Test_AO_ABC (EURUSD,M1)    20 Skin's; Func runs 10000 result: 3.8035430744604133
2022.11.28 12:30:03.880    Test_AO_ABC (EURUSD,M1)    Score: 0.73381
2022.11.28 12:30:37.089    Test_AO_ABC (EURUSD,M1)    500 Skin's; Func runs 10000 result: 1.195840100227333
2022.11.28 12:30:37.089    Test_AO_ABC (EURUSD,M1)    Score: 0.11118
2022.11.28 12:30:37.089    Test_AO_ABC (EURUSD,M1)    =============================
2022.11.28 12:30:42.811    Test_AO_ABC (EURUSD,M1)    1 Forest's; Func runs 10000 result: 1.7667070507449298
2022.11.28 12:30:42.811    Test_AO_ABC (EURUSD,M1)    Score: 0.99934
2022.11.28 12:30:50.108    Test_AO_ABC (EURUSD,M1)    20 Forest's; Func runs 10000 result: 0.3789854806095275
2022.11.28 12:30:50.108    Test_AO_ABC (EURUSD,M1)    Score: 0.21437
2022.11.28 12:31:25.900    Test_AO_ABC (EURUSD,M1)    500 Forest's; Func runs 10000 result: 0.07451308481273813
2022.11.28 12:31:25.900    Test_AO_ABC (EURUSD,M1)    Score: 0.04215
2022.11.28 12:31:25.900    Test_AO_ABC (EURUSD,M1)    =============================
2022.11.28 12:31:31.510    Test_AO_ABC (EURUSD,M1)    1 Megacity's; Func runs 10000 result: 10.2
2022.11.28 12:31:31.510    Test_AO_ABC (EURUSD,M1)    Score: 0.85000
2022.11.28 12:31:38.855    Test_AO_ABC (EURUSD,M1)    20 Megacity's; Func runs 10000 result: 2.02
2022.11.28 12:31:38.855    Test_AO_ABC (EURUSD,M1)    Score: 0.16833
2022.11.28 12:32:14.623    Test_AO_ABC (EURUSD,M1)    500 Megacity's; Func runs 10000 result: 0.37559999999999993
2022.11.28 12:32:14.623    Test_AO_ABC (EURUSD,M1)    Score: 0.03130
2022.11.28 12:32:14.623    Test_AO_ABC (EURUSD,M1)    =============================
2022.11.28 12:32:14.623    Test_AO_ABC (EURUSD,M1)    All score for C_AO_ABC: 0.46043003186219245

PSO (Particle Swarm Optimization) test sonuçları:

2022.11.28 12:01:03.967    Test_AO_PSO (EURUSD,M1)    =============================
2022.11.28 12:01:09.723    Test_AO_PSO (EURUSD,M1)    1 Skin's; Func runs 10000 result: 4.90276049713715
2022.11.28 12:01:09.723    Test_AO_PSO (EURUSD,M1)    Score: 0.99627
2022.11.28 12:01:17.064    Test_AO_PSO (EURUSD,M1)    20 Skin's; Func runs 10000 result: 2.3250668562024566
2022.11.28 12:01:17.064    Test_AO_PSO (EURUSD,M1)    Score: 0.38080
2022.11.28 12:01:52.880    Test_AO_PSO (EURUSD,M1)    500 Skin's; Func runs 10000 result: 0.943331687769892
2022.11.28 12:01:52.881    Test_AO_PSO (EURUSD,M1)    Score: 0.05089
2022.11.28 12:01:52.881    Test_AO_PSO (EURUSD,M1)    =============================
2022.11.28 12:01:58.492    Test_AO_PSO (EURUSD,M1)    1 Forest's; Func runs 10000 result: 1.6577769478566602
2022.11.28 12:01:58.492    Test_AO_PSO (EURUSD,M1)    Score: 0.93772
2022.11.28 12:02:06.105    Test_AO_PSO (EURUSD,M1)    20 Forest's; Func runs 10000 result: 0.25704414127018393
2022.11.28 12:02:06.105    Test_AO_PSO (EURUSD,M1)    Score: 0.14540
2022.11.28 12:02:44.566    Test_AO_PSO (EURUSD,M1)    500 Forest's; Func runs 10000 result: 0.08584805450831333
2022.11.28 12:02:44.566    Test_AO_PSO (EURUSD,M1)    Score: 0.04856
2022.11.28 12:02:44.566    Test_AO_PSO (EURUSD,M1)    =============================
2022.11.28 12:02:50.268    Test_AO_PSO (EURUSD,M1)    1 Megacity's; Func runs 10000 result: 12.0
2022.11.28 12:02:50.268    Test_AO_PSO (EURUSD,M1)    Score: 1.00000
2022.11.28 12:02:57.649    Test_AO_PSO (EURUSD,M1)    20 Megacity's; Func runs 10000 result: 1.1199999999999999
2022.11.28 12:02:57.649    Test_AO_PSO (EURUSD,M1)    Score: 0.09333
2022.11.28 12:03:34.895    Test_AO_PSO (EURUSD,M1)    500 Megacity's; Func runs 10000 result: 0.268
2022.11.28 12:03:34.895    Test_AO_PSO (EURUSD,M1)    Score: 0.02233
2022.11.28 12:03:34.895    Test_AO_PSO (EURUSD,M1)    =============================
2022.11.28 12:03:34.895    Test_AO_PSO (EURUSD,M1)    All score for C_AO_PSO: 0.40836715689743186

RND (Random) test sonuçları:

2022.11.28 16:45:15.976    Test_AO_RND (EURUSD,M1)    =============================
2022.11.28 16:45:21.569    Test_AO_RND (EURUSD,M1)    1 Skin's; Func runs 10000 result: 4.915522750114194
2022.11.28 16:45:21.569    Test_AO_RND (EURUSD,M1)    Score: 0.99932
2022.11.28 16:45:28.607    Test_AO_RND (EURUSD,M1)    20 Skin's; Func runs 10000 result: 2.584546688199847
2022.11.28 16:45:28.607    Test_AO_RND (EURUSD,M1)    Score: 0.44276
2022.11.28 16:46:02.695    Test_AO_RND (EURUSD,M1)    500 Skin's; Func runs 10000 result: 1.0161336237263792
2022.11.28 16:46:02.695    Test_AO_RND (EURUSD,M1)    Score: 0.06827
2022.11.28 16:46:02.695    Test_AO_RND (EURUSD,M1)    =============================
2022.11.28 16:46:09.622    Test_AO_RND (EURUSD,M1)    1 Forest's; Func runs 10000 result: 1.4695680943894533
2022.11.28 16:46:09.622    Test_AO_RND (EURUSD,M1)    Score: 0.83126
2022.11.28 16:46:17.675    Test_AO_RND (EURUSD,M1)    20 Forest's; Func runs 10000 result: 0.20373533112604475
2022.11.28 16:46:17.675    Test_AO_RND (EURUSD,M1)    Score: 0.11524
2022.11.28 16:46:54.544    Test_AO_RND (EURUSD,M1)    500 Forest's; Func runs 10000 result: 0.0538909816827325
2022.11.28 16:46:54.544    Test_AO_RND (EURUSD,M1)    Score: 0.03048
2022.11.28 16:46:54.544    Test_AO_RND (EURUSD,M1)    =============================
2022.11.28 16:47:00.219    Test_AO_RND (EURUSD,M1)    1 Megacity's; Func runs 10000 result: 10.0
2022.11.28 16:47:00.219    Test_AO_RND (EURUSD,M1)    Score: 0.83333
2022.11.28 16:47:08.145    Test_AO_RND (EURUSD,M1)    20 Megacity's; Func runs 10000 result: 1.08
2022.11.28 16:47:08.145    Test_AO_RND (EURUSD,M1)    Score: 0.09000
2022.11.28 16:47:49.875    Test_AO_RND (EURUSD,M1)    500 Megacity's; Func runs 10000 result: 0.28840000000000005
2022.11.28 16:47:49.875    Test_AO_RND (EURUSD,M1)    Score: 0.02403
2022.11.28 16:47:49.875    Test_AO_RND (EURUSD,M1)    =============================
2022.11.28 16:47:49.875    Test_AO_RND (EURUSD,M1)    All score for C_AO_RND: 0.38163317904126015



skin

  Skin test fonksiyonu üzerinde GWO

forest

Forest test fonksiyonu üzerinde GWO

megacity

  Megacity test fonksiyonu üzerinde GWO

GWO (Grey Wolf Optimizer) test sonuçları:

2022.11.28 13:24:09.370    Test_AO_GWO (EURUSD,M1)    =============================
2022.11.28 13:24:14.895    Test_AO_GWO (EURUSD,M1)    1 Skin's; Func runs 10000 result: 4.914175888065222
2022.11.28 13:24:14.895    Test_AO_GWO (EURUSD,M1)    Score: 0.99900
2022.11.28 13:24:22.175    Test_AO_GWO (EURUSD,M1)    20 Skin's; Func runs 10000 result: 2.7419092435309405
2022.11.28 13:24:22.175    Test_AO_GWO (EURUSD,M1)    Score: 0.48033
2022.11.28 13:25:01.381    Test_AO_GWO (EURUSD,M1)    500 Skin's; Func runs 10000 result: 1.5227848592798188
2022.11.28 13:25:01.381    Test_AO_GWO (EURUSD,M1)    Score: 0.18924
2022.11.28 13:25:01.381    Test_AO_GWO (EURUSD,M1)    =============================
2022.11.28 13:25:06.924    Test_AO_GWO (EURUSD,M1)    1 Forest's; Func runs 10000 result: 1.4822580151819842
2022.11.28 13:25:06.924    Test_AO_GWO (EURUSD,M1)    Score: 0.83844
2022.11.28 13:25:14.551    Test_AO_GWO (EURUSD,M1)    20 Forest's; Func runs 10000 result: 0.15477395149266915
2022.11.28 13:25:14.551    Test_AO_GWO (EURUSD,M1)    Score: 0.08755
2022.11.28 13:25:56.900    Test_AO_GWO (EURUSD,M1)    500 Forest's; Func runs 10000 result: 0.04517298232457319
2022.11.28 13:25:56.900    Test_AO_GWO (EURUSD,M1)    Score: 0.02555
2022.11.28 13:25:56.900    Test_AO_GWO (EURUSD,M1)    =============================
2022.11.28 13:26:02.305    Test_AO_GWO (EURUSD,M1)    1 Megacity's; Func runs 10000 result: 12.0
2022.11.28 13:26:02.305    Test_AO_GWO (EURUSD,M1)    Score: 1.00000
2022.11.28 13:26:09.475    Test_AO_GWO (EURUSD,M1)    20 Megacity's; Func runs 10000 result: 1.2
2022.11.28 13:26:09.475    Test_AO_GWO (EURUSD,M1)    Score: 0.10000
2022.11.28 13:26:48.980    Test_AO_GWO (EURUSD,M1)    500 Megacity's; Func runs 10000 result: 0.2624
2022.11.28 13:26:48.980    Test_AO_GWO (EURUSD,M1)    Score: 0.02187
2022.11.28 13:26:48.980    Test_AO_GWO (EURUSD,M1)    =============================
2022.11.28 13:26:48.980    Test_AO_GWO (EURUSD,M1)    All score for C_AO_GWO: 0.41577484361261224

Gri kurt optimizasyonu (Grey Wolf Optimizer, GWO) algoritması, bir gri kurt sürüsünün kapalı alanda avlanmasını simüle etmeye dayanan yeni biyo-esinli optimizasyon algoritmalarından biridir. Ortalama olarak, algoritma hem ekstremum bulma hassasiyeti hem de yakınsama hızı açısından çeşitli fonksiyon türlerinde oldukça verimli olduğunu kanıtlamıştır. Bazı testlerde en iyisi olduğu ortaya çıkmıştır. “Gri kurt optimizasyonu” algoritmasının ana performans göstergeleri, biyo-esinli optimizasyon algoritmaları sınıfında “klasik” olduğuna inanılan “parçacık sürüsü optimizasyonu” algoritmasının ölçümlerinden daha iyidir.

Aynı zamanda, gri kurt optimizasyonu algoritmasının hesaplama karmaşıklığı parçacık sürüsü optimizasyonu algoritmasıyla karşılaştırılabilir düzeydedir. GWO optimizasyonu algoritmasının sayısız avantajı nedeniyle, algoritmanın ilk yayınlanmasından bu yana kısa bir süre içerisinde değiştirilmiş versiyonları üzerine birçok çalışma ortaya çıkmıştır. Algoritmanın tek dezavantajı, keskin bir maksimuma sahip Forest fonksiyonunun bulunan koordinatlarının hassasiyetinin düşük olmasıdır.

Dahası, bulunan ekstremumun düşük hassasiyeti Forest fonksiyonunun tüm boyutlarında kendini göstermiştir ve sonuçlar tablodaki tüm katılımcılar arasında en kötüsüdür. Algoritmanın, düzgün Skin fonksiyonu üzerinde (özellikle de büyük boyutlu Skin fonksiyonunda) etkili olduğu görülmüştür. GWO ayrıca Megacity fonksiyonunda global maksimuma %100 isabet sağlayan üçüncü algoritmadır.

Optimizasyon algoritması

Açıklama

Skin

Forest

Megacity (ayrık)

Nihai sonuç

2 parametre (1 F)

40 parametre (20 F)

1000 parametre (500 F)

2 parametre (1 F)

40 parametre (20 F)

1000 parametre (500 F)

2 parametre (1 F)

40 parametre (20 F)

1000 parametre (500 F)

ACOm

Karınca kolonisi optimizasyonu

0.98229

0.79108

0.12602

1.00000

0.62077

0.11521

0.38333

0.44000

0.02377

0.49805222

ABCm

Yapay arı kolonisi

1.00000

0.63922

0.08076

0.99908

0.20112

0.03785

1.00000

0.16333

0.02823

0.46106556

ABC

Yapay arı kolonisi

0.99339

0.73381

0.11118

0.99934

0.21437

0.04215

0.85000

0.16833

0.03130

0.46043000

GWO

Gri kurt optimizasyonu

0.99900

0.48033

0.18924

0.83844

0.08755

0.02555

1.00000

0.10000

0.02187

0.41577556

PSO

Parçacık sürüsü optimizasyonu

0.99627

0.38080

0.05089

0.93772

0.14540

0.04856

1.00000

0.09333

0.02233

0.40836667

RND

Karmaşık

0.99932

0.44276

0.06827

0.83126

0.11524

0.03048

0.83333

0.09000

0.02403

0.38163222


Sonuçlar

Avantajları:
1. Yüksek hız.
2. Çok sayıda değişkene sahip düzgün fonksiyonlar için yüksek yakınsama.

Dezavantajları:
1. Evrensel değildir.
2. Yerel ekstremumlarda takılıp kalabilir.
3. Ayrık ve türevlenemez fonksiyonlarda düşük ölçeklenebilirlik.


MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/11785

Ekli dosyalar |
Popülasyon optimizasyon algoritmaları: Guguk kuşu optimizasyon algoritması (Cuckoo Optimization Algorithm, COA) Popülasyon optimizasyon algoritmaları: Guguk kuşu optimizasyon algoritması (Cuckoo Optimization Algorithm, COA)
İnceleyeceğimiz bir sonraki algoritma, Levy uçuşlarını kullanan guguk kuşu arama optimizasyonudur. Bu, en yeni optimizasyon algoritmalarından biridir ve derecelendirme tablosunda yeni bir liderdir.
VIDYA göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? VIDYA göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
En popüler teknik göstergelere dayalı ticaret sistemlerinin nasıl geliştirileceğine ilişkin serimizin yeni makalesine hoş geldiniz. Bu makalede, Variable Index Dynamic Average (VIDYA) teknik göstergesini konuk edeceğiz.
Forex ticaretinin arkasındaki temel matematik Forex ticaretinin arkasındaki temel matematik
Makale, Forex ticaretinin temel özelliklerini olabildiğince basit ve hızlı bir şekilde açıklamayı ve bazı temel fikirleri yeni başlayanlarla paylaşmayı amaçlamaktadır. Ayrıca, basit bir göstergenin nasıl geliştirileceği gösterilecek ve ticaret topluluğundaki en endişe verici sorular yanıtlanmaya çalışılacaktır.
Bull’s Power göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? Bull’s Power göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
En popüler teknik göstergelere dayalı ticaret sistemlerinin nasıl geliştirileceğine ilişkin serimizin yeni makalesine hoş geldiniz. Bu sefer Bull’s Power teknik göstergesini inceleyeceğiz.