Frage

Ich mag ein System von n linearen Gleichungen lösen einen genetischen Algorithmus mit n Variablen.

Ich habe Schwierigkeiten, die Crossover-Operation als Lösung bei der Definition kann aus Punktwert zu schweben. Wie gehe ich vor? Es scheint möglich, aber dies ist meine erste Begegnung mit genetischen Algorithmen.

Angenommen, wir lösen müssen

 x + 2y = 1
2x + 8y = 3

Die Antwort wäre x = 1/2 und y = 1/4.

Wie modellieren wir das Problem?

Aktualisieren : sehen, wenn Sie etwas von dem Papier entziffern konnte: http://www.masaumnet.com/archives/mjbas/volume1/issue2/mjbas010205.pdf .

War es hilfreich?

Lösung

Ein Weg ist Ihre eigene Floating-Point-Darstellung wählen, die Sie zu viel mit Werten befreit, wie Sie wollen. Natürlich, das macht für Sie zuständige arithmetische Operationen zu implementieren. Vielleicht könnten Sie eine bignum Bibliothek finden Sie verändern könnten.

Sie können auch Plattform-native floating Punkte zersetzen unter Verwendung von z.B. frexp während des Crossover-Schritt, dann rekombinieren sie während Culling.

Andere Tipps

Ihr Chromosom könnten die n-Gleitkommazahlen (Doppelzimmer), oder Sie können sie als Bitketten umdeuten durch eine Vereinigung mit:

const int n = 100;

union Chromosome {
  double val[n];
  unsigned char bits[n * sizeof(double)];
};

... dann können Sie die doppelten Werte für die Interpretation der Lösung / Fitness-Wert verwenden, und die Bits für die Zucht / Crossover / Mutation.

Viel Glück!

Sie tun es einfach nicht. Es gibt viele verschiedene Methoden, die Sie lineare Gleichungssysteme lösen anwenden können. Aber „genetische Algorithmen“ ist nicht etwas, das in den Sinn kommt. Sie würden genetische Algorithmen verwenden, um kombinatorische Probleme (Kommissionierung ein Element aus einem endliche set) zu lösen.

Sie lösen in der Regel lineare Systeme Faktorisierungen (QR, LU) oder iterative Algorithmen (Gauß-Seidel, CG, ...)

mit

Sie werden in dem Papier einen echten codierten genetischen Algorithmus, anstatt den binär codierten genetischen Algorithmus wie vorgeschlagen denken, müssen über die Verwendung von Ihnen genannten haben. In der Tat, wenn Sie einen binär kodierten genetischen Algorithmus verwenden, dann werden Sie nicht in der Lage sein, die Lösung der Gleichungen zu finden, wenn Ihr ‚x‘, ‚y‘ negative Werte annehmen kann.

Daher benötigen Sie einen echten kodierten genetischen Algorithmus zu verwenden. Entweder man kann den ganzen genetischen Algorithmus selbst kodieren, oder Sie können einfach nur einen guten vorhandenen RGA-Code verwenden, um Ihr Problem zu lösen. Sie werden nur die Fitness-Funktion für Ihren Bedarf anpassen müssen. Hier können Sie die eine, die in dem Papier vorgeschlagen. Es war ziemlich einfach!

können Sie betrachten die RGA Implementierung unter Verwendung von http://www.iitk.ac .in / kangal / codes.shtml .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top