Popülasyon optimizasyon algoritmaları: Gri kurt optimizasyonu (Grey Wolf Optimizer, GWO)
İç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.
Ş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.
Ş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.
Ş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
//---------------------------------------------------------------------------- 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:
- 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.
- 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.
- Global minimum, koordinatların merkezinde yer almalıdır. Bu, madde 2'de açıklanan durumları hariç tutmak için gereklidir.
- 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.
Ş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.
Ş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.
Ş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 test fonksiyonu üzerinde GWO
Forest test fonksiyonu üzerinde GWO
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) | |||
Karınca kolonisi optimizasyonu | 0.98229 | 0.79108 | 0.12602 | 1.00000 | 0.62077 | 0.11521 | 0.38333 | 0.44000 | 0.02377 | 0.49805222 | |
Yapay arı kolonisi | 1.00000 | 0.63922 | 0.08076 | 0.99908 | 0.20112 | 0.03785 | 1.00000 | 0.16333 | 0.02823 | 0.46106556 | |
Yapay arı kolonisi | 0.99339 | 0.73381 | 0.11118 | 0.99934 | 0.21437 | 0.04215 | 0.85000 | 0.16833 | 0.03130 | 0.46043000 | |
Gri kurt optimizasyonu | 0.99900 | 0.48033 | 0.18924 | 0.83844 | 0.08755 | 0.02555 | 1.00000 | 0.10000 | 0.02187 | 0.41577556 | |
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 | |
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
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz