Campionato di ottimizzazione degli algoritmi.

 

Il Campionato di Ottimizzazione degli Algoritmi è concepito come una competizione per persone che sono cercatrici, curiose, per le quali stare fermi significa andare indietro.

Il campionato è una grande opportunità per testare i vostri algoritmi in condizioni competitive difficili, che sono più dure e impegnative di quelle che si incontrano nella vita quotidiana. È un'occasione per assicurarsi che il vostro algoritmo non può più essere migliore, il che significa fiducia nel risolvere le sfide della vita davanti a voi, o per assicurarsi che il vostro algoritmo ha bisogno o può essere ulteriormente raffinato e migliorato.

Regole:

1. Algoritmi di ottimizzazione basati su qualsiasi principio e teoria di ricerca sono ammessi al campionato, assolutamente qualsiasi.

2. Ogni partecipante poteva rappresentare un solo algoritmo in codice sorgente o in forma compilata di libreria *.ex5.

3. Alla fine del campionato i partecipanti saranno classificati secondo i seguenti criteri: velocità dell'algoritmo, numero di esecuzioni della funzione di fitness, precisione della ricerca della soluzione.

Condizioni:

1. L'organizzatore si riserva il diritto di rifiutare la partecipazione di chiunque senza spiegarne i motivi.

2. l'organizzatore ha il diritto di partecipare al campionato.

3. L'organizzatore rifiuterà i premi a favore dei partecipanti in caso di disponibilità del montepremi da parte di potenziali sponsor al momento dell'annuncio dei premi.

Organizzatore del campionato di algoritmi di ottimizzazione: Joo.

Sii coraggioso, partecipa e vinci. Potrebbe accadere che il vostro algoritmo venga utilizzato in futuro nell'ottimizzatore interno di MT, perché no?

 

La registrazione è ora aperta.

Tutti coloro che desiderano partecipare, sono pregati di iscriversi qui. Il 20 giugno 2016, saranno presentati i codici di script eseguibili di esempio con interfacce per il collegamento degli algoritmi. Tra altre 3 settimane, l'11 luglio 2016, inizierà il campionato vero e proprio.

 
In generale. Si prega di discutere solo sull'argomento "Algoritmi di ottimizzazione". Un passo a destra, un passo a sinistra - plotone d'esecuzione :)
 
Andrey Dik:

La registrazione è ora aperta.

Tutti coloro che desiderano partecipare, sono pregati di iscriversi qui. Il 20 giugno 2016, saranno presentati i codici di script eseguibili di esempio con interfacce per il collegamento degli algoritmi. E tra 3 settimane inizierà il campionato vero e proprio.

E in generale ci sono idee, o tutti in procinto di pensarci. Semmai, posso condividere i miei pensieri.
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Andrey Dik, 2016.06.10 17:24

Andrey Dik
Tag Konow
Igor Volodin
Dmitry Fedoseev
Sergey Chalyshev
Ghenadie Tumco
Igor Volodin

 
Dovremmo rimandare per un po'? Scrivere un articolo. Mettere un modello di classe nel codebase. Penso di avere un ottimo modello:)
 
Sono sufficienti sette persone per un campionato? (Dal punto di vista di MQ)
 
Dmitry Fedoseev:
E in generale, ci sono idee, o tutto è in fase di riflessione. Semmai, posso condividere i miei pensieri.

Naturalmente ci sono delle idee.

Un articolo è molto buono. In quale direzione vuoi scrivere l'articolo?

È possibile posticipare il campionato, se c'è una reale necessità. Ma c'è ancora molto tempo prima che inizi, il campionato inizia l'11 luglio 2016.

 
Andrey Dik:

Certo che sì.

Sputa il rospo. Condanneremo.

L'articolo è molto buono. Ma non si può più aspettare. La gente ha una memoria corta di regola e dimentica rapidamente dove tutto inizia....

class CFF{
   public:
   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}
   virtual double value(){return(0);}
   virtual string note(){return("");}
};

class CFF1:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      for(int i=0;i<c;i++){
         s+=MathPow(x[i],2);
      }
      return(s);   
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

class CFF2:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      double p=0;
      for(int i=0;i<c;i++){
         s+=MathAbs(x[i]);
         p*=MathAbs(x[i]);
      }
      return(s+p); 
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

Ecco una costruzione per selezionare una funzione da studiare (ff). Una classe base con metodi virtuali e classi figlie con funzioni diverse.

Lo dichiaro così:

CFF * ff=new CFF1();

Oppure così, a seconda di quale funzione è necessaria:

CFF * ff=new CFF2();

Nella funzione di ottimizzazione, abbiamo un parametro di tipo CFF per passare un puntatore alla classe con le ff selezionate.

***

Metodi della classe base:

   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}   

fun - funzione stessa, i parametri sono passati in un array di tipo double.

tipo - tipo di funzione: min o max - cosa cercare nella funzione minimum o maximum.

Il resto non è necessario, li stavo facendo per me? Per memoria: valore - valore all'estremo, nota - qualche descrizione. Non sono necessari per il campionato, soprattutto il valore.

***

Ora non ho una funzione, ma una classe e in essa un metodo per impostare i ff:

   
      void SetFF(CFF * aff){
         this.ff=aff;
      }  
Poi uso questo.ff.fun(...) ovunque;
 

Per il campionato, la classe dovrà essere collocata in una biblioteca. Fate una funzione nella libreria, che sarà chiamata dall'esterno, questa funzione farà tutto: creare un'istanza della classe, impostare tutti i parametri passati alla funzione, ecc.

Il nome della funzione è standard per tutti. Ognuno ha i propri nomi di file della libreria.

Il controllore ha uno script. Il checker cambia il nome della libreria importata, la compila e la esegue.

Questo è tutto:

CFF * ff=new CFF1();

Nello script del controllore.

 
Dmitry Fedoseev:

La classe dovrà essere collocata in una biblioteca per il campionato. Fate una funzione nella libreria, che sarà chiamata dall'esterno, questa funzione farà tutto: creare un'istanza della classe, impostare tutti i parametri passati alla funzione, ecc.

Il nome della funzione è standard per tutti. Ognuno ha i propri nomi di file della libreria.

Il controllore ha uno script. Checker cambia il nome della libreria importata, compila, esegue.

Pensi che possiamo fare a meno di OOP nel risolvere il compito che ci è stato assegnato? Sono abituato a risolvere tutto con il mio metodo. (Beh, non mi piace l'OOP). :)