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
Nüfus büyüklüğünün hesaplanmasını öneriyorum:
Makale için çok teşekkür ederim! Eğer bu olmasaydı - genetik yöntemlerin ne olduğunu asla öğrenemezdim :)
Ama bir soru var! Veritabanından kromozomları kontrol ettiğimizde - bir eşleşme durumunda - veritabanındaki kromozom indeksinden bir birim çıkarılacaktır. Neden? Peki ya indeks sıfırsa?
Nerede yanlış yapıyorum?
Nüfus büyüklüğünün hesaplanmasını öneriyorum:
Atıfta bulunulan kaynağın yetkinliğine itiraz etmeyeceğim, ancak aynı fikirde değilim.
GA'nın optimizasyon problemlerinde kullanılmasının fizibilitesi, doğrudan aramaya kıyasla optimumun belirlenmesi için gereken FF çalıştırma sayısının azaltılmasında yatmaktadır.
Eğer öneriyi takip edersek
ChromosomeCount=GeneCount*11;1000 argümanlı problem 11000 bireylik bir popülasyon büyüklüğü gerektirecektir! Ve bu sadece 1 epokta 11000 FF çalışması demektir! Rastgele gen üretimi de kullanabilirsiniz ve sonuç optimumun bulunmasında çok daha düşük olmayacaktır. Verilen kaynak, büyük bir popülasyonda, popülasyonu her çağda iyileştirmeye doğru daha da geliştirmek için yeterli genetik materyal olacağına dair bir "bahis" yapar. Ben de aynı şeyi başarmaya çalışıyorum, ancak FF çalışmalarının toplam artışı olmadan genetik operatörlerle olasılıklarla oynayarak.
Makale için çok teşekkür ederim! Eğer bu olmasaydı - genetik yöntemlerin ne olduğunu asla öğrenemezdim :)
Ama bir soru var! Veritabanından kromozomları kontrol ettiğimizde - bir eşleşme durumunda - veritabanındaki kromozom indeksinden bir birim çıkarılacaktır. Neden? Peki ya endeks sıfırsa?
Nerede hata yapıyorum???
Veritabanı yalnızca veritabanında en az bir kromozom varsa kontrol edilir. Veritabanı arama kodunun tüm bölümünden alıntı yapmadınız.
Bu nedenle, tabanda kromozom olmadığı ancak oluğun kontrol edildiği durum imkansızdır.
Veritabanı kontrolü yalnızca veritabanında en az bir kromozom olduğunda gerçekleştirilir. Tabana göre arama için kodun tüm bölümünü vermediniz.
Bu nedenle, veritabanında kromozom olmadığı, ancak oluk kontrolünün yapıldığı durum imkansızdır.
Bu kadar hızlı bir cevap için teşekkür ederim! Ben tam olarak sizin bahsettiğiniz şeyi kastetmemiştim!
1) Veritabanında gerçekten bir kromozom olduğunu varsayalım (ChrCountInHistory = 1 - yani dizi boyutu bire eşittir) - o zaman veritabanındaki indeksi sıfırdır! (ChrCountInHistory varsayılan olarak sıfırdır - dizideki bir elemanın indeksi sıfırdır).
Ve bu indeksten bir çıkarırız:
ayrıca, arama Ch1=0'dan başlar.
2) HistoryHromosomes[Ge][Ch1 ] ile karşılaştırırız ve HistoryHromosomes[0][Ch1-1] atarız.
Haklısınız, teşekkür ederim.
Yapılması gereken bu:
Haklısınız, teşekkür ederim.
Gitmenin yolu bu:
Hmm.
Şimdi HistoryHromosomes[0][Ch1] üzerinde"Array out of range", her şey doğru görünmesine rağmen...
joo:
Haklısınız, teşekkür ederim.
Rica ederim! Önemli olan, şimdi eskisinden daha iyi çalışıyor olması :)
joo:
Hmm.
Şimdi HistoryHromosomes[0][Ch1] üzerinde "Array out of range", ancak her şey doğru görünüyor ...
Nedenini söylemek zor - analiz etmek için farklı kodlarımız var. Belki de sorun "position" değişkenidir - makaledeki karşılığı "chromos". Makaledeki kodu muhtemelen 10 kez inceledim - hatanın nerede olduğunu anlayamadım :( Makaledeki örnekleri daha sonra kontrol edeceğim - belki bir şeyler daha netleşir.
Not: Eğer bir değişken ~150 değerden oluşuyorsa hafıza bankası kullanmak doğru olur. Ve geçmişte 100000 birey var. Belki böyle bir durumda hesaplamak, hepsini kontrol etmekten (aramaktan) daha hızlı olur? Kontrol etmediniz mi?
Not: Eğer bir değişken ~150 değerden oluşuyorsa bir hafıza bankası kullanmak doğrudur. Ve geçmişte 100000 birey var. Belki böyle bir durumda saymak, hepsini kontrol etmekten (tekrar kontrol etmekten) daha hızlı olur? Kontrol etmediniz mi?
Her şey FF'yi hesaplamak için gereken süreye bağlıdır. Eğer FF sadece matematiksel bir fonksiyon ise, o zaman banka makul değildir. Ancak FF geçmiş çalışmaları (nöron öğrenme vb.) ve diğer kaynak yoğun görevleri kullanıyorsa, banka gereklidir ve optimizasyon süresini önemli ölçüde azaltabilir.
Bu aynı zamanda genlerin doğruluğuna da bağlıdır. Genler ne kadar "kaba" olursa, tekrarlar o kadar sık meydana gelir ve bir kromozom bankası kullanmak o kadar mantıklı olur.
....
:)
Hala bir hata yok, kafamı çok karıştırdınız. Burada bir test betiği yaptım, deneyin, her şeyi anlayacaksınız.
Burada, kromozomu Ch1'in pozisyonu ile karşılaştırmasına rağmen, üst döngüde +1 atanır, bu yüzden daha sonra -1'i çıkarırım.
Katılıyorum, biraz çarpık, daha iyi yapılabilirdi.
İşte kontrol etmek için bir komut dosyası: