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

 
fxsaber #:

Es gibt Situationen, in denen eine vollständige Brute-Force-Suche kein Optimum findet, weil die Knoten des Brute-Force-Gitters nicht auf dieses fallen.

Ich schätze, ich weiß es nicht
 

Maxim Dmitrievsky #:
1. Какой-нибудь конкретный критерий оценки кач-ва оптимизации есть?)

2. Wenn der Algorithmus mehr Iterationen benötigt, ist das schlecht?


3. Der Vergleich der Geschwindigkeit beim Auffinden des Optimums mit einer vollständigen Suche ist ein normaler Vergleich.

1. die Grenze von 10 000 Zugriffen ist nicht "von oben" festgelegt. Der MetaTrader 5-Optimierer verwendet diese Zahl als das Optimum vom praktischen Standpunkt aus gesehen. Diese Zahl wird als Referenzgrenze für die Praktikabilität verwendet. Sie können zwar mehr Aufrufe machen, aber warum Zeit und Ressourcen verschwenden, wenn Sie einen leistungsfähigeren Algorithmus verwenden und schneller zu den gleichen Ergebnissen kommen können. Diese Zahl ist ein Schwellenwert und wird beim Vergleich verschiedener Algos verwendet.

Siebeschreibt die Eigenschaften von Algorithmen, die berücksichtigt werden sollten:

Genauigkeit der Konvergenz

Reproduzierbarkeit der Ergebnisse (Robustheit)

Skalierbarkeit (Fähigkeit, bei zunehmender Dimensionalität des Problems weiterhin effizient zu arbeiten).

2. Wäre es bei einer zufälligen Punktgenerierung schlecht, wenn eine große Anzahl von Aufrufen des FF erforderlich wäre?

3. wenn sich die Anzahl der Zugriffe auf den FF bei einer vollständigen Suche in vernünftigen Grenzen hält, dann sollte er verwendet werden. Wozu brauchen wir AO, wenn z.B. nur 200 Zugriffe erforderlich sind?

Популяционные алгоритмы оптимизации
Популяционные алгоритмы оптимизации
  • www.mql5.com
Вводная статья об алгоритмах оптимизации (АО). Классификация. В статье предпринята попытка создать тестовый стенд (набор функций), который послужит в дальнейшем для сравнения АО между собой, и, даже, возможно, выявления самого универсального алгоритма из всех широко известных.
 
fxsaber #:

Es gibt auch Situationen, in denen eine vollständige Brute-Force-Suche kein Optimum findet, weil die Knoten des Brute-Force-Gitters nicht auf dieses fallen.

Das ist richtig. Und eine Verkleinerung des Gitters führt zu einem schrittweisen Anstieg der Aufrufe von FF. Hier beginnt der Bereich der praktischen Anwendbarkeit von AO unter Zeit- und Ressourcenbeschränkungen im wirklichen Leben.

 
Es ist nicht einmal sicher, dass die Alglib-Optimierer korrekt verwendet werden. Es ist nicht sicher, dass überhaupt jemand sie für diese Aufgaben verwendet.

Wenn Sie eine Aufgabe hatten, etwas zu optimieren, haben Sie es optimiert und ein normales Ergebnis erhalten. Die Funktion ist komplex, also wird sie normal optimiert.

Vielleicht sollte man sie auf andere Weise einsetzen, z. B. zunächst zur Dimensionalitätsreduktion.
 
Maxim Dmitrievsky #:
1. Es ist noch nicht sichergestellt, dass die Optimierer von alglib korrekt verwendet werden.

2. Sie hatten eine Aufgabe, etwas zu optimieren - Sie haben es optimiert und ein normales Ergebnis erhalten. Die Funktion ist komplex, also wird sie normal optimiert.

1. Sie können alles in Frage stellen, aber es ist immer viel konstruktiver, von der Position vollständiger Quellcodes und korrekter, reproduzierbarer Tests aus zu sprechen.

2) Man kann ein optimales Ergebnis auf einer zweidimensionalen Megacity erhalten, wenn man 9 Milliarden Menschen bittet, mit ihren Fingern wahllos in ein leeres Blatt Papier zu stechen, hinter dem die Oberfläche der Funktion verborgen ist (einer von ihnen wird mit Sicherheit sehr nahe am Globalen sein und sagen, dass er es ist, der das Problem erfolgreich gelöst hat). Aber wir müssen die optimale Lösung nicht in 9 Milliarden Versuchen durch zufälliges Stochern finden, sondern in 10 000 mit Hilfe einer Strategie.

Je höher das durchschnittliche Ergebnis einer Reihe unabhängiger Tests ist (Stabilität, Wiederholbarkeit der Ergebnisse), desto besser ist die getestete Methode im Vergleich zum Zufallsstochern für eine bestimmte Art von Problem (bei einigen Problemen unterscheiden sich einige Methoden nicht wesentlich vom Zufallsstochern, bei anderen sind sie sehr effektiv).

Das ist der Sinn des Testens und Vergleichens verschiedener Algorithmen, für die nicht nur eine Testfunktion, sondern drei verschiedene mit unterschiedlichen Eigenschaften als Benchmarks herangezogen werden, so dass man die Anwendbarkeit verschiedener Algorithmen auf verschiedene Aufgaben, ihre Grenzen und Fähigkeiten bei verschiedenen Aufgaben klar erkennen kann. So kann man sich der Lösung von Optimierungsproblemen auf sinnvolle Weise nähern.

In Zukunft werde ich lieber spezifische Fragen zum Inhalt des Artikels und zu den Codes beantworten.

 

Wir nehmen die Methoden der lokalen Optimierung, wenden sie auf das globale Problem an und vergleichen sie mit den Methoden der globalen Optimierung. Das ist es, worüber ich spreche.

Ich spreche darüber, wie wir diese Methoden für die globale Optimierung anpassen können. Die einfachste Möglichkeit besteht darin, die Anzahl der Initialisierungen zu erhöhen.

 

Wenn ich es richtig verstanden habe, werden Adam usw. auf Geschwindigkeit und nicht auf Qualität getrimmt.

Es wäre interessant zu sehen, wie die Bewertung ausfällt, wenn sie durch die Zeit und nicht durch die Anzahl der Wiederholungen begrenzt wird.

 
Rorschach #:

Wenn ich das richtig verstanden habe, geht es bei Adam usw. um Geschwindigkeit, nicht um Qualität.

Es wäre interessant zu sehen, wie die Bewertung ausfällt, wenn sie durch die Zeit und nicht durch die Anzahl der Wiederholungen begrenzt wird.

Die Algorithmen der ADAM-Familie (AdamW, RAdam, AdaBelief und andere) sowie SGD, SGRAD und andere (es gibt viele davon) wurden als moderner Ersatz für die klassischen Gradientenmethoden entwickelt und sind darauf ausgelegt, Probleme mit großen Dimensionen ohne Kenntnis der analytischen Formel zu lösen, oft zum Training neuronaler Netze (alle haben ihre Vor- und Nachteile). Es gibt auch interessante Lion-Methoden von Google (2023) und einige andere sehr aktuelle Methoden. Es ist sehr interessant, sich mit diesem Thema zu befassen, vor allem im Zusammenhang mit dem Training neuronaler Netze, bei dem es nützlich und informativ ist, eine Zieloberfläche für ein einfaches (oder vielleicht auch komplexes) Beispiel zu erstellen und Experimente durchzuführen (mit dem Parsing ihrer Innereien, mit einer eingehenden Untersuchung der Eigenschaften der Methoden, einer sorgfältigen Bewertung ihrer Fähigkeiten - alles, was wir wollen).

Es gibt keine zeitlichen Beschränkungen, an die man gebunden wäre. Ein Nutzer wird in einer Minute 1 Million Zugriffe auf das Ziel durchführen, ein anderer 1 Milliarde. Wie können wir Algos unter solchen Bedingungen vergleichen? Deshalb verwenden wir ein Limit für die Anzahl der Treffer und vergleichen die Effizienz innerhalb dieses Limits.

 
Andrey Dik #:

Bei zeitlichen Beschränkungen gibt es nichts, woran man sich binden könnte. Ein Nutzer wird in einer Minute 1 Million Zugriffe auf das Ziel durchführen, ein anderer 1 Milliarde. Wie können wir unter solchen Bedingungen Algos miteinander vergleichen? Deshalb verwenden wir eine Obergrenze für die Anzahl der Treffer und vergleichen die Effizienz innerhalb dieser Grenze.

Bindung an den PC des Autors. Nehmen Sie die Zeit von 10000 Iterationen von ANS als Basis.

Meine Ergebnisse mit dem Code von fxsaber:


pso 72 Sekunden, 40,8 KB, BestesErgebnis = -14.0: TPdist = 0.41, SLdist = 0,68

bga 22 sec, 38,5 KB, BestResult = -14.0: TPdist = 0.32, SLdist = 1,04
4 pOeS 23 sec, 19,9 KB, BestResult = -14.0: TPdist = 0.54, SLdist = 1,12
6 sdsm 23 sec, 21.1 KB, BestResult = -14.0: TPdist = 0.42, SLdist = 1,28

sds 22 sec, 14,5 KB, BestResult = -14.0: TPdist = 0.89, SLdist = 1.34
8 esg 22 sec, 23,3 KB, BestResult = -14.0: TPdist = 0.82, SLdist = 0,36
9 sia 23 sec, 19,2 KB, BestResult = -14.0: TPdist = 0.82, SLdist = 1.02
13 de 22 sec, 13,3 KB, BestesErgebnis = -14.0: TPdist = 0.6 , SLdist = 0,74
16 hs -
16,5 KB


17 ssg 22 sec, 22,7 KB, BestResult = -14.0: TPdist = 0.57, SLdist = 0,4
20 poes 23 sec, 18,8 KB, BestesErgebnis = -14.0: TPdist = 0.42, SLdist = 2,0
26 acom 22 sec, 21,3 KB, BestResult = -14.0: TPdist = 0.46, SLdist = 0,98
27 bfoga 30 sec, 22,9 KB, BestesErgebnis = -14.0: TPdist = 0.1 , SLdist = 0,2
32 mec 22 sec, 23,7 KB, BestResult = -14.0: TPdist = 0.91, SLdist = 0,58
33 iwo 23 sec, 25,4 KB, BestResult = -14.0: ???
34 mehr 23 sec, 21.0 KB, BestesErgebnis = -14.0: TPdist = 0.54, SLdist = 1.44
35 coam 22 sec, 16,9 KB, BestResult = -14.0: TPdist = 0.32, SLdist = 1.96
36 sdom 22 sec, 13,9 KB, BestResult = -14.0: TPdist = 0.72, SLdist = 2,0
37 nmm 22 sec, 32,9 KB, BestesErgebnis = -14.0: TPdist = 1.0 , SLdist = 1,58
38 fam 22 sec, 17,3 KB, BestResult = -14.0: TPdist = 0.83, SLdist = 0.48
39 gsa 22 sec, 23,1 KB, BestResult = -14.0: TPdist = 0.83, SLdist = 1.44
40 bfo 22 sec, 19,5 KB, BestResult = -14.0: TPdist = 0.62, SLdist = 1,6
41 abc - (err) 32,0 KB


42 ba 23 sec, 20,0 KB, BestesErgebnis = -14.0: TPdist = 0.49, SLdist = 1.18
44 sa 23 sec, 12,5 KB, BestesErgebnis = -14,0: TPdist = 0.8 , SLdist = 1.6
45 iwdm 23 sec, 27,3 KB, BestResult = -14.0: TPdist = 0.32, SLdist = 0,72

pso 23 sec, 12,8 KB, BestResult = -14.0: TPdist = 0.74, SLdist = 1.42

ma 22 sec, 18,0 KB, BestResult = -14.0: TPdist = 0.88, SLdist = 0,62

sfl -
29,8 KB



fss 22 sec, 24,5 KB, BestesErgebnis = -14.0: TPdist = 0.78, SLdist = 1.96

rnd -
16,6 KB



gwo 22 sec, 17.0 KB, BestesErgebnis = -14.0: TPdist = 0.72, SLdist = 1.56

css 22 sec, 17.2 KB, BestResult = -14.0: TPdist = 0.74, SLdist = 1.3

em -
17,7 KB



sc 23 sec, 18,8 KB, BestesErgebnis = -14.0: TPdist = 0.51, SLdist = 1.3


PS-Codegröße als zusätzliche Metrik (wie komplex ist die Implementierung des Algorithmus)