Diskussion zum Artikel "Optimierungsmethoden der ALGLIB-Bibliothek (Teil II)" - Seite 4

 
Maxim Dmitrievsky #:

Ich habe mir die Testbilder hier angesehen. Die Bilder stimmen überein.

Den Trick mit den mehrdimensionalen habe ich noch nicht verstanden, den muss ich noch herausfinden.

Dies ist der erste Artikel in der Serie. Der Gedanke steht nicht still, der Testsatz von Funktionen wurde in Richtung Komplikation und Gegenwirkung zu Scheinerfolgen von Methoden und Falschmeldungen, die mit Null initialisiert werden, verändert. Deshalb sollten Sie sich aktuelle Artikel ansehen, zum Beispiel diesen.

Es gibt immer aktuelle Quellen auf github.

Testen von Gradientenmethoden:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
  • JQSakaJoo
  • github.com
https://t.me/+vazsAAcney4zYmZi A list of implemented optimization algorithms (M - is a modified improved version, joo - is an algorithm of my development):
 
Andrey Dik #:

Dies ist der erste Artikel der Serie. Der Gedanke steht nicht still, der Testsatz von Funktionen wurde geändert, um ihn komplizierter zu machen und um falschen Erfolgen von Methoden, die mit Null initialisiert werden, und allgemein falschen Positiven entgegenzuwirken. Deshalb sollten Sie sich aktuelle Artikel ansehen, zum Beispiel diesen.

Die Quellen sind immer aktuell.

Aha. Wenn es Zeit und Lust gibt - werde ich für mehrdimensional machen.

Auf dreidimensionalen Bildern hat sich schon gezeigt, dass Gradienten auch auf ihnen in Lokalitäten stecken bleiben. Wenn man den Suchraum in Chargen unterteilt, ist er fixiert. Dies ist die Art und Weise mit Gradient Solver zu arbeiten und kein anderer Weg.

 
Multivariate Megacity LBFGS-Funktion hinzugefügt

Ergebnis für 1000 Messungen. Vergeudete Serverzeit - 9 Minuten.

Es scheint keine Fehler zu geben, die nach den Formen des Artikels gemacht wurden.


 
Andrey Dik #:

Dies ist der erste Artikel der Serie. Der Gedanke ist nicht stehen geblieben, der Testsatz von Funktionen wurde geändert, um ihn komplexer zu machen und falschen Erfolgen von Methoden und falsch positiven Ergebnissen, die mit Null initialisiert werden, entgegenzuwirken. Deshalb sollten Sie sich die jüngsten Artikel ansehen, zum Beispiel diesen.

Es gibt immer aktuelle Quellen auf github.

Testen von Gradientenmethoden:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

Es gibt dieses f-ya in der includnik, wird es verwendet?

Ist es das gleiche f-ya, wie man die richtigen Grenzen zu bestimmen? Ich verstehe, dass ein Teil von ihm genommen wird.

Wenn ich nicht die Grenzen reduziert haben, dann die Berechnung (Suche nach dem Maximum) ist komplizierter?

//------------------------------------------------------------------------------
class C_Megacity : public C_Function
{
  public: //===================================================================
  C_Megacity ()
  {
    fuName = "Megacity";

    // Funktionsgrenzen
    xMinRange = -10.0; xMaxRange = -2;
    yMinRange = -10.5; yMaxRange = 10;

    //maximale Koordinaten
    globalMaxFunValue = 1.0; //12.0
    xGlobalMax        = -3.1357545740179393;
    yGlobalMax        = 2.006136371058429;

    //minimale Koordinaten
    globalMinFunValue = 0.0; //-1
    xGlobalMin        = -9.5;
    yGlobalMin        = -7.5;
  }

  double Core (double x, double y)
  {
    double a = MathSin (MathSqrt (MathAbs (x - 1.13) + MathAbs (y - 2.0)));
    double b = MathCos (MathSqrt (MathAbs (MathSin (x))) + MathSqrt (MathAbs (MathSin (y - 2.0))));
    double f = a + b;

    double res = floor (MathPow (f, 4)) -
                 floor (2 * exp (-(pow (x + 9.5, 2) + pow (y + 7.5, 2)) / 0.4));

    return Scale (res, -1.0, 12.0, 0.0, 1.0);
  }
};
 
globalMaxFunValue = 1.0; //12.0

Für den 25-dimensionalen Fall gefunden. Ich weiß nicht, wo die Fehler liegen.


 
Maxim Dmitrievsky #:

Wenn ich die Grenzen nicht verkleinert habe, ist die Berechnung (das Finden des Maximums) schwieriger?

Nein, sie ist nicht komplizierter. Wie viele Wolkenkratzer liegen bei Ihrer Funktion über 50% der Min- und Max-Funktion? Wie viele bei mir? Auf welcher Fläche ist es einfacher, über 50% Höhe zu erreichen, wenn man die Punkte zufällig verteilt? - Ihre. Also, um es noch einmal zu betonen, die Grenzen sind falsch gesetzt.

Hier steht es dazu: https://www.mql5.com/de/articles/13923#tag3

Ich habe dieses Ergebnis aus Ihrem Code erhalten:

Ein nicht ganz so lustiges Ergebnis, aber du postest immer wieder die besten Ergebnisse aus verschiedenen Versuchen. Führen Sie 20 Versuche durch (20 Mal auf die Play-Taste drücken), oder schreiben Sie eine Schleife, die mehrere Versuche simuliert, und berechnen Sie dann das durchschnittliche Ergebnis, wie Sie es in den Artikeln tun.

Da stellt sich die Frage: Warum 100.000, warum nicht 1.000.000.000.000.000?


Sie brauchen nicht schüchtern zu sein, geben Sie eine Milliarde an, aber aus irgendeinem Grund zeigen Sie nicht die Anzahl der Aufrufe der Zielfunktion an, wie viele Aufrufe waren es? Bei Ranking-Tests sind nur 10.000 Aufrufe der Zielfunktion zulässig, und im Falle von Gradientenmethoden (bei denen der Algorithmus möglicherweise versucht, viel mehr Aufrufe an die FF vorzunehmen) gibt es im Code einen Grenzwert, bei dessen Überschreitung der Mindestwert des Ziels angegeben wird (die Methoden suchen nach einem Minimum, also wird der Wert umgekehrt):

// Erhöhung des Funktionsstartzählers und Kontrolle der Einschränkungen----------------
  numberLaunches++;
  if (numberLaunches >= maxNumbLaunchesAllowed)
  {
    fi.Set (0, DBL_MAX);
    CAlglib::MinNLCRequestTermination (state);
    return;
  }

All dies wurde bereits in den früheren Artikeln beschrieben.

Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
  • www.mql5.com
В этой статье будет рассмотрена группа алгоритмов оптимизации, известных как "Эволюционные стратегии" (Evolution Strategies или ES). Они являются одними из самых первых популяционных алгоритмов, использующих принципы эволюции для поиска оптимальных решений. Будут представлены изменения, внесенные в классические варианты ES, а также пересмотрена тестовая функция и методика стенда для алгоритмов.
 
Wie man die gleiche Oberfläche zu bekommen, wurde gefragt. Es ist nicht in der includnik. Wenn die Dimensionalität des Problems erhöht, die Anzahl der Iterationen erhöht, ist es natürlich. Der Vergleich sollte in Bezug auf die Ausführungszeit bis zur Konvergenz auf das gleiche Maximum gemacht werden, wenn die Aufgabe ist, eine silberne Kugel für alle Fälle des Lebens zu bekommen.
 
Maxim Dmitrievsky Silberkugel für alle Fälle zu bekommen.

Die Klasse hat Methoden GetMinRangeX (), GetMaxRangeX (), GetMinRangeY (), GetMaxRangeY (), mit deren Hilfe man die Grenzen abfragen kann (naja, und im Code der entsprechenden Testfunktionen kann man die Grenzen einfach sehen).

In der Praxis gibt es immer eine Grenze für die maximal zulässige Anzahl von Zugriffen auf das Ziel, in den Tests haben wir eine Grenze von 10 000 Zugriffen angenommen.

Wenn es keine Begrenzung gibt, weder in Bezug auf die Rechenressourcen noch auf die Zeit, ist es besser, überhaupt keine Optimierungsalgorithmen zu verwenden und eine einfache vollständige Aufzählung vorzunehmen, aber das ist im wirklichen Leben nie der Fall. Das Testen und der Vergleich von Methoden wird mit einer Höchstzahl von 10 000 Treffern zum Ziel durchgeführt. Der Sinn des Vergleichs von Algorithmen besteht darin, herauszufinden, welche Algorithmen das Ergebnis besser und mit weniger Zugriffen auf das Ziel erreichen. Je öfter ein Algorithmus auf das Ziel zugreifen muss, um vergleichbare Ergebnisse zu erzielen, desto schwächer wird der Algorithmus für die entsprechende Art von Aufgaben eingestuft.

Leider entgehen Ihnen dabei sehr subtile Punkte, die alle in den Artikeln über Optimierungsmethoden ausführlich beschrieben werden.

 
Gibt es ein bestimmtes Kriterium für die Bewertung der Qualität der Optimierung?), wenn der Algorithmus mehr Iterationen benötigt, ist er dann schlecht?

Vergleichen Sie die Geschwindigkeit des Findens eines Optimums mit einer vollständigen Suche - ein normaler Vergleich.
 
Maxim Dmitrievsky #:
Ein Vergleich der Geschwindigkeit, mit der das Optimum gefunden wird, mit einer vollständigen Brute-Force-Suche ist ein normaler Vergleich.

Es gibt Situationen, in denen die vollständige Suche das Optimum nicht finden wird, weil die Knoten des Suchgitters nicht darauf fallen.