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

 
ivandurak:
Welche Kriterien und wie viele Nachkommen sollen getötet werden. Wie viele Eltern und Nachkommen sollten abhängig von der Anzahl der optimierten Parameter sein, ab welcher Epoche Inzest erlaubt sein kann. Generell ist es nicht ganz klar, nach welchem Prinzip man Eltern töten soll .Nur leider ist Ihre Arbeit für meine Zwecke nicht ganz geeignet, aber so danke ich Ihnen sehr mit einem Pinsel.

Man muss niemanden umbringen. Es kann sogar mit einem Chromosom funktionieren (Kreuzung mit sich selbst). Und so reichen im Durchschnitt 50 Chromosomen für alle Zwecke aus.

Du verstehst einfach den Algorithmus nicht.

Der Algorithmus ist universell, für jeden Zweck geeignet, deshalb heißt er ja UGA. Es gibt nur einige Aufgaben, die auf andere Weise schneller gelöst werden können.

 
ivandurak:

1. Geben Sie mir einen Hinweis plz....

2. nach welchem Kriterium und wie viele Nachkommen zu töten sind.

3. Wie viele Eltern und Nachkommen sollten abhängig von der Anzahl der zu optimierenden Parameter sein.

4. Ab welcher Epoche kann Inzest erlaubt werden .

5. Generell ist nicht ganz klar, nach welchem Prinzip man Eltern töten soll .

6. Nur leider ist Ihre Arbeit nicht ganz für meine Zwecke geeignet, aber so vielen Dank mit einem Pinsel.

1. Ich bin nicht ganz klar über den Zweck Ihres Beitrags. Wenn Sie Ratschläge für die Umsetzung Ihres Algorithmus benötigen, brauchen Sie Details, ein allgemeines Konzept sozusagen, damit es etwas zu diskutieren gibt.

Wenn sich die Fragen auf den im Artikel beschriebenen Algorithmus beziehen, siehe 2, 3, 4, 5, 5. 2, 3, 4, 5, 6.

2. Nachkommen werden nicht getötet. Duplikate von Eltern und deren Nachkommen werden vernichtet.

3. 50 Individuen in der Masse der Bevölkerung ist die am häufigsten verwendete Bedeutung.

4. Kreuzung "mit sich selbst" ist nicht erlaubt. Aber wenn es sehr notwendig ist (die Population ist "am Aussterben") - ist es möglich. :) werden mehrere Versuche unternommen, einen geeigneten "Partner" zu finden.

5. Die Eltern werden nicht zufällig oder unter bestimmten Bedingungen "getötet", sondern durch Nachkommen ersetzt (genau die Hälfte der Population wird durch Nachkommen ersetzt - natürlich nur, wenn die Population voll ist).

6. Wenn das Problem sehr "spezifisch" ist - vielleicht (wenn es überhaupt möglich ist) zuerst versuchen, eine analytische Lösung zu finden.

 

Vielen Dank für Ihre prompte Antwort. Ich brauche Genetik für verschiedene Experimente. Ihre biblioteka, wie es mir scheint, ist nicht sehr bequem im Gebrauch, so dass ich meine eigenen zu schreiben. Leider im Netz schlecht beschrieben den gesamten Algorithmus vor allem nur GA Determinanten, wenn Sie einen Link zu der Beschreibung (in russischer Sprache) werde ich sehr dankbar sein. Im Folgenden werde ich beschreiben, wie ich sehe es alle, wenn nicht schwer zu korrigieren .

1 Erstellen Sie nach dem Zufallsprinzip elterliche Individuen, nicht weniger als 50.

2 Generierung von ihnen durch Kreuzung und Mutationen Kolonie von Nachkommen Zahl nicht weniger als ..... nirgends eine Beschreibung gefunden.

3 Auf der Suche nach Duplikaten, die elterliche ein entfernt wird.

5 Falls erforderlich, vervollständigt Kolonien von Nachkommen und Eltern. Eltern werden zufällig Nachkommen natürlich erstellt.

4 Führen Sie alle durch den FF. Der FF wird außerhalb des GA platziert.

5 Wir ordnen sie alle. Der Beste erhält den Status eines Rambo. Je höher der Rang, desto wahrscheinlicher ist es, dass er ein Vater wird.

6 Teilt die gesamte Gruppe in starke und schwache Individuen auf, die starken werden im nächsten Schritt Eltern.

7 Schneide einen Teil der Kolonie aus den Nachkommen aus (die Untauglichsten). Mit einer geringen Wahrscheinlichkeit schneiden wir einen Teil der Kolonie von den Eltern aus, wie bei einem Unfalltod.

8 Dies ist das Ende der Ära.

9 Wenn während .... (angeben) ein und dasselbe Individuum die Flagge Rambo hält - die Berechnungen Ende GA konvergiert, sonst gehen Sie zu Punkt 3.

 
ivandurak:
....
Entschuldigung, aber ich habe den Eindruck, dass Sie den Artikel noch einmal lesen sollten.
 
Ich habe mein GA mit viel Mühe geschrieben. Aber es bleibt in lokalen Extremen stecken. Haben Sie irgendwelche allgemeinen Empfehlungen, wie man das vermeiden kann?
 
ivandurak:
Ich habe mein GA mit viel Mühe geschrieben. Aber er bleibt in lokalen Extremen stecken. Können Sie mir einige allgemeine Empfehlungen geben, wie man das vermeiden kann?

Es ist keine Ansteckung, sondern eine besondere, "genetische" Magie. :)

Welche Funktion verwenden Sie als FF?

Ich empfehle, Ihren Optimierungsalgorithmus mit speziell für diesen Zweck entwickelten Funktionen zu testen, zu kalibrieren und zu debuggen.

Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
  • www.mql5.com
Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
 
Bitte verzeihen Sie meine Aufdringlichkeit, aber es geht um eine prinzipielle Frage. Ich habe ein Beispiel aus Ihrem Artikel genommen und ein Skript geschrieben, um es zu überprüfen. Die Antwort stimmt nicht mit dem Beispiel überein, entweder sind die Skier nicht unterwegs oder das Problem liegt in der Polsterung zwischen Stuhl und Tastatur. Wenn es nicht schwierig ist, wie ein Kätzchen zu stochern, kann ich am zweiten Tag den Fehler nicht finden. Mit freundlichen Grüßen
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("Lösung 1 ist wahrscheinlich richtig = ",y) ;
//-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("Lösung 2 ist meine = ",y) ;
  }
 
ivandurak:
Bitte verzeihen Sie meine Aufdringlichkeit, aber es geht um eine prinzipielle Frage. Ich habe ein Beispiel aus Ihrem Artikel genommen und ein Skript geschrieben, um es zu überprüfen. Die Antwort stimmt nicht mit dem Beispiel überein, entweder sind die Skier nicht unterwegs oder das Problem liegt in der Polsterung zwischen Stuhl und Tastatur. Wenn es nicht schwierig ist, wie ein Kätzchen zu stochern, kann ich am zweiten Tag den Fehler nicht finden. Viele Grüße
Genau, die Dichtung muss gewechselt werden. Entschuldigung.
 
ivandurak:
Bitte verzeihen Sie meine Aufdringlichkeit, aber es geht um eine prinzipielle Frage. Ich habe ein Beispiel aus Ihrem Artikel genommen und ein Skript geschrieben, um es zu überprüfen. Die Antwort stimmt nicht mit dem Beispiel überein, entweder sind die Skier nicht unterwegs oder das Problem liegt in der Polsterung zwischen Stuhl und Tastatur. Wenn es nicht schwierig ist, wie ein Kätzchen zu stochern, kann ich am zweiten Tag den Fehler nicht finden. Mit freundlichen Grüßen

Wenn es kein Vertrauen in die FF selbst, in dem Sinne, dass Sie nicht sicher sind, dass Ihre Extrema sind so, können Sie die Funktion in einem Tester laufen, Tester GA in diesem Sinne ist recht gut, und findet eine ziemlich genaue Lösung, aber nur mit einer kleinen Anzahl von Parametern (1,2).

Im Allgemeinen sollte man sich darüber im Klaren sein, dass der GA keine exakte, sondern eine robuste Lösung findet. Das heißt, eine Lösung, die im Vergleich zum Feld der möglichen Lösungen recht gut ist.

 
ivandurak:
Bitte verzeihen Sie meine Aufdringlichkeit, aber es geht um eine prinzipielle Frage. Ich habe ein Beispiel aus Ihrem Artikel genommen und ein Skript geschrieben, um es zu überprüfen. Die Antwort stimmt nicht mit dem Beispiel überein, entweder sind die Skier nicht unterwegs oder das Problem liegt in der Polsterung zwischen Stuhl und Tastatur. Wenn es nicht schwierig ist, wie ein Kätzchen zu stochern, kann ich am zweiten Tag den Fehler nicht finden. Grüß Gott.
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("Lösung 1 ist richtig = ",y) ;
   //-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("Entscheidung 2. Falsch = ",y) ;
  }
Ich habe eine Übereinstimmung aus irgendeinem Grund. Wahrscheinlich, weil ich die Funktion wie in dem Artikel verwendet.