Algorithmus-Optimierung Meisterschaft. - Seite 3

 
Andrey Dik:

Die *.ex-Bibliothek muss im Wesentlichen eine einheitliche Art des Zugriffs auf den Algorithmus sein. Der Algorithmus kann in diese Standardbibliothek eingebettet werden, oder er kann seinen Algorithmus aus dieser Bibliothek mit seinen eigenen Funktionen aufrufen.

Und welche Funktion soll der Teilnehmer erhalten? Der Teilnehmer wird es ihm geben oder etwas weitergeben? Ein Wortspiel, ich bin nicht sicher, was Sie meinen.

Dem Teilnehmer sollte die Funktion (ff) genannt werden, die er untersucht. Derjenige, für den er das Maximum oder Minimum suchen wird. Sein Suchalgorithmus wird natürlich in seiner Bibliothek zu finden sein.

Ich meine, geben Sie nicht die Funktion selbst an (senden Sie den Code), sondern leiten Sie ihn irgendwie an den Code des Teilnehmers während der Meisterschaft weiter.

 

und der FF-Algorithmus muss nicht angegeben werden.

Das Skript fordert ein Array von optimierbaren Parametern von der Bibliothek über Import

sendet das Skript dieses Array an die FF-Bibliothek, die das Ergebnis zurückgibt

sendet das Skript das Ergebnis an die Mitgliederbibliothek

das Skript ruft die Servicefunktion der Mitgliedsbibliothek auf, falls erforderlich, der Algorithmus wird etwas tun, oder es ist einfach eine leere Funktion darin.

Ich schreibe von meinem Handy aus, sorry

 
Andrey Dik:

und der FF-Algorithmus muss nicht angegeben werden.

Das Skript fordert ein Array von optimierbaren Parametern von der Bibliothek über Import

sendet das Skript dieses Array an die FF-Bibliothek, die das Ergebnis zurückgibt

sendet das Skript das Ergebnis an die Mitgliederbibliothek

das Skript ruft die Servicefunktion der Mitgliedsbibliothek auf, falls erforderlich, der Algorithmus wird etwas tun, oder es ist einfach eine leere Funktion darin.

Ich schreibe von meinem Handy aus, sorry

Das ist nicht klar. Wir werden auf ein Beispiel im Code warten.
 

Obwohl es teilweise klar ist, ist es ausdrücklich klar, dass es durch das jo)) ist.

Es stellt sich heraus, dass beim Aufruf einer Mitgliedsfunktion diese Funktion einen Schritt ihrer Arbeit erledigen muss. Es ist notwendig, alles auf den Kopf zu stellen. Ich habe keine Lust, darüber nachzudenken. Die Aufgabe ist also bereits kompliziert, und wir müssen noch weitere künstliche Komplikationen hinzufügen.

Es gibt zwei Möglichkeiten, dies zu tun:

1. Eine Klasse mit ffs, wie ich oben beschrieben habe.

2. Ein Teilnehmer importiert eine Bibliothek in seine Bibliothek mit ff. Der Prüfer wird sie durch seine eigene ersetzen.

Es gibt keine anderen Möglichkeiten. Es sei denn, man kann einen Zeiger auf die Funktion übergeben, falls das möglich ist (aber bisher hat noch niemand vorgeschlagen, wo man in der Hilfe nachsehen kann). Der Teilnehmer muss die volle Fähigkeit haben, eine ff-Funktion aufzurufen.

 

im Allgemeinen so, und natürlich wird es einen Zeitzähler geben. skizzieren:

#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:

Ein Teilnehmer muss die volle Fähigkeit haben, eine ff-Funktion aufzurufen.

Nein, das sollte es nicht. Und es sollte nicht, denn wenn es nicht sollte, können Sie die interne Optimierung in der EA in der eingebauten Tester, und wenn es sollte, dann wird es sehr wenig praktischen Nutzen für die Händler.

Mein Artikel zeigt ein Beispiel, bei dem der FF vom Algorithmus aufgerufen wird. Dies schränkt den Anwendungsbereich ein. Wenn Sie den Algorithmus aus dem Artikel übernehmen (was nach den Regeln nicht verboten ist), müssen Sie Ihren Verstand einsetzen, um einen solchen internen Aufruf des FF loszuwerden.

 
Andrey Dik:

im Allgemeinen so, und natürlich wird es einen Zeitzähler geben. skizzieren:

Nein, nicht gut)) ein solcher Ansatz. Ein Teilnehmer sollte einen Zyklus durchlaufen können, d.h. seine einzige Aktion impliziert mehrere Aufrufe an die ffs.
 
Andrey Dik:
Nein, das sollte es nicht. Und es sollte nicht, denn wenn es nicht, dann können Sie die interne Optimierung in der EA in der eingebauten Tester verwenden, und wenn es sollte, dann wird es sehr wenig praktischen Nutzen für Händler sein.
Sehen Sie sich die oben beschriebene universelle Methode an. Und wenn ein einmaliger Aufruf durch einen Vermittler, wird es eine sehr ernsthafte Anpassung der Suchfunktion erfordern, das ist genau das, was niemand tun wird, weil wir das Gehirn herausziehen und es durch den EA setzen müssen.
 
Dmitry Fedoseev:
Nein, das funktioniert nicht)) ein solcher Ansatz. Ein Teilnehmer sollte in der Lage sein, Zyklen zu spinnen, d.h. seine einzige Aktion impliziert mehrere Aufrufe von ffs.
Tut mir leid, die Zyklen werden extern gesteuert. Alles ist erlaubt. :)
 
Andrey Dik:
Tut mir leid, die Zyklen werden extern gesteuert. Es ist alles fair und anständig. :)
Nein. Die Funktion ff sollte die Anrufe zählen.
Grund der Beschwerde: