Gestern begann ich, die genetischen Algorithmen zu erforschen, und als ich mit einer grundlegenden Theorie endete, versuchte ich, einfache GA über Python zu schreiben, die die Diophantische Gleichung löst. Ich bin neu bei Python und GAs, also bitte, beurteile meinen Code nicht streng.
Ich kann aufgrund der vorzeitigen Konvergenz keine Ergebnisse erhalten (es gibt einen Punkt ohne Rückkehr, Population [n] == Population [n + i], wobei i eine ganze Zahl ist. Sogar das zufällige Mutationselement kann das nicht ändern, die Generation baut sich sehr schnell ab)
GA verwendet Crossover, um zu züchten und eine gewichtete Auswahl an Eltern.
Code:
%Vor%Ich versuchte , die Rasse und die gewichtete Zufallsauswahllogik zu ändern, aber ohne Ergebnisse. Diese GA soll Arbeit sein, ich weiß nicht, was los ist. Ich weiß, dass es auf Python einige GA-Bibliotheken gibt, ich versuche sie im Moment zu verstehen - es scheint, dass sie für mich ziemlich komplex sind. Sorry für Fehler, Englisch ist nicht meine Muttersprache. Danke für Ihr Verständnis.
NECROUPDATE: Speichere Chromosomen in Gray Code, nicht in Integer.
Geringfügiger logischer Fehler: parentTwo ist etwas wahrscheinlicher der Vater als die Mutter. Gerade Chancen wären randint (1.100) & lt; = 50, nicht randint (1.100) & lt; 50. Wird nicht sein, was das Problem hier verursacht.
Bei einer so kleinen Populationsgröße sind 200-300 Generationen nicht überraschend, um das Problem zu lösen. Wenn Sie die Population erhöhen, sollte es die erforderlichen Generationen reduzieren.
Hinweis: Ich habe einen alten Code gefunden, den ich vor einigen Jahren geschrieben habe, um ein ähnliches Problem zu lösen. Es ist in C und verwendet Turnierauswahl, aber vielleicht kann es dir ein paar Ideen geben:
%Vor%Tags und Links python genetic-algorithm artificial-intelligence genetic-programming