9

Próbuję zbudować prostą symulację ewolucji agentów kontrolowanych przez sieć neuronową. W bieżącej wersji każdy agent ma dodatnią sieć neuronową z jedną ukrytą warstwą. Środowisko zawiera ustaloną ilość żywności reprezentowaną jako czerwona kropka. Kiedy agent się porusza, traci energię, a kiedy jest blisko jedzenia, zyskuje energię. Agent z matrycami 0 energii. wejście sieci neuronowej to bieżący kąt czynnika i wektor do najbliższego pokarmu. Za każdym razem kąt ruchu każdego agenta zmienia się w wyniku jego sieci neuronowej. Celem jest oczywiście obserwowanie zachowań poszukiwaniem po pewnym czasie. Jednak nic się nie dzieje.Sztuczne życie z sieciami neuronowymi

Nie wiem, czy problemem jest struktura sieci neuronowej (zbyt prosta?) Czy mechanizm reprodukcji: aby zapobiec wybuchowi populacji, początkowa populacja wynosi około 20 agentów, a populacja staje się bliska 50, szansa na reprodukcję zbliża się do zera. Kiedy występuje reprodukcja, rodzic jest wybierany przechodząc przez listę agentów od początku do końca i sprawdzając dla każdego agenta, czy losowa liczba od 0 do 1 jest mniejsza niż stosunek energii tego agenta do sumy energia wszystkich czynników. Jeśli tak, wyszukiwanie jest zakończone i ten agent staje się rodzicem, ponieważ dodajemy do środowiska kopię tego agenta z pewnym prawdopodobieństwem mutacji w jednym lub większej liczbie wag w jego sieci neuronowej.

Z góry dziękuję!

+0

Co dokładnie masz na myśli mówiąc "nic się nie dzieje"? – timday

+0

Agenci poruszają się losowo, zmieniają kierunek od czasu do czasu, ale nie szukają jedzenia. – user1767774

+1

BTW, jeśli jeszcze go nie spotkasz i potrzebujesz inspiracji do tego rodzaju projektu, przeczytaj: http://ttapress.com/553/crystal-nights-by-greg-egan/ – timday

Odpowiedz

6

Jeśli środowisko jest wystarczająco łagodne (np. Łatwo znaleźć pożywienie), po prostu poruszanie się losowo może być doskonale wykonalną strategią, a sukces reprodukcyjny może być znacznie bardziej uzależniony od szczęścia niż cokolwiek innego. Weź również pod uwagę niezamierzone konsekwencje: np. Jeśli potomstwo jest współuczestniczone z rodzicem, to oba od razu konkurują ze sobą w okolicy i może to być wystarczająco niekorzystne, aby doprowadzić do śmierci obojga w dłuższej perspektywie.

Aby przetestować swój system, wprowadź osobę z "wstępnie przygotowaną" siecią neuronową, która ma sterować osobą bezpośrednio w kierunku najbliższej żywności (Twój model jest taki, że coś takiego istnieje i można go łatwo zapisać, prawda? Jeśli nie, to nierozsądne oczekiwać, że ewoluuje!). Wprowadź tę osobę do swojej symulacji wśród głupich mas. Jeśli dana osoba nie szybko dominuje, sugeruje ona, że ​​twoja symulacja nie została ustanowiona w celu wzmocnienia takiego zachowania. Ale jeśli dana osoba cieszy się sukcesem reprodukcyjnym, a ona i jej potomkowie przejmują kontrolę, wtedy twoja symulacja robi coś dobrze i musisz szukać gdzie indziej, ponieważ takie zachowanie nie ewoluuje.

Update w odpowiedzi na komentarz:

Wydaje mi się to mieszanie kątów i nosicieli jest wątpliwy. To, czy poszczególne osoby mogą ewoluować w kierunku zachowania "zbliż się do najbliższego jedzenia", musi zależeć od tego, jak dobrze twoja sieć może aproksymować funkcję atana (jestem sceptyczny). Ponownie, tym więcej badań sugeruje:

  • uchylenie całą symulację ekologiczną i po prostu przetestować zaburza populację swojego stylu przypadkowych sieci w celu sprawdzenia, czy mogą one ewoluować w kierunku oczekiwanych funkcji.
  • (prostsze, lepsze) Niech wyjście sieciowe jest wektorem (zamiast kąta): kierunek, w którym osoba powinna się poruszać (oczywiście oznacza to posiadanie 2 węzłów wyjściowych zamiast jednego). Oczywiście strategia "idź prosto w kierunku jedzenia" jest po prostu prostym przejawem komponentów wektorowych "kierunku w kierunku jedzenia", a interesującą rzeczą jest wtedy zobaczenie, czy twoje przypadkowe sieci ewoluują w kierunku tej prostej "funkcji tożsamości" (również powinna pozwalają na wprowadzenie gotowej zoptymalizowanej osoby, jak opisano powyżej).

Mam wątpliwości co do "ustalonej ilości jedzenia". (Zakładam, że masz na myśli, gdy tylko czerwona kropka zostanie zużyta, pojawi się kolejna). Bardziej "realistycznym" modelem może być wprowadzenie żywności w stałym tempie i nie narzucanie sztucznych limitów populacji: limity populacji są określane przez ograniczenia podaży żywności. np. Jeśli wprowadzisz 100 jednostek jedzenia na minutę, a ludzie potrzebują 1 jednostki pokarmu na minutę, aby przetrwać, wtedy twoja symulacja musi znaleźć się w kierunku długoterminowej średniej populacji 100 osób bez potrzeby stosowania zacisku, aby uniknąć ". eksplozja demograficzna "(choć w zależności od szczegółów może pojawić się dynamika boom-i-popiersie, uczta lub głód).

+0

Dziękuję, to świetny pomysł, ale nie jestem pewien, jak powinienem wybrać odpowiednie ciężary. Używam tanh (x) jako funkcji aktywacyjnej. Niech a, b, c będą wagami i alfa, dx, kątami środka, odległością poziomą i pionową odległością do najbliższego pokarmu. Chcę takiego a, b, c, aby tanh (a * alfa + b * dx + c * dy) = epsilon * (tan (dy/dx) -alpha) - Chcę, żeby wynik był trochę stały razy różnica między kąt do żywności (tan (dy/dx)) do bieżącego kąta. Jest to jedno równanie z 3 niewiadomymi. A propos, co sądzisz o opisanym przeze mnie mechanizmie reprodukcyjnym? – user1767774

+1

Podążyłem za twoją sugestią i uczyniłem wyjście sieciowe wektorem, i po kilku minutach rozwinęło się poszukiwanie pożywienia! Dziękuję (-: jaka jest przyczyna tej znaczącej zmiany? Intuicyjnie wektor zawiera zarówno informację o kącie, jak i mniej istotne informacje o wielkości, więc można oprócz gorszych wyników niż wtedy, gdy wyjście jest proste skalarne (kąt) ... – user1767774

+1

Zgaduję: ponieważ jest to znacznie łatwiejsze, aby twój model sieci neuronowej ewoluował w kierunku prostego "przejścia" kierunku żywności do kierunku ruchu, niż dla nich, aby rozwinąć funkcję atan. – timday