Chemical_representation 

Kodowanie rozwojowe trójwymiarowych organizmów
Wzrost ciała opisany regułami "chemicznymi"
------------------------------------------------

Kodowanie rozwojowe (DNA-podobne) trójwymiarowych organizmów
składających się z odcinków (-> Framsticks).

Generalna zasada działania: rozwój określony jest przez
zbiór reguł, które mogą "odpalać się" i powodować
wzrost organizmu, a także wpływać na działanie kolejnych reguł.

Genotyp to zbiór reguł postaci:
        IF features(f1, f2, .., fm) & subst(s1, s2, .., sn)
           THEN grow, modfeatures(df1, df2, .., dfm), modsubst(ds1, .., dsn)

fi   : i=2..m. liczba lub "-". Określa cechy stika/neuronu/połączenia
       (f1). Jeśli za dużo cech, nadwyżka jest ignorowana. Jeśli
       za mało, brakujące cechy są domyślne lub losowe. Cechy -> M.K.
sj   : minimalna wartość intensywności substancji j (liczba 0..1)
grow : f1==0: stick, f1==0.5: neuron, f1==1: neuron connection
dsj  : delty: o ile zwiększyć intensywność substancji j (dsj>=0)
dfi  : delty: o ile zmienić wartość cechy i (dfi dowolne)

i=1..m (cechy f lub df, m=const)
j=1..n (substancje s lub ds, n=const)

W przestrzeni 3D są rozproszone substancje s i cechy f.
Cechy istnieją miejscowo, substancje generują słabnące "pole".

PROCEDURA WZROSTU:

(*) W każdym kroku symulacji wzrostu wybiera się ze zbioru reguł tę,
która ma najwyższy stopień spełnienia. Potem sprawdza się,
czy nasycenie substancji w danym miejscu jest odpowiednie.
Jeśli nie, goto (*). Jeśli żadna reguła nie może być
uaktywniona, KONIEC WZROSTU.
Else: odpal regułę w konkretnym miejscu 3D, czyli:
- zmniejsz/zwiększ cechy wg dfi, tzn fi=fi+dfi
- zbuduj element stworzenia wyposażając go w cechy fi
- zmniejsz intensywności źródeł substancji o tyle, ile zostało
  "zużyte" (suma sj)
- zmniejsz/zwiększ intensywności źródeł w danym miejscu wg dsj
  (możesz rozdysponować tyle energii, ile zostało "zużyte"
  pomnożone przez wskaźnik sprawności "e")
goto (*)

Symulacja wzrostu - trzeba pamiętać wzrastającą strukturę
3D, wzrastającą NN, miejsca wydzielonych substancji i wektory cech.

Krzyżowanie: wymiana losowych reguł (po połowie).
Mutacje: zmiany wartości (na inną wartość lub na "-"), relacji,
         akcji; usunięcie/dodanie reguły. Wartość sj nie może
         być mniejsza od progu S.

Globalne parametry:
m (np. 10), n (np. 5), e (np. 0.9), S (np. 0.2)

---


SZCZEGÓŁY.

- początek rozwoju.
  źródło substancji 1 o intensywności 1. Źródło cechy 0.
- podstawowy osobnik. reguła (dla m=n=1)
  IF features(0) & subst(.9)
     THEN modfeatures(0), grow, modsubst(0)
- stopień spełnienia reguły - przydatny w razie konfliktu,
  kiedy >1 reguła mogłaby być odpalona. Jest to miara
  podobieństwa cech wymaganych przez regułę i istniejących
  w danym miejscu (np. suma różnic).
- zużycie substancji: kiedy reguła się odpala, zużywa substancje.
  Należy odjąć od źródeł substancji wielkości proporcjonalne
  do tego, ile "promieniowania" z tych źródeł dociera do miejsca
  odpalenia reguły, czyli ile ona "pobrała" z danych źródeł.
- ds. Niech reguła zużywa w sumie SUMA różnych substancji. Może
  więc wyemitowć SUMA*e różnych substancji w miejscu, gdzie się
  odpaliła. Liczba SUMA*e jest dzielona proporcjonalnie wg wektora
  ds, w ten sposób powstaje nowe źródło emitujące wektor substancji.
- intensywność:
  <sj> maleje z 3-cią potęgą odległości euklidesowej w 3D.
  Mutacje wartości przy <sj> i <dsj> uwzględniają ten nierównomierny
  rozkład (skala intensywności nie jest podzielona na
  równoprawdopodobne przedziały).

Dalsza analiza i pomysly