Diskussion zum Artikel "Genetische Algorithmen - Leicht gemacht!" - Seite 16

 
Alexey_74:

Andrew, eine weitere Frage.

Können wir sagen, dass solche Werte dieser Variablen für die meisten Optimierungsprobleme geeignet sind?

Ja.

Die Einstellungen werden mit einer gewissen "Reserve" vorgenommen, um die Suchbarkeit (Abdeckung des Suchfeldes) zu erhöhen. Um genauere Werte zu erhalten (aber die Wahrscheinlichkeit, dass überhaupt ein globales Extremum gefunden wird, ist geringer), können Sie die Mutationsparameter und den Koeffizienten der Intervallgrenzenverschiebung verringern.

 
Alexey_74:

Andrew, eine weitere Frage.

Können wir sagen, dass solche Werte dieser Variablen für die meisten Optimierungsprobleme geeignet sind? Wie es in einigen Quellen heißt "... 90% der Probleme können mit einem konventionellen Perceptron gelöst werden".

ZAGASTE GA :)

Der Algorithmus ist single-threaded, kann leicht in einen Expert Advisor eingebaut werden, in einem Tester laufen und Wettbewerbe zwischen GAs organisieren, boo-gah-gah.

 

Wunderbar.

Andrei, wissen Sie, ich bin überrascht über meine Unverschämtheit, aber ich muss etwas "Kritik" äußern ))

Die Funktion ServiceFunction() wird im UGA-Code an drei Stellen aufgerufen. Aber das nützt nichts. Natürlich kann man die Dynamik auf dem Bildschirm sehen, aber sie ist so schnell, dass man sie ohnehin nicht sehen und auswerten kann. Sie können den Aufruf im Hauptteil von UGA() entfernen. Es reicht völlig aus, ihn einmal nach dem Aufruf von UGA() aufzurufen.

"... und der Geiger ist unnötig, er verbraucht nur zusätzlichen Treibstoff" (kin dza dza (c))

  ts=GetTickCount();
  UGA( ... );
  ts=GetTickCount()-ts;
  ServiceFunction();
 
Nochmals, es ist nicht entscheidend. Deshalb ist es eine Servicefunktion, man kann sie zum Debuggen, zur Visualisierung oder für etwas anderes verwenden, oder man kann sie überhaupt nicht verwenden, wer mag das schon. :)
 

Ich habe ein Experiment gemacht. Ich habe eine Summe aus drei Sinuskurven mit den "Frequenzen" 47, 81 und 187 gebildet. Ich erhielt dies

Dann begann ich die Suche durch direkte Aufzählung (3 Zyklen, 2 verschachtelt), allerdings mit Unterbrechung, wenn der Korrelationskoeffizient = 1,0 war. Ohne diese Bedingung hätte dieser ganze Unsinn viel länger gedauert. Aber auf diese Weise war es in 375 Sekunden (etwas mehr als 6 Minuten) erledigt.

Die GA hat es in 2 Sekunden geschafft. ))

Aber es gibt eine Frage. Hier ist das Ergebnis.

Die letzten 2 Ziffern: 2747 - Anzahl der FF-Aufrufe; 506 - Anzahl der "Zustände", wenn der Korrelationskoeffizient r gleich 1,0 war. Es stellt sich heraus, dass der Algorithmus sogar noch schneller hätte arbeiten können, da r nicht größer als 1,0 sein kann und nach dem ersten Erreichen von r=1 die Aufgabe als abgeschlossen gilt. Aber der Algorithmus erreichte den Zustand r=1,0 506 Mal.

Dies waren die Parameter

Parameter

Und diese FF.

void FitnessFunction(int chromos)
{
  int cnt = 1;

  while(cnt<=GeneCount)
  {
    F1=Colony[cnt][chromos]; cnt++;
    F2=Colony[cnt][chromos]; cnt++;
    F3=Colony[cnt][chromos]; cnt++;

    Fill(sum);
    r=Pirson(sin,sum,nobs);
    if(r>0.99999999) count++;
  }
  AmountStartsFF++;

  Colony[0][chromos]=r;
}

Frage - gibt es eine Möglichkeit, dem Algorithmus zu erklären, dass es (manchmal) möglich (notwendig) ist, früher abzubrechen. Oder sollten wir das nicht kategorisch tun und warten, bis die Konvergenz erreicht ist?

 

Nun, ich wollte schon lange die Antwort auf die Frage "wie viele" wissen. Diesmal habe ich ein Momentum genommen und 50 Sinuskurven darauf gelegt. Der Wertebereich ist 1-500. Wenn ich mich also nicht irre, ergibt die direkte Suche 500^50, d.h. 8,88178419700121252323333890533447266e+134 Iterationen (wenn mich mein Taschenrechner nicht belogen hat). Es ist klar, dass es nicht möglich ist, in Sekunden (Minuten, Stunden, Tage, Jahre) umzurechnen. Nur weit entfernte Nachfahren würden das Ergebnis sehen. Die GA hat es in 1 Stunde geschafft. 20 Minuten. Wahnsinn. Außerdem stellte sich heraus, dass der Korrelationskoeffizient der Summe von 50 Sinuskurven mit dem Impuls 0,5275 beträgt. Warum"zusätzlich"? Weil ich bisher noch keine Gelegenheit hatte, diesen Punkt zu überprüfen. Und in einigen Fällen legt das einige Gedanken nahe.....

Ich habe mich nicht auf Sinusoide fixiert, es ist nur so, dass ich sie alle zur Hand habe. Da das Ziel darin besteht, eine maximale Ähnlichkeit von kontinuierlichen Signalen zu erreichen, ist das Ergebnis genau diese Ähnlichkeit, mit anderen Worten, das Ergebnis ist eindeutig und außerdem leicht überprüfbar.

Andrey, vielen Dank für Ihren Artikel. Ich würde gerne in naher Zukunft einen weiteren Artikel von Ihnen lesen. GA mit Elitenauswahl. ))

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
Alexey_74:
...

Frage - gibt es eine Möglichkeit, dem Algorithmus zu erklären, dass es (manchmal) möglich ist, früher zu beenden. Oder sollte man das nicht kategorisch tun, sondern warten, bis Konvergenz erreicht ist?

Das ist möglich. Und es ist sogar notwendig. Wenn Sie etwas über die zu untersuchende Funktion wissen (wie in Ihrem Problem: FF<=1), sollten Sie diese Information aktiv nutzen, um unnötige Berechnungen zu vermeiden und damit die Suchzeit zu reduzieren.

In dieser Implementierung gibt es keine Hebel, um den Algorithmus von außen zu steuern, aber es reicht aus, eine Funktion hinzuzufügen, um das Flag für den erzwungenen Stopp zu kontrollieren.

In der nächsten Generation des Algorithmus, über die ein Folgeartikel in Vorbereitung ist, gibt es viel mehr Möglichkeiten, den Algorithmus von außen zu steuern (er arbeitet im Allgemeinen auf Anregung und unter Kontrolle von außen, und nicht wie jetzt - FF wird vom Algorithmus selbst gestartet, so dass es keine Möglichkeit gibt, ihn in selbstoptimierenden Eulen ohne Änderung zu verwenden).

 
Alexey_74:

....

Andrew, nochmals vielen Dank für Ihren Artikel. Ich würde gerne in naher Zukunft einen weiteren Ihrer Artikel anrechnen lassen. GA mit elitärer Auswahl. ))

Vielen Dank für den Dank. :)

Es wird mit Sicherheit eine Fortsetzung geben.

Und, viel Glück bei der Suche nach dem Optimum! Im Leben, in der Arbeit, in ... allem.

 
Ich habe Angst zu fragen.... )) Verstehe ich das richtig? Die nächste Generation des Algorithmus kann als DLL formalisiert werden?
 
ja