Ich habe ein bisschen Lebewesen gemacht, die in dieser kleinen Welt lebten. Sie hatten ein neuronales Netzwerkhirn, das einige Eingaben von der Welt erhielt, und die Ausgabe war ein Vektor für Bewegung unter anderen Aktionen. Ihr Gehirn waren die "Gene".
Das Programm begann mit einer zufälligen Population von Lebewesen mit zufälligen Gehirnen. Die Eingangs- und Ausgangsneuronen waren statisch, aber was dazwischen war, war nicht.
Die Umwelt enthielt Lebensmittel und Gefahren. Essen erhöht die Energie und wenn Sie genug Energie haben, können Sie sich paaren. Die Gefahren würden die Energie reduzieren und wenn die Energie 0 wäre, würden sie sterben.
Schließlich entwickelten sich die Kreaturen, um sich um die Welt zu bewegen, Nahrung zu finden und die Gefahren zu vermeiden.
Ich beschloss dann, ein kleines Experiment zu machen. Ich gab dem Gehirn der Kreatur ein Ausgangsneuron namens "Mund" und ein Eingangsneuron namens "Ohr". Begann von vorne und stellte überrascht fest, dass sie sich weiterentwickelt hatten, um den Raum zu maximieren, und dass jede Kreatur in ihrem jeweiligen Teil bleiben würde (Nahrung wurde zufällig platziert). Sie lernten, miteinander zu kooperieren und sich nicht gegenseitig in die Quere zu kommen. Es gab immer Ausnahmen.
Dann habe ich etwas Interessantes ausprobiert. Ich tote Kreaturen würden Nahrung werden. Versuchen Sie zu erraten, was passiert ist! Es entwickelten sich zwei Arten von Kreaturen, solche, die wie in Schwärmen angriffen, und solche, die stark vermieden wurden.
Was ist die Lektion hier? Kommunikation bedeutet Zusammenarbeit. Sobald Sie ein Element einführen, bei dem das Verletzen eines anderen bedeutet, dass Sie etwas gewinnen, wird die Zusammenarbeit zerstört.
Ich frage mich, wie sich dies auf das System der freien Märkte und des Kapitalismus auswirkt. Ich meine, wenn Unternehmen ihre Konkurrenz verletzen und damit durchkommen können , dann ist klar, dass sie alles in ihrer Macht stehende tun werden, um die Konkurrenz zu schädigen.
Bearbeiten:
Ich habe es in C ++ ohne Frameworks geschrieben. Schrieb mein eigenes neuronales Netz und GA-Code. Eric, danke, dass du gesagt hast, dass es plausibel ist. Die Leute glauben normalerweise nicht an die Kräfte von GA (obwohl die Einschränkungen offensichtlich sind), bis sie damit gespielt haben. GA ist einfach, aber nicht simpel.
Für die Zweifler hat sich gezeigt, dass neuronale Netze jede Funktion simulieren können, wenn sie mehr als eine Schicht haben. GA ist eine ziemlich einfache Methode, um in einem Lösungsbereich zu navigieren und ein lokales und möglicherweise globales Minimum zu finden. Kombinieren Sie GA mit neuronalen Netzen und Sie haben eine ziemlich gute Möglichkeit, Funktionen zu finden, die ungefähre Lösungen für generische Probleme finden. Da wir neuronale Netze verwenden, optimieren wir die Funktion für einige Eingaben, nicht für einige Eingaben in eine Funktion, da andere GA verwenden
Hier ist der Demo-Code für das Überlebensbeispiel: http://www.mempko.com/darcs/neural/demos/eaters/
Bauanleitung:
- Installieren Sie darcs, libboost, liballegro, gcc, cmake, make
darcs clone --lazy http://www.mempko.com/darcs/neural/
cd neural
cmake .
make
cd demos/eaters
./eaters