Stworzyłem małe stworzenia, które żyły w tym małym świecie. Mieli mózg sieci neuronowej, który otrzymał pewne informacje ze świata, a dane wyjściowe były wektorem do przemieszczania się między innymi działaniami. Ich mózgi były „genami”.
Program rozpoczął się od losowej populacji zwierząt z przypadkowymi mózgami. Neurony wejściowe i wyjściowe były statyczne, ale między nimi nie było.
Środowisko zawierało żywność i niebezpieczeństwa. Jedzenie zwiększa energię, a gdy masz dość energii, możesz kopulować. Niebezpieczeństwa zmniejszyłyby energię, a gdyby energia wynosiła 0, zginęli.
W końcu stworzenia ewoluowały, aby poruszać się po świecie i znajdować żywność oraz unikać niebezpieczeństw.
Potem postanowiłem zrobić mały eksperyment. Dałem mózgowi istoty neuron wyjściowy o nazwie „usta” i neuron wejściowy o nazwie „ucho”. Zaczynałem od nowa i zdziwiłem się, gdy ewoluowali, aby zmaksymalizować przestrzeń, a każde stworzenie pozostawało w odpowiedniej części (jedzenie było umieszczane losowo). Nauczyli się współpracować ze sobą i nie wchodzić sobie w drogę. Zawsze były wyjątki.
Potem spróbowałem czegoś interesującego. Martwe stworzenia stałyby się pożywieniem. Spróbuj zgadnąć, co się stało! Wyewoluowały dwa rodzaje stworzeń, te, które atakowały jak roje i te, które były wysoce unikane.
Więc jaka jest lekcja tutaj? Komunikacja oznacza współpracę. Gdy tylko wprowadzisz element, w którym zranienie innego oznacza, że coś zyskujesz, współpraca zostaje zniszczona.
Zastanawiam się, jak to odbija się na systemie wolnych rynków i kapitalizmu. Chodzi mi o to, że jeśli firmy mogą zranić swoją konkurencję i uciec jej , to jasne, że zrobią wszystko, co w ich mocy, aby zaszkodzić konkurencji.
Edytować:
Napisałem to w C ++ bez użycia frameworków. Napisałem własną sieć neuronową i kod GA. Eric, dziękuję, że powiedziałeś, że to prawdopodobne. Ludzie zwykle nie wierzą w moce GA (chociaż ograniczenia są oczywiste), dopóki się z nimi nie bawią. GA jest proste, ale nie uproszczone.
W przypadku wątpiących udowodniono, że sieci neuronowe są w stanie symulować dowolną funkcję, jeśli mają więcej niż jedną warstwę. GA jest dość prostym sposobem poruszania się po przestrzeni rozwiązań, znajdując lokalne i potencjalnie globalne minimum. Połącz GA z sieciami neuronowymi i masz całkiem dobry sposób na znalezienie funkcji, które znajdą przybliżone rozwiązania ogólnych problemów. Ponieważ używamy sieci neuronowych, optymalizujemy funkcję dla niektórych danych wejściowych, a nie niektórych danych wejściowych do funkcji, ponieważ inni używają GA
Oto kod demonstracyjny dla przykładu przetrwania: http://www.mempko.com/darcs/neural/demos/eaters/
Instrukcje budowania:
- Zainstaluj darcs, libboost, liballegro, gcc, cmake, make
darcs clone --lazy http://www.mempko.com/darcs/neural/
cd neural
cmake .
make
cd demos/eaters
./eaters