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

 

Makaledeki serbest kütüphanede genotip ile çalışın. FF'de fenotip ile çalışın (örnek 2'deki gibi).

Yukarıdakiler, fenotip FF'de işlenirse kütüphanenin de aynı şekilde verimli çalışacağı anlamına gelir, ancak iterasyon sayısı (FF çalıştırmaları) GA'nın doğrudan fenotiple çalışmasından önemli ölçüde daha yüksek olacaktır (çünkü arama alanı ayrıntısı artar). Limitte, arama (fenotip iyileştirmesi olmadan) sürekli bir arama uzayına yönelir.

 

İyi geceler.

Harika bir makale için size teşekkür etmek istiyorum.

İlk başta benim için biraz karmaşıktı, ancak bir şekilde çözdüm.

Bu forum başlığına bir şeyler yazmadan önce, makalenizi ve UGA algoritmasının gidişatını doğru anlayıp anlamadığımı kendim için açıklığa kavuşturmak istiyorum:

1) Belirli bir görev için UGA'nın giriş parametrelerinin ayarlanması.

---UGA

2) Genleri rastgele birleştirerek ebeveynlerden oluşan bir başlangıç kolonisi oluşturmak

2.2) Bu koloninin her biri için FF sonucunun hesaplanması

2.3)Klonların çıkarılması.

3)O kolonideki tüm bireylerden en iyi FF sonucunun belirlenmesi

4) İlk koloniden bir torun kolonisi oluşturma döngüsünü başlatmak. Torunlar, araçlar kullanılarak oluşturulur: Çaprazlama, yapay ve doğal mutasyon, gen replikasyonu ve gen ödünç alma, burada

Çaprazlama - ebeveyn kromozomlarının parçalarının değişimi,

Yapay mutasyon - aralık dışındaki genlerin seçimi (ebeveyn 1'in geni, ebeveyn 2'nin geni).

Est. Mutasyon - aralıktaki genlerin seçimi (Minimum gen aralığı , Maksimum gen aralığı).

Çoğaltma - ebeveyn genlerinin değerlerine yakın aralıklarda, ancak belirli bir ofset ile genlerin seçilmesi.

gen ödünç alma - gen sayısına eşit ebeveyn sayısından "birleştirilmiş birey" oluşturulması.

5 )Klonların silinmesi

6 )Bu kolonilerin her biri için FF sonucunun hesaplanması

7) Soydan gelen bireylerin sonuçlarının referans sonuçla karşılaştırılması ve olası değiştirilmesi. değiştirme durumunda "Referans değerde değişiklik olmayan dönemler" sayacı sıfırlanır

8)Tüm bireylerin en iyiden en kötüye doğru sıralanması.

9) --> madde 4

10) Y'de değişiklik olmayan epoklar meydana gelirse, sonlandırın ve bulunan referans değerin çıktısını alın.

Şimdiden özür dilerim, belki de bu bir öğreticiden ziyade bir tartışma başlığıdır, ancak tavsiye isteyebileceğim başka bir yerim yok. Aslında GA ile ilk kez sizin makalenizde tanıştım (Makalenizden önce terminal tester'daki "Fast(genetic algorithm)" kelimelerinin ne anlama geldiğini bile anlamamıştım), bu yüzden bilgi ve tecrübem (MQL5'te programlamaya yaklaşık 2 ay önce başladım) biraz sınırlı.

GA algoritmanızı anlarsam, OOP'ye nakletmeye çalışacağım. Aslında ne için çalışmaya başladım. Doğrudan arama ile kendi kendini optimize eden ticaret modellerini zaten uyguladım, ancak GA ile henüz değil. (https://www.mql5.com/ru/articles/217 makalesinde açıklanan prensibe dayalı modeller).

Şimdiden teşekkürler.

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 

mi__x__an:

...Yazınızı ve UGA algoritmasının gidişatını doğru anlayıp anlamadığımı kendim için açıklığa kavuşturmak istiyorum

Genel anlamda, evet, doğrudur.
 

İyi günler .

Hızlı cevabınız için teşekkür ederim.

O zaman bazı sorularım var.

double Chromosome[];           //Set of optimised function arguments - genes
                               //(örneğin: sinir ağı ağırlıkları, vb.)-kromozom
int    GeneCount           =0; // Bir kromozomdaki gen sayısı
double RangeMinimum        =0.0;//Minimum arama aralığı
double RangeMaximum        =0.0;//Arama aralığının maksimum değeri
double Precision           =0.0;//Arama Adımı
int    OptimizeMethod      =0; //1-minimum, başka herhangi biri - maksimum

Buradaki Kromozom dizisi nedir? Optimize edilen parametrenin olası değerleri?

Örneğin, "minimum lot büyüklüğü "nü 0,1 ila 1 aralığında optimize edersek (minimum lot adımı 0,1 olacak şekilde),

o zaman dizi şöyle görünecektir: {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}, kromozom 1'deki gen sayısı, minimum 0.1 maksimum 1.0, adım 0.1 ? Öyle mi?

Ve ilgili bir soru, böyle bir diziye nasıl girilir, örneğin: Optimize Edilmiş Zararı Durdur [10...500], Kar Al [10...500], Min. lot büyüklüğü [0.1...1.0] ve Takip bayrağı (takip kullan veya kullanma) [0...1]?

Genel olarak, olası değerlerin farklı türleri, minimumları ve maksimumları ile parametreleri optimize ederken giriş verileri nasıl görünmelidir?

Cevap için şimdiden teşekkürler.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
mi__x__an:

Buradaki Kromozom dizisi nedir? Optimize edilen parametrenin olası değerleri mi?

Örneğin, "minimum parti büyüklüğü "nü 0,1 ila 1 aralığında optimize edersek (minimum parti adımı 0,1 olacak şekilde),

o zaman dizi şöyle görünecektir: {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}, kromozom 1'deki gen sayısı, minimum 0.1 maksimum 1.0, adım 0.1 ? Öyle mi?

Ve ilgili bir soru, böyle bir diziye nasıl girilir, örneğin: Optimize Edilmiş Zararı Durdur [10...500], Kar Al [10...500], Min. lot büyüklüğü [0.1...1.0] ve Takip bayrağı (takip kullan veya kullanma) [0...1]?

Genel olarak, olası değerlerin farklı türleri, minimumları ve maksimumları ile parametreleri optimize ederken giriş verileri nasıl görünmelidir?

Cevap için şimdiden teşekkürler.

Hayır,

double Chromosome[];           //Set of optimised function arguments - genes

Chromosome[] tam olarak yorumun söylediği şeydir.

İlk indeks [0] bireyin uygunluk değeridir. Diğerleri belirli bir aralıktaki optimize edilmiş parametrelerdir. Bu genotiptir.

FF'de fenotip (zarar durdurma, kar alma, hacimler, göstergeler veya başka bir şey) ile çalışın (kromozom genleri aralığında optimize edilmiş parametrelerin ölçeklendirilmesi):

Örneğin, genler [-1;1] aralığında ayarlanır, o zaman

Endeks 0: FF değeri <---------------------------------------------------------[8;8]//pivot Pi/2 sekizli.

1. indeks: Zararı durdur [10..500] <------------------------------------------------ [-1;1]

2. endeks: Kar al [10..500] <--------------------------------------------- [-1;1]

3. indeks: Min. lot hacmi [0.1...1.0] <--------------------------------------- [-1;1]

4. indeks: Takip bayrağı (takip kullanmak ya da kullanmamak için)[0..1] <------ [-1;1]

Ayrıca, Chromosome[] dizisinin 5 hücresi vardır. Örneğin, bir kromozom şu şekilde görünebilir {0.2, 0.3, -0.8, 0.1, 0.9;}

 
Ancak bu durumda gerçek olmayan genlerin değerlerinin doğruluğunun FF'de işlenmesi gerekecektir. Yani, long, double ve bool türlerini optimize edersek, UGA hepsi için gerçek değerler üretecektir, bool için de dahil olmak üzere, RangeMinimum ileRangeMaximum aralığında birçok gen varyasyonu olacaktır, gerçek olası kullanım sadece iki değer 1 ve 0 olacaktır. Doğru mu anlıyorum? Ve zaten doğru değerlerin seçimi FF'de mi yapılacak?
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
mi__x__an:
Ancak bu durumda gerçek olmayan genlerin değerlerinin doğruluğunun FF'de işlenmesi gerekecektir. Yani, long, double ve bool türlerini optimize edersek, UGA hepsi için gerçek değerler üretecektir, bool için de dahil olmak üzere, RangeMinimum ileRangeMaximum aralığında birçok gen varyasyonu olacaktır, gerçek olası kullanım sadece iki değer 1 ve 0 olacaktır. Doğru mu anlıyorum? Ve zaten doğru değerlerin seçimi FF'de mi yapılacak?
Doğru, eğer bu uygun değilse, ikili bir genetik algoritma kullanmalısınız (test cihazında uygulanan gibi). Dördüncü forumda bununla ilgili bir makale var.
 

O zaman bu dezavantajdan kurtulmanın en iyi yolu, şahsen benim için, kromozom gen değerlerini FF'de kullanılabilecek olanlara göre düzelten bir hizmet işlevi sunmak olacaktır.

--> torunların üretilmesi --> gen değerlerinin gerçekten kullanılabilir değerlere ayarlanması --> klonların silinmesi --> FF'nin çağrılması.

Bu hareket tarzının UGA performansı üzerinde büyük bir etkisi olacağını düşünüyor musunuz? Sonuçta, fikir olarak, bir parametreyi optimize etme adımı diğerinden daha büyükse FF çalıştırma sayısı azaltılmalıdır.

 
Urain:
Doğru, eğer bu uygun değilse, o zaman ikili bir genetik algoritma kullanmalısınız (test cihazında uygulanan gibi). Dördüncü forumda bununla ilgili bir makale var.

Hayır, mesele farklı. Algoritma bu tür durumlar için de gayet iyi kullanılabilir.

mi__x__an:

Ancak bu durumda gerçek genlerin değil, değerlerin doğruluğunun işlenmesi FF'de yapılmak zorunda kalacak. Yani, long, double ve bool türlerini optimize edersek, UGA hepsi için gerçek değerler üretecektir, bool için de dahil olmak üzere, RangeMinimum ileRangeMaximum aralığında birçok gen varyasyonu olacaktır, gerçek olası kullanım sadece iki değer 1 ve 0 olacaktır. Doğru anlıyor muyum? Ve zaten doğru değerlerin seçimi FF'de mi yapılacak?

Fenotip ile tüm işlemler FF'de yapılmalıdır. Bu genotipten fenotipe bir kod çözme meselesidir.

Tamam, optimize edilmiş parametrenin bool tipinde olduğunu ve sadece iki varyantın mümkün olduğunu varsayalım: doğru ve yanlış. O zaman kod çözme şöyle bir şey olacaktır:

if(gene<(RangeMaximum+RangeMinimum )/2.0)

p=false;

else

p=true;

burada gen, bir kromozomun belirli bir genidir.

Bu genin (genotip) tüm olası varyantları ile sadece 2 fenotip elde edeceğimiz ortaya çıkmaktadır. Bu durum canlı doğada da böyledir.

Ancak, bunun doğal bir sonucu vardır: problemi çözmek için gerekenden daha fazla kromozom varyantı üretilecektir (ve dolayısıyla FF daha fazla kez hesaplanacaktır). Yani, optimizasyon daha uzun sürecektir. Bundan daha önce bahsetmiştim. Kromozomların ikili kodlanması durumunda da durum aynı olacaktır. Yine de göreve özgü bir fenotipe kod çözmeniz gerekecektir.

AMA. Hem ikili kodlama durumunda hem de genlerin gerçek sayılarla temsil edilmesi durumunda, her bir oPTİMİSED PARAMETRE için ARAMA ADIMLARI VE ADIMINI ayarlayarak gereksiz FF hesaplamalarını önlemek (olası kromozom varyantlarının sayısını azaltmak için) çok kolaydır. Yani, gereksiz kromozom varyantlarını önceden kesmek (bu zaten ikili kodlama ile standart optimize edicide yapılır). Bu, makaledeki GA için de yapılabilir, sadece ona uygun işlevselliği eklemeniz gerekir - her gen için sınırları ve adımı belirleme yeteneği, yani GA'nın doğrudan fenotip ile çalışmasına izin vermek için.

 

Ancak kütüphanedeki her gen için sınırları ve adımı belirleme ihtiyacı esnekliğini azaltacaktır.

Ticaret modelleri optimize edicisinde kullandığım muhtemelen en iyi veya en kötü yol değil:

1 - optimize edilen parametrenin sınıfı - CObject mirasçısı

class COptimizatedParam: public CObject
{
public:
 string name; //имя оптимизируемого параметра, требуется для выполнения ФФ(в моем случае у меня модель полностью так и работает как работала, только с виртуальным аккаунтом)
 string type; //тип оптимизируемого параметра, требуется для см. выше
 string on;   //с какого значения начать выполнение -минимум
 string step; //шаг
 string end;  //максимум
 string value; //в моем случае инициализация модели происходит по тому же CList, который передан функции оптимизации  и value -текущее значение оптимизируемого параметра
 void   Init(string Name,string Type,string On,string Step,string End)
             {name=Name;type=Type;on=On;step=Step;end=End;}
};

2 - Ana genel modelin sanal işlevi:

  virtual CList     *OptimizatedParams()

her bir özel modelin kendi optimize edilmiş parametreler listesini oluşturmasını sağlar.

3. Optimizasyon fonksiyonu - gerekli tüm değerleri özyinelemeli olarak numaralandırır.

Tüm numaralandırılmış tipler optimizasyon fonksiyonu tarafından ele alınabilir.

Şimdi soru şu: CList'i, optimize edilmiş parametre hakkındaki bilgilerin optimize edilmiş parametrenin bu sınıfından geçirildiği ve UGA Kütüphanesinin kendisinin her gen için gerektiği kadar sınır ve adım oluşturduğu giriş verileri olarak yapmak mantıklı olacaktır. Bu ona daha fazla esneklik kazandıracak ve genetik değil fenotipik klonlar oluşturmak için gereksiz FF çalıştırma sayısını azaltacaktır.

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Виртуальные функции - Документация по MQL5