MT geliştiricileri için değil! INIT_PARAMETERS_INCORRECT nasıl değiştirilir?

 

Böyle bir sorunla karşılaşıldığında: programın mantığına göre,işlev çağırmak için geçersiz seçeneklerin ayıklanması gerekir. Bunun için INIT_PARAMETERS_INCORRECT kullanıyorum. Ancak genetik optimizasyon neredeyse anında durur. Geliştiriciler, bu durumla ilgili sorularla şimdiden çileden çıkmış durumda. Genetik analiz vb. öğrenmeniz önerilir. vb..

Ve neden buna ihtiyacım var? Bir kullanıcı olarak sonucu almak istiyorum, ancak orada nasıl çalıştığı benim için derinden mor.

Ve böylece, 1, 2 ve 3 numaralı üç fonksiyona bir örnek, kullanmamaktır.

Fonksiyonlar bir zincirde tekrarlanmamalı ve fonksiyonlar arasında 0 olmamalıdır (aksi takdirde tekrarlar mümkündür).

Geçerli zincirlere örnek:

  • 100
  • 120
  • 130
  • 123
  • 132
  • 2..
  • 3..

Geçersiz zincirlere örnek:

  • 010
  • 001
  • 110
  • 101
  • 111
  • 121
  • 122
  • 131
  • 133
  • 112
  • 113
  • 102
  • 103
  • 2..
  • 3..
Gördüğünüz gibi, kabul edilebilir zincirlerden çok daha fazla geçersiz zincir var. Örnek nasıl yapılır? INIT_PARAMETERS_INCORRECT nasıl değiştirilir? Nerede kazılır?

 
Parametreler bırakılırsa Açık işlevlerdeki hesaplamaları iptal edin. Çalıştırmalar INIT_PARAMETERS_INCORRECT değerinden daha yavaş olacak, ancak önemli ölçüde değil.
 
Neye benziyor? Küçük bir örnek alabilir miyim?
 

Girdi parametrelerinin olası kümelerini, istenmeyen kümeleri ve neden çok fazla istenmeyen küme olduğunu daha belirgin bir şekilde belirtmek mümkündür?

Çok fazla istenmeyen küme olmaması gerektiği konusunda geliştiricilere tamamen katılıyorum. Optimal olarak - %10'dan fazla değil

 
Сергей Таболин :
Neye benziyor? Küçük bir örnek alabilir miyim?

fxsaber haklı.

Girdi olarak yanlış bir parametre seti verilirse, hemen tüm OnTick() işlevlerini döndürürsünüz. Ve OnTester'da - en az sonucu verirsiniz.

 
Сергей Таболин :
Neye benziyor? Küçük bir örnek alabilir miyim?
 input int i = 0 ; 

bool Incorrect;
 
int OnInit ()
{
  Incorrect = !i; // нулевое значение считается некорректным (пример)
  
//  return(Incorrect ? INIT_PARAMETERS_INCORRECT : INIT_SUCCEEDED); // Было
   return ( INIT_SUCCEEDED );
}

void OnTick ()
{
   if (Incorrect)
     return ;
    
   // ...
}
 
Bunlar giriş parametresi kümeleri değildir! Bu, tekrarlanmaması gereken bir dizi özelliktir! Yavaş optimizasyonda, INIT_PARAMETERS_INCORRECT, bu fonksiyonlar için geçerli çağrı zincirleri oluşturmaya gerçekten yardımcı olur, ancak bunlardan 6 tanesine sahibim.117649 zincir seçeneği var.Ancak bu zincirler, bazı girdi parametreleri olmadan işe yaramaz. Ve onlarla birlikte, şimdiden 38.000.000'den fazla elde edildi! Yavaş numaralandırma atlanamaz.
 
Сергей Таболин :
Bunlar giriş parametresi kümeleri değildir! Bu, tekrarlanmaması gereken bir dizi özelliktir! Yavaş optimizasyonda, INIT_PARAMETERS_INCORRECT, bu fonksiyonlar için geçerli çağrı zincirleri oluşturmaya gerçekten yardımcı olur, ancak bunlardan 6 tanesine sahibim.117649 zincir seçeneği var.Ancak bu zincirler, bazı girdi parametreleri olmadan işe yaramaz. Ve onlarla birlikte, şimdiden 38.000.000'den fazla elde edildi! Yavaş numaralandırma atlanamaz.

Genetik ölecek çünkü optimizasyon kriterinin optimizasyon yüzeyi aşağı yukarı sürekli (pürüzsüz) olmalıdır. Sizin durumunuzda, çok sayıda patlama (arıza) elde edersiniz.


Böyle bir deney kurabilirsiniz. Standart bir danışman alın ve oraya birkaç ekstra ekleyin. optimizasyon için giriş parametreleri sahte. Setlerinin %90'ını YANLIŞ yaparak. GA bükülecek. Sahte parametreler olmasa da, iyi bir iş çıkarır.

 
fxsaber :

Anladım. Sadece optimize edicide uygun işlevleri ve sıralarını almak için bir soru. Ve tüm uygun olmayan zincirleri manuel olarak reçete edin .... Peki optimize edici bunları nasıl bulacak?

 
fxsaber :

Genetik ölecek çünkü optimizasyon kriterinin optimizasyon yüzeyi aşağı yukarı sürekli (pürüzsüz) olmalıdır. Sizin durumunuzda, çok sayıda patlama (arıza) elde edersiniz.

Anlıyorum. Bunu nasıl aşacağımı anlamıyorum?

 
Сергей Таболин :

Anlıyorum. Bunu nasıl aşacağımı anlamıyorum?

Tariflerden biri, geliştiricilerin YANLIŞ geçişlerin sonucunu önceden hesaplanmış en yakın DOĞRU geçiş olarak düşünmesidir. Bu, optimizasyon yüzeyindeki delikleri ortadan kaldırır.

Neden: