Prírodou inšpirované algoritmy

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

Späť ku kurzom triedy
Obsah
Úvod
Popis Avidy
Uživateľské prostredie
Inštalácia Avidy
Experimenty
Literatúra a linky
O tejto kapitole
Popis súboru genesis



Ostatné kapitoly
LEE
Framsticks
EINSTein
Nerve garden
Poly World
Simulácia evolúcie rozhodovania
Nornovia
Creatures 3
Primordial Life
Core War
Desktop Garp
Tierra
Avida


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


Popis súboru genesis

Súbor genesis obsahuje stručný popis základných parametrov pre avidu. Podrobnejší popis týchto nastaviteľných parametrov a ďalších avidovských súborov nájdete v (Adami, 1998) .

# This file includes all the run-time defines...
### Architecture Variables ###
MODE 2 # 1 = Tierra, 2 = Avida
MAX_UPDATES 10000 # Maximum updates to run simulation.
WORLD_SIZE 1600 # Number of creatures in Tierra mode.
WORLD-X 60 # Width of the world in Avida mode.
WORLD-Y 60 # Height of the world in Avida mode.

Premenná MODE slúži na voľbu medzi avidou a tierrou. Tierra je v tomto programe oklieštená avidovskými ošetreniami a používa avidovskú inštrukčnú sadu. WORLD_SIZE slúži na určenie veľkosti populácie v tierre. Avida túto premennú nemá, pretože veľkosť sveta v avide je daná veľkosťou mriežky WORLD-X, WORLD-Y. MAX_UPDATES určuje dĺžku evolúcie. Update (jedna generácia odpovedá jednému update-u) je virtuálna časová jednotka v avide. Podobne ako my podliehame času - starneme, aj tieto reťazce podliehajú umelému času. Maximálna hodnota pri MAX_UPDATES môže byť 50 000. Viac ku 'časovaniu' nájdete v časti ### Time Slicing ###.

### Configuration Files ###
DEFAULT_DIR ../work/ # Directory in which config files can be found.
INST_SET inst_set.24.base # File containing instruction set.
TASK_SET task_set # File containing task set.
EVENT_FILE event_list # File containing list of events during run.
START_CREATURE genebank/creature.base # Creature to seed the soup.

Konfiguračné súbory v avide umožňujú užívateľovi nastaviť si pracovný adresár DEFAULT_DIR; pri výbere inštrukcií z inštrukčnej sady INST_SET nie je napríklad nutné používať všetky avidovské inštrukcie. V START_CREATURE je nadefinovaný prapredok. Užívateľ má možnosť nadefinovať si aj vlastného prapredka. Ten musí spĺňať podmienku samoreplikácie. Súbor task_set obsahuje nadefinované úlohy a ich bonus. Užívateľ má možnosť prispôsobiť si tieto hodnotenia úloh, ako aj vytvoriť si vlastné úlohy.
Súbor event_list je užitočný, napríklad ak chcete populáciu v avide meniť priamo počas jej chodu.

### Reproduction ###
BIRTH_METHOD 1 # 0 = Choose Random Creature
# 1 = Choose Oldest Creature
# 2 = Choose largest Age/Merit
# 3 = Choose only empty cells.
DEATH_METHOD 0 # 0 = Never kill creatures.
# 1 = Kill when inst executed = AGE_LIMIT
# 2 = Kill when inst executed = length * AGE_LIMIT
AGE_LIMIT 16 # Modifies DEATH_METHOD


Proces replikácie určuje dynamiku systému. Samotnú reprodukciu v avide môžeme zhrnúť do týchto bodov:

  • alokácia pamäte
  • kopírovanie rodičovského programu do pamäte, inštrukciu za inštrukciou
  • rozdelenie programu na rodiča a potomka
  • umiestnenie potomka na mriežku


  • Avida poskytuje niekoľko metód umiestňovania potomkov. Voľbou čísla pri BIRTH_METHOD si môžete nastaviť umiestňovanie: náhodné - náhodne sa vyberie jeden z 8 susedov, a nahradí sa. Táto metóda je dosť slabá pre evolúciu! výberom najstaršieho suseda - vyberie sa najstarší sused a ten sa nahradí. Ak je starých susedov viac, nahradí sa jeden z nich, náhodne vybratý. výberom najväčšej hodnoty vek/cena - vyberie sa ten z množiny susedov, ktorého podiel vek (koľko updateov prežil)/cena (koľkoCPU času si zarobil) je najväčší výber prázdnej bunky - tam, kde je miesto, tam je umiestnený nový potomok. Pokiaľ sa mriežka zaplní už niet prázdnych miest, buniek. Preto je dôležité pri voľbe tejto metódy nastaviť aj jednu z DEATH_METHOD. Kedy je možné usmrtiť nejaký reťazec býva najčastejšie zadefinované nejakou funkciou úmernou premennej AGE_LIMIT (udáva maximálny počet spustiteľných inštrukcií)

    ### Mutations ###
    POINT_MUT_RATE 20 # Mutation rate (per-location per update) (x10^-6)
    COPY_MUT_RATE 50 # Mutation rate (per copy). (x10^-4)
    DIVIDE_MUT_RATE 0 # Mutation rate (per divide). (x10^-2)
    DIVIDE_INS_RATE 5 # Insertion rate (per divide). (x10^-2)
    DIVIDE_DEL_RATE 5 # Deletion rate (per divide). (x10^-2)


    Avida poskytuje niekoľko druhov mutácií. Vypnutie/zapnutie a veľkosť mutácií sa dá nastaviť (všimnite si, že ich mierky nie sú rovnaké!). Populácia môže prežiť, ak je bodová/kozmická mutácia nastavená na hodnotu 500, t.j. POINT_MUT_RATE 500, a ostatné mutácie sú vypnuté. Pri COPY_MUT_RATE (=pravdepodobnosť nesprávneho zápisu inštrukcie pri kopírovaní) je hodnota 30 považovaná za nízku a 200 považovaná za vysokú mutačnú mieru.
    Príklad: Takéto nastavenie COPY_MUT_RATE 30 # Mutation rate (per copy). (x10^-4) predstavuje mutačnú mieru R=30x10^-4 (čo predstavuje 0.3%), kde 1/(30x10^-4) sa rovná približne 333. Znamená to, že výsledkom jednej z 333 operácií kopírovania bude náhodná inštrukcia. DIVIDE_MUT_RATE (= pravdepodobnosť mutácie pri delení reťazca) umožňuje to, že jedna inštrukcia, náhodne vybratá z kódu, bude mutovaná. Horná hranica je tejto mutácie je okolo 85. DIVIDE_INS_RATE a DIVIDE_DEL_RATE (= pravdepodobnosť vkladania/mazania náhodnej inštrukcie). Populácia by mala zvládnuť nastavenie týchto mutácií do hodnoty 85. Poznámka: Aj napriek tomu, že v knihe (Adami, 1998) sa stručne popisuje kríženie (crossover: dva reťazce-rodičia sa 'zlomia' v jednom, alebo viacerých bodoch a takého oddelené časti si navzájom vymenia. Títo noví jedinci-potomkovia sú 'pustení' do populácie, ak ich kódy spĺňajú podmienku samoreplikácie), jeho priame nastavenie som v avide nenašla. Autor tiež uvádza termín Necrophilia, ako spôsob kríženia, kedy sa kód živej bunky zmieša s kódom mŕtvej bunky (napr. pri náhrade mŕtvej bunky novou). Bližšie informácie som však ani o tomto druhu kríženia v avide nenašla.

    ### Time Slicing ###
    AVE_TIME_SLICE 30
    SLICING_METHOD 3 # 0 = CONSTANT: all creatures get default...
    # 1 = BLOCK: Block slice scaled to merit.
    # 2 = PROBABILISTIC: Run _prob_ proportional to merit.
    # 3 = INTEGRATED: Perfectly integrated deterministic.
    SIZE_MERIT_METHOD 4 # 0 = off (merit is independent of size)
    # 1 = Merit proportional to copied size
    # 2 = Merit prop. to executed size.
    # 3 = Merit prop. to full size.
    # 4 = Merit prop. to min of executed or copied size.
    TASK_MERIT_METHOD 1 # 0/1 off or on. (off removes bonuses for tasks).


    Avida rieši architektúru MIMD niekoľkými metódami časovania. Čas na ľudí vplýva rovnako (priznávam, že sa o tom dá polemizovať, ale tu sa budeme hrať, že to platí :-). Ako však zabezpečiť túto jednotnosť pri vykonávaní inštrukcií odlišných na pamäť a čas CPU ako napríklad nop A, či inc A ? Zaslúži si dlhšia kreatúra viac CPU času, ako kratšia, aj napriek tomu, že kód kratšej spĺňa viac úloh ako kód tej dlhšej? Tieto, a podobné otázky časovania sa snažia vyriešiť tzv. ### Time Slicing ### metódy. Čas môže byť prideľovaný ako konštantná hodnota pre všetky reťazce, presnejšie ich CPU jednotky , alebo blokovo (ako v Tierre), keď čas, ktorý CPU jednotky reťazcov získajú je úmerný ich schopnosti riešiť úlohy (BLOCK). Iná metóda (PROBABILISTIC) prideľuje čas tým spôsobom, že čím má reťazec vyššiu schopnosť riešiť úlohy, tým je pravdepodobnosť, že mu bude čas pridaný, vyššia. Posledná z metód (INTEGRATED) pracuje tak, že každá CPU spracúva inštrukciu v čase pridelenom na základe relatívnych rýchlostí ostatných CPU jednotiek. Ich rýchlosti sú úmerné schopnosti jedinca riešiť úlohy.
    Veľkú úlohu zohráva aj výber metód (SIZE_MERIT_METHOD), ktoré pracujú s dĺžkou reťazca (najčastejšie s tzv. aktívnou dĺžkou reťazca) ako aj metódy pracujúce s hodnotením úloh (TASK_MERIT_METHOD).

    ### Genotype Info ###
    THRESHOLD 3 # Number of creatures in a genotype needed for it
    # to be considered viable.
    GENOTYPE_PRINT 0 # 0/1 (off/on) Print out all threshold genotypes?
    SPECIES_PRINT 0 # 0/1 (off/on) Print out all species?
    GENOTYPE_PRINT_DOM 0 # Print out a genotype if it stays dominant for
    # this many updates. (0 = off)
    SPECIES_RECORDING 2 # 1 = full, 2 = limited search (parent only)
    SPECIES_THRESHOLD 2 # max number of failures creatures to be same species


    V časti ### Genotype Info ### nájdete možnosti práce s genotypom a druhmi. Poznámka: Každý reťazec sa v avide zvykne nazývať genóm.Ak sa reťazce úplne zhodujú vo svojom genóme tvoria genotyp. Ak ich počet v rámci genotypu prekročí prah THRESHOLD stávajú sa tzv. nadprahovými genotypmi, ak je početnosť týchto genotypov je menšia ako THRESHOLD, nazývajú sa podprahové genotypy. Pod pojmom fenotyp rozumieme to, čo genotyp robí, aké úlohy zvláda a akým spôsobom.
    Taxonomickú úroveň nad genotypom tvorí druh. Všetky jedince v rámci druhu si sú podobné na funkčnej a štrukturálnej úrovni, ale nie je nutné, aby sa rovnali v každej inštrukcii.

    Časť ### Data and Log Files ### obsahuje nastavenia pre uchovávanie dát do výstupných súborov. Odporúčam nastaviť frekvenciu zápisu do týchto súborov s rozvahou! :-)

    ### Data and Log Files ###
    SAVE_AVERAGE_DATA 10 # Print these files every x_updates. Enter 0 for
    SAVE_DOMINANT_DATA 10 # those which should never be printed
    SAVE_COUNT_DATA 10
    SAVE_TOTALS_DATA 0
    SAVE_TASKS_DATA 50
    SAVE_STATS_DATA 10
    SAVE_GENOTYPE_STATUS 0 # Print these files every x updates. Enter 0 for
    SAVE_DIVERSITY_STATUS 0 # those which should never be printed
    LOG_CREATURES 0 # 0/1 (off/on) toggle to print file.
    LOG_GENOTYPES 2 # 0 = off, 1 = print ALL, 2 = print threshold ONLY.
    LOG_THRESHOLD 0 # 0/1 (off/on) toggle to print file.
    LOG_SPECIES 0 # 0/1 (off/on) toggle to print file.
    LOG_BREED_COUNT 0 # 0/1 (off/on) toggle to print file.
    LOG_PHYLOGENY 0 # 0/1 (off/on) toggle to print file.
    ### END ###

    Hore
    Kontakt: Marek Bundzel