Prírodou inšpirované algoritmy

študijné materiály pre projekt mobilnej triedy umelej inteligencie

Späť ku kurzom triedy
Obsah
Applet podľa pôvodnej Dawkinsovej koncepcie
Applet s krížením a mutáciou
Applet iba s mutáciou



Ostatné kapitoly
Lindenmayerove systémy
Modelovanie ekosystémov
Dawkinsove biomorfy
Reakčno-difúzne modely
Difúzne ohraničené zhlukovanie
Voronoiove diagramy
Časticové systémy
Fibbonaciho čísla a zlatý rez


Tutoriály
 Celulárne automaty
 Morfogenéza
 Simulátory
 Evolučné algoritmy
 Chaos
 Roboty
 Rôzne


Applet podľa pôvodnej Dawkinsovej koncepcie

ÚVOD

Applet bol inšpirovaný Dawkinsovou knihou "Slepý hodinár" (The Blind Watchmaker).

Fyzickú štruktúru udáva 9 rôznych génov (dĺžka, uhol konárov, hĺbka rekurzie). Applet zobrazuje rodičovský biomorf a jeho potomkov, pričom každý z nich sa líši v hodnote jedného génu. Takto si užívateľ sám môže vybrať ktorý potomok najviac vyhovuje jeho predstave a stáva sa rodičom pre ďalší vrh.

Biomorfy sú zábavnou cestou pre demonštráciu sily evolúcie.

GÉNY

Prvých 8 génov má 19 alel, z rozsahu -9 až do +9 a sú využité pre kódovanie smeru a dĺžky ramien súčasne. Deviaty gén je z rozsahu 0-9 a vyjadruje hĺbku rekurzie, a tiež ovplyvňuje dĺžku konárov. Zmena (mutácia) je dovolená celočíselným krokom.

VYKRESĽOVANIE RAMIEN

Platia nasledujúce pravidlá:

  • Každé rameno sa rozdelí vždy na 2 nové
  • Kmeň má smer 2
  • Využije sa rekurzívny algoritmus pre vykreslenie biomorfa, kde:
    • ľavé rameno má smer o jednotku menší
    • pravé rameno má smer o jednotku väčší
  • Prechádza sa takto cez rôzne smery
  • Dĺžka ramien sa s vnorením do rekurzie znižuje

V génoch sú informácie pre vykresľovanie zakódované (podobné živým organizmom). Preto je nutné zvoliť vhodné dekódovanie. Na to sa využívajú dve polia dx a dy, obe môžu obsahovať 8 hodnôt a samotné dekódovanie sa deje nasledovne:

dx[3] = gene[1];      //basic dx directions
dx[4] = gene[2]; 
dx[5] = gene[3]; 
  
dx[1] = -dx[3];//symmetry about y axis
dx[0] = -dx[4]; 
dx[7] = -dx[5]; 
  
dx[2] = 0;
dx[6] = 0; 
  
dy[2] = gene[4];//basic y directions
dy[3] = gene[5]; 
dy[4] = gene[6]; 
dy[5] = gene[7]; 
dy[6] = gene[8]; 
  
dy[0] = dy[4];//ensure symmetry
dy[1] = dy[3]; 
dy[7] = dy[5]; 

Následne sa polia dx a dy využijú pri rekurzívnom vykresľovaní.

Funkcia, ktorá sa volá rekurzívne a počíta súradnice nových bodov
public void drawTree(Graphics g, int x, int y, int length, int dir, int[] dx, int[] dy)
{
    int xnew = x + length * dx[dir];
    int ynew = y + length * dy[dir];
    g.drawLine(x , y, xnew, ynew);
    if (length > 0) {
        drawTree(g, xnew, ynew, length - 1, dir - 1, dx, dy);
        drawTree(g, xnew, ynew, length - 1, dir + 1, dx, dy);
    }
}

GUI

Grafické rozpoloženie prvkov je prispôsobené požiadavke vykreslenia všetkých možných potomkov daného rodičovského biomorfu. Kliknutím na potomka sa zvolí tento potomok za rodiča v novej generácii. Je zvýraznený gén, v ktorom sa ten ktorý potomok líši od rodiča. Implementované je to pomocou odvodenia od už existujúceho SWINGového komponentu JPanel.

DIVERZITA BIOMORFOV

Dawkins avizoval významné zmeny biomorfov pri ich vývoji.

Najvýraznejší vizuálny efekt zmeny sa dosiahne mutáciou 9. génu, ktorý predstavuje hĺbku rekurzie.

Významná zmena sa prejaví aj vtedy, keď sa mutuje v jednom géne, ktorý robí vzdialenosť od osi y. Ak je dostatočne malá táto vzdialenosť od osi y, a ešte sa následne zníži, ramená biomorfa sa prekrížia (to čo bolo naľavo, prejde napravo).

Obrázok z knihy Slepý hodinár, Figure 3
Obrázok z knihy Slepý hodinár, Figure 4

SOURCE

Zdrojové kódy appletu aj so súbormi projektu v NetBeans 5.0 alebo Sun Java Studio Enterprise.

Hore
Kontakt: Marek Bundzel