Campionato di ottimizzazione degli algoritmi. - pagina 130

 
Andrey Dik:

Puoi andare dove vuoi. Ma questo campionato si svolgerà come ho detto prima. Secondo queste regole, potete competere con me, con altri concorrenti e senza di me.

Altri campionati possono essere diversi, organizzate il vostro e fate come vi pare. È un paese libero.

Voilà!

Tutto il meglio, caro teorico!

 
Реter Konow:

Voilà!

Addio, teorico rispettato!

Non prendermi per il culo. Preparati e competi secondo le regole, invece di cercare di cambiare le regole per soddisfare te... E non limitatevi a blaterare, meglio iniziare a leggere la letteratura pertinente sull'ottimizzazione.

Tutto il meglio, caro teorico!

 

Saluti.

Ho trasferito il mio codice dal four-editor al five-editor. Solo un errore! Sostituito TRUE con uno e tutto ha funzionato! Piacevolmente sorpreso.

Questo è il mio primo codice su F. Potresti dirmi cosa devo mettere nel mio codice per connettermi al campionato?

//+------------------------------------------------------------------+
//|                                                 Yuri skript.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//----------Блок глобальных переменных кода-----
Глобальные переменные кода не должны совпадать с 
именами глобальных переменных интерфейса?
//----------------------------------------------

//---------- Блок ввода начальных значений------
input double xmin=0;//min диапазона поиска
input double xmax=100;//max диапазона поиска
input double Xnz=10;// начальные значения X[]
input int N=3;     // число параметров
input double e=0.01; // погрешность поиска
Будет ли известен диапазон поиска, число параметров ?
//----------------------------------------------
void OnStart()
  {
OC();
}
//--------------ОСНОВНАЯ ФУНКЦИЯ---------------
void OC()
{
//---------
// ЗДЕСЬ РАСПОЛОЖЕН АЛГОРИТМ ПОИСКА.ИМЕЕТСЯ НЕСКОЛЬКО ПОДФУНКЦИЙ.
// ФУНКЦИЯ ФОРМИРУЕТ МАССИВ ЗНАЧЕНИЙ X[x1,x2...xn]. 
// ФУНКЦИЯ РАСЧЕТА F() ВЫСЧИТЫВАЕТ И ВОЗВРАЩАЕТ ЗНАЧЕНИЕ ЗАДАННОЙ ФУНКЦИИ И ДАЛЕЕ ПО АЛГОРИТМУ
F();
//----------
}
//------ФУНКЦИЯ РАСЧЕТА ЗАДАННОЙ ФУНКЦИИ НАПРИМЕР F=(exp(X[1]+X[2]+X[3]))/(X[1]*X[2]*X[2]*X[3]*X[3]*X[3]);
double F()
{
if(X[1]==0||X[2]==0||X[3]==0){zn=0;return(F);}
F=(exp(X[1]+X[2]+X[3]))/(X[1]*X[2]*X[2]*X[3]*X[3]*X[3]);
return (F);
}
 
Yuri Evseenkov:

Saluti.

Ho trasferito il mio codice dal four-editor al five-editor. Solo un errore! Sostituito TRUE con uno e tutto ha funzionato! Piacevolmente sorpreso.

Questo è il mio primo codice su F. Potresti dirmi cosa devo inserire nel mio codice per connettermi al campionato?

Ciao.

No, non va bene.

Devi fare così

Script -> BiblAO.ex5 -> ff.ex5

All'inizio del ramo c'erano esempi di codici, per favore date un'occhiata. Non c'è tempo ora, mostrerò i link agli esempi un po' più tardi.

 

Script di campionato eseguibile:

#property script_show_inputs
#property strict

//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "ao.ex5"
// инициализация АО
void   InitAO (int paramCount, int maxFFruns);
// запуск АО 
void   StartAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "ff.ex5"
// запросить количество параметров ФФ 
int    GetParamCount (); 
// запуск ФФ, получеие значения соответствующее параметроам ФФ
double FF (double &array []); 
// произведённое количество запусков ФФ
int    GetCountRunsFF (); 
#import
//+------------------------------------------------------------------+

//--- input parameters
input int MaxFFruns_P = 1000; 


//+------------------------------------------------------------------+
void OnStart () 
{ 
  // узнаем, сколько параметров нужно оптимизировать
  int    paramCount = GetParamCount (); 

  ulong  startTime = GetMicrosecondCount (); 
  
  //------------------------------------------------------------------
  InitAO (paramCount, MaxFFruns_P);
  StartAlgo ();
  //------------------------------------------------------------------
  
  startTime = GetMicrosecondCount () - startTime; 
  
  Print ("Макс: " + DoubleToString (GetMaxFF (), 16)); 
  Print ("Запусков ФФ: " + (string)GetCountRunsFF ()); 
  Print ("Время: " + (string)startTime + " мкс; " + DoubleToString ((double)startTime / 1000000.0, 8) + " c"); 
  Print ("---------------------------------");
}
//+------------------------------------------------------------------+
 

Ora preparerò una libreria FF di esempio (per dimostrare l'interfaccia) e un esempio di algoritmo di ottimizzazione di un partecipante (funzionante, può essere applicato ovunque).

Nota: lo script di cui sopra è già autosufficiente per capire cosa è richiesto ai partecipanti, collegare la vostra algo da interfacce e funzioni deprecate ed essere pronti a partecipare. La sceneggiatura è stata data molte pagine fa....

 

Esempio di un campionato FF (tutto sarà lo stesso, tranne il contenuto della funzione FF e rispettivamente la variabileG_paramCount- non saranno noti ai concorrenti, l'arbitro compilerà):

#property library
#property strict

int G_countRuns  = 0; 
int G_paramCount = 3; 

//+------------------------------------------------------------------+
int GetParamCount () export
{ 
  return (G_paramCount);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetParamProperties (double &min, double &max, double &step) export
{ 
  min  = 0.1; 
  max  = 10.0; 
  step = 0.1;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{ 
  return (G_countRuns);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF (double &param []) export
{ 
  G_countRuns++; 
  
  int sizeArray = ArraySize (param); 
  if(sizeArray != G_paramCount) 
    return (-DBL_MAX); 
  
  double x1 = param [0];
  double x2 = param [1];
  double x3 = param [2];

  double ffVolue = (-exp(x1+x2+x3))/(x1*x2*x2*x3*x3*x3);
  
  return (ffVolue);
}
//+------------------------------------------------------------------+
 
Andrey Dik:

Esempio di campionato FF (tutto sarà lo stesso, tranne il contenuto della funzione FF e di conseguenza la variabileG_paramCount- non saranno noti ai concorrenti, l'arbitro compilerà):

Incredibile.

Quando ho chiesto questo esempio, avete fatto di tutto per non fornirlo.

Ora sono andato, e per favore - esempio FF.

Che cosa significa questo?

 
Реter Konow:

Incredibile.

Quando ho chiesto questo esempio, avete fatto di tutto per non fornirlo.

Ora me ne sono andato, ed ecco un esempio di FF.

Cosa vuoi dire con questo?

È solo un esempio, lo stesso del problema del testo, te l'ho detto molte volte. Guardate attentamente - l'interfaccia di connessione è esattamente la stessa, come due gocce di luna.

Ma stai chiedendo il codice del campionato FF, ovviamente non lo otterrai, nessuno lo farà, e non è nell'esempio ora, e non lo saprò. L'unica cosa conosciuta è l'interfaccia di connessione FF tramite la funzione import, e questo è ciò che viene mostrato nell'esempio. È chiaro? Beh, quanto possiamo spiegare ancora... Non lo so.

Questi codici sono già stati mostrati nel ramo, sto solo mettendo tutto insieme per comodità.

Quindi capire, e preferibilmente per non doverlo spiegare di nuovo, e alla stessa persona....

Se finalmente hai capito tutto, vai avanti, scrivi l'algoritmo e vai in battaglia. Avresti dovuto farlo molto tempo fa, tutti hanno quasi finito di scrivere i loro algoritmi (senza contare quelli che li hanno già pronti).

 
Andrey Dik:

Questo è solo un esempio, lo stesso del problema del testo, ve l'ho detto molte volte. Guardate attentamente - l'interfaccia di connessione è esattamente la stessa, come due gocce di luna.

Ma tu stai chiedendo il codice FF, ovviamente non lo otterrai, nessuno lo farà, e non è nell'esempio ora, e non lo saprò. L'unica cosa conosciuta è l'interfaccia di connessione FF tramite la funzione import, e questo è ciò che viene mostrato nell'esempio. È chiaro? Bene, quanto possiamo spiegare ancora... Non lo so.

Questi codici sono già stati mostrati nel ramo, sto solo mettendo tutto insieme per comodità.

Quindi capite, e preferibilmente per non doverlo spiegare di nuovo, e alla stessa persona....

Avevo solo bisogno di un esempio del genere.

Quello nel problema con il testo è diverso da questo.

C'era una stringa, e qui - una funzione analitica.

Ecco perché ho chiesto un esempio.