Campionato di ottimizzazione degli algoritmi. - pagina 3

 
Andrey Dik:

La libreria *.ex deve essere essenzialmente un modo unificato di accedere all'algoritmo. L'algoritmo può essere incorporato in questa libreria standard, o può chiamare il suo algoritmo da questa libreria con le sue proprie funzioni.

E quale funzione dare al partecipante? Il partecipante glielo darà o gli passerà qualcosa? Gioco di parole, non sono sicuro di quello che vuoi dire.

Al partecipante dovrebbe essere data la funzione (ff) che sta studiando. Quello per cui cercherà il massimo o il minimo. Il suo algoritmo di ricerca sarà, ovviamente, nella sua biblioteca.

Voglio dire, non dare la funzione stessa (inviare il codice), ma in qualche modo passarla al codice del concorrente durante il campionato.

 

e l'algoritmo FF non ha bisogno di essere dato.

Lo script richiede un array di parametri ottimizzabili dalla libreria tramite import

lo script invia questo array alla libreria FF, che restituisce il risultato

lo script invia il risultato alla libreria dei membri

lo script chiama la funzione di servizio della libreria dei membri, se necessario, l'algoritmo farà qualcosa, oppure è solo una funzione vuota al suo interno.

Sto scrivendo dal mio cellulare, scusate

 
Andrey Dik:

e l'algoritmo FF non ha bisogno di essere dato.

Lo script richiede un array di parametri ottimizzabili dalla libreria tramite import

lo script invia questo array alla libreria FF, che restituisce il risultato

lo script invia il risultato alla libreria dei membri

lo script chiama la funzione di servizio della libreria dei membri, se necessario, l'algoritmo farà qualcosa, oppure è solo una funzione vuota al suo interno.

Sto scrivendo dal mio cellulare, scusate

Non è chiaro. Aspettiamo un esempio nel codice.
 

Anche se è parzialmente chiaro, è specificamente chiaro che è attraverso la jo)).

Si scopre che quando una funzione membro viene chiamata, questa funzione deve fare un passo del suo lavoro. È necessario capovolgere tutto. Non ho voglia di pensarci. Quindi il compito è già complicato, e dobbiamo aggiungervi complicazioni ancora più artificiali.

Ci sono due modi possibili per farlo:

1. Una classe con ffs, come ho descritto sopra.

2. Un partecipante importa una libreria nella sua biblioteca con ff. Il controllore lo sostituirà con il suo.

Non ci sono altre opzioni. A meno che non si possa passare un puntatore alla funzione, se è possibile (ma finora nessuno ha suggerito dove guardare nell'aiuto). Il partecipante deve avere la piena capacità di chiamare una funzione ff.

 

in generale, come questo, e naturalmente ci sarà un contatore di tempo. schema:

#import "oa.ex5" // алгоритм оптимизации участника
void   ServiceFunc1 (); 
int    GetReplaysCount (); // запрос количества запусков ФФ (у участника может быть свой размер колонии или нечто подобное если это не ГА 
void   GetOptParam (double &param []); 
void   ServiceFunc2 (); 
bool   StopAlgo ();        // этой функцией участник по желанию может остановить оптимизацию
int    GetEpochCount ();   // если участник желает использовать своё фиксированное значение "эпох"
void   SendFFvolue (double &volue); 
double GetMaxFF (); 
#import

#import "ff.ex5" // тестовая фитнес функция чемпионата, не известна участникам 
double GetFFvolue (double &param []); // передаём в ФФ оптимизируемые параметры, получаем результат ФФ 
#import

void OnStart () 
{ 
  bool   stopAlgo = false; 
  int    epoch = GetEpochCount (); 
  int    maxEpochPossible = 1000; 
  double param []; 
  double volue; 
  int    epochCNT = 0; 
  int    ffCNT = 0; 
  
  double FFvolue = -DBL_MAX; 
  
  ServiceFunc1 (); 
  while(!stopAlgo) 
  {
    for(int i = 0; i < GetReplaysCount (); i++) 
    {
      GetOptParam (param); 
      volue = GetFFvolue (param); 
      ffCNT++; 
      SendFFvolue (volue);
    }
    ServiceFunc2 (); 
    
    epochCNT++; 
    
    if(epochCNT >= epoch) 
      stopAlgo = true; 
    
    if(epochCNT >= maxEpochPossible) 
      stopAlgo = true;
  }
  
  Print ("Epoch: " + (string)epochCNT + " ; FF starts: " + (string)ffCNT + " ; MaxFF: " + (string)GetMaxFF ());
} 
 
Dmitry Fedoseev:

Un partecipante deve avere la piena capacità di chiamare una funzione ff.

No, non dovrebbe. E non dovrebbe, perché se non lo facesse, si potrebbe usare l'ottimizzazione interna all'EA nel tester integrato, e se lo facesse, allora ci sarebbe ben poco uso pratico per i trader.

Il mio articolo mostra un esempio in cui il FF è chiamato dall'algoritmo. Questo restringe il campo di applicazione. Se prendete l'algoritmo dall'articolo (il che non è vietato dalle regole), dovrete applicare il vostro ingegno per liberarvi di una tale chiamata interna del FF.

 
Andrey Dik:

in generale, come questo, e naturalmente ci sarà un contatore di tempo. schema:

No, non va bene)) un tale approccio. Un partecipante dovrebbe essere in grado di ciclare, vale a dire che la sua singola azione implica diverse chiamate al ffs.
 
Andrey Dik:
No, non dovrebbe. E non dovrebbe, perché se non lo è, allora si può usare l'ottimizzazione interna all'EA nel tester incorporato, e se lo è, allora ci sarà molto poco uso pratico per i trader.
Guardate il metodo universale di cui sopra. E se una chiamata una tantum attraverso un intermediario, richiederà un adattamento molto serio della funzione di ricerca, che è esattamente quello che nessuno farà, perché si dovrà tirare fuori il cervello e metterlo a posto attraverso l'EA.
 
Dmitry Fedoseev:
No, non funziona)) un tale approccio. Un partecipante dovrebbe essere in grado di far girare i cicli, cioè la sua singola azione implica diverse chiamate a ffs.
Mi dispiace, i cicli saranno controllati dall'esterno. Tutto è lecito. :)
 
Andrey Dik:
Mi dispiace, i cicli saranno controllati dall'esterno. È tutto giusto e onesto. :)
No. La funzione ff dovrebbe contare le chiamate.