nowe mozliwosci Framsticks v2. Wlasne eksperymenty. 
Maciej Komosinski's picture

Wstepne ogloszenie.
-------------------

Framsticks v2 - nowe możliwości

Najważniejsza nowość w świecie Framsticks to możliwość własnego
definiowania reguł, według których działa symulator.
Zlikwidowane zostały dotychczasowe sztywne zasady a ich zadanie przejął
skrypt zwany "Definicją eksperymentu", który określa zachowanie się
systemu na kilku powiązanych ze sobą obszarach:

1. Tworzenie obiektów w świecie

Od skryptu zależy, gdzie, kiedy i ile jakich obiektów powstanie. Przez
obiekt rozumiemy tu zarówno organizm biorący udział w ewolucji jak i
cząstkę pokarmu albo inne elementy świata wymyślone przez eksperymentatora.
Niektóre z możliwości, jakie otwiera nowy system to:
- pełna kontrola nad warunkami symulacji, możliwość zaplanowania z
góry ułożenia organizmów i np. pożywienia (a więc również powrzalność
warunków początkowych, jeżeli w naszym eksperymencie testujemy organizmy
jeden po drugim)
- świat może być bardziej skomplikowany i dynamiczny, np. pożywienie
lub przeszkody mogą pojawiać się, przemieszczać i znikać
- miejsce powstania nowego organizmu może być uzależnione od
lokalizacji "rodziców"

2. Interakcje pomiędzy obiektami

Kontakt obiektów może powodować zdefiniowaną przez nas reakcję.
przykładem z v1 byłoby pochłanianie energii, wzajemne odpychanie się lub
uszkodzenie organizmu.
Obecnie dzięki skryptowi możemy:
- zaimplementować te zachowania w inny sposób, np. uwzględnić
dodatkowe czynniki (organizm może wchłaniać energię lub niszczyć
przeciwnika jeżeli uruchomił efektory odpowiedzialne za te czynności)
- udostępnić organizmowi informację o zdarzeniu, np. tworząc receptor
informujący o trwającym procesie pochłaniania pożywienia
- reagować na zbliżanie się obiektów w zupełnie nowy sposób, być może
wpływający na ewolucję, tu narzuca się oczywiście krzyżowanie
organizmów, które spotkały się fizycznie

3. Zasady ewolucji

Dotychczasowy mechanizm ewolucji polegał zawsze na stopniowym
modyfikowaniu listy genotypów i ocenianiu przypadkowo wybranych
genotypów. W nowym modelu przechowywanie informacji o genotypach i
wykonywanie operacji genetycznych jest całkowicie pod kontrolą skryptu.
Można więc uzyskać chociażby takie, tryby pracy symulatora:
- uporządkowane ocenianie genotypów jeden po drugim i "synchroniczne"
(w odróżnieniu od obecnego, chaotycznego) tworzenie nowej populacji z
poprzedniej
- dowolnie wybrane metody selekcji, np. turnieje polegające na
ocenianiu symulowanych parami wszystkich genotypów z populacji
- utrzymywanie wielu pul genów i ich jednoczesna ewolucja, być może
według odmiennych kryteriów

Również kryteria oceny genotypów zależą całkowicie od zamysłu
eksperymentatora i nie muszą być w prostej zależności od osiągów w
rodzaju prędkość lub długość życia.
Ocena mogłaby zależeć między innymi od:
- czasu lub energii potrzebnej na wykonanie jakiegoś zadania
- stopnia wykonania zadania, zbliżenia się do celu

Architektura skryptu

Skrypt składa się z "procedur" przypisanych do zdarzeń zachodzących w
systemie.
Obecnie zdefiniwane są następujące zdarzenia:

- onExpDefLoad - załadowano definicję eksperymentu.
Zadaniem tej procedury jest przygotowanie środowiska, czyli utworzenie
odpowiednich grup genotypów i organizmów (grupa przechowuje obiekty tej
samej "klasy", np. organizmy podlegające ewolucji i pożywienie to dwie
odrębne grupy w eksperymencie naśladującym warunki symulatora v1). Po
tym zdarzeniu symulator nie musi zachowywać żadnych poprzednich danych.

- onExpInit - rozpoczęcie eksperymentu, czyli usunięcie starych
wyników, prawdopodobnie wyczyszczenie aktualnie obecnych w świecie
obiektów, zainicjowanie pól przechowujących stan eksperymentu, być może
zmiana stanu świata, utworzenie pewnych obiektów.

- onExpSave - żądanie zapisania stanu eksperymentu. W zależności od
konkretnego eksperymentu i przyjętej strategii można zapisać różną ilość
danych, w większości przypadków będą to co najmniej ustawienia
parametrów eksperymentu i zbiór lub zbiory genotypów podlegających ewolucji

- onExpLoad - żądanie wczytania stanu eksperymentu. Po tym zdarzeniu
użytkownik skryptu spodziewa się zastać symulator w stanie takim, jak
przed onExpSave, czasem może nie być to do końca spełnione, np. utracone
zostaną osiągi organizmów, które rozpoczęły życie w świecie ale nie
zakończyły go przed zapisaniem eksperymentu.

- onStep - wywoływane w każdym kroku symulacji.

- onBorn - wywoływane, gdy w świecie powstaje nowy organizm (przez
operacje samego skryptu lub interwencję użytkownika)

- onKill - wywoływane, gdy organizm zostaje zabity (przez operacje
skryptu, standardowy mechanizm upływu energii lub interwencję użytkownika)

- on[XXX]Collision - wywoływane w cyklu, w którym obiekt grupy [XXX]
doznał zetknięcia z innym obiektem.

Przykład:
Oto uproszczony skrypt naśladujący zachowanie się symulatora v1 (zapis w
pseudokodzie)

==========================================
:onExpDefLoad
utwórz jedna grupę genotypów "Genotypes"
i dwie grupy organizmów "Creatures" i "Food"

:onExpInit
wyczyść wszystkie grupy
umieść początkowy genotyp w "Genotypes"

:onStep
jeżeli ilość jedzenia jest za mała:
-> utwórz nowy obiekt "Food"
jeżeli ilość organizmów jest za małą:
-> wylosuj odpowiedniego przodka z "Genotypes"
użyj mutacji, krzyżowania lub kopiowania
z uzyskanego genotypu utwórz organizm w "Creatures"

:onBorn
przesuń obiekt w losowo wybrane miejsce na świecie
ustaw energię początkową zgodnie z typem obiektu

:onKill
jeżeli zakończył życie obiekt "Creatures"
-> zapisz informacje o jego ocenie w "Genotypes"
(być może tworząc nowy genotyp)
jeżeli liczba genotypów w "Genotypes" jest zbyt duża
-> usuń jeden z genotypów

:onFoodCollision
przekaż porcję energii z obiektu "Food" do "Creature"

==========================================

Wow (przepraszam, ojoj!)
Rzeczywiscie, to otwiera calkiem nowe mozliwosci.
Osobiscie mialem problem z ustawieniem "stolika" (kregoslup + cztery nogi) w
pozycji jemu wlasciwej. Ewolucja na vertical position sprawiala, ze probowal
"stawac na dwoch lapach".

Jak wykorzytanie skryptow odbije sie na osiagach programu? Juz w wersji 1,
zapewne lepiej zoptymalizowany niz skrypty beda mogly byc, potrzebuje wielu
godzin na wyewoluowanie czegokolwiek wartego uwagi (na Athlonie 1,1GHz).
Obawiam sie ze wspaniale mozliwosci nie zostana wykorzystane ze wzgledu na
bariere sprzetowa.

Maciej Komosinski's picture

> Jak wykorzytanie skryptow odbije sie na osiagach programu? Juz w wersji 1,
> zapewne lepiej zoptymalizowany niz skrypty beda mogly byc, potrzebuje wielu
> godzin na wyewoluowanie czegokolwiek wartego uwagi (na Athlonie 1,1GHz).
> Obawiam sie ze wspaniale mozliwosci nie zostana wykorzystane ze wzgledu na
> bariere sprzetowa.

Najwazniejszy dobry dobor parametrow. Przy malej
populacji juz po niecalej godzince mamy lokalne optimum
i zbieznosc.

Natomiast niewatpliwie mozna tak ustalic parametry
i zaprojektowac eksperyment, ze zaden sprzet nie
pomoze. W koncu to ewolucja realistycznych form...
Wszystko zalezy od eksperymentatora.

M.K.