"Genetik Algoritmalar - Çok Kolay!" makalesi için tartışma - sayfa 13
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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.
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
İyi günler .
Hızlı cevabınız için teşekkür ederim.
O zaman bazı sorularım var.
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.
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,
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?
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.
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:
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ı
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.