|
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 ###
|