LEM - Logic for Eco-Modeling

Štruktúra modelu LEM

Agenti
Ekosystém
Typy modelov
Interakcia agentov s LEM ekosystémom
Modely adaptácie poskytované systémom LEM

Spracoval: Dudy


Agenti

Agenti sú základnou jednotkou v programe LEM. V programe sú tri základné kategórie agentov:

  1. Envo-agenti
  2. Producenti
  3. Etho-agenti

Popri týchto troch druhoch agentov, je tu ešte jedna špeciálna kategória agentov, ktorý sa nazývajú značky a používajú sa na identifikáciu miesta. Značky sú viditeľné iba pri modelovaní a nehrajú žiadnu úlohu v interagovaní agentov s ekosystémom.

Každá kategória agentov je rozdielna v špecifikácii. Agenti, ktorí majú rovnakú špecifikáciu, sú podobný na výstupe. Majú rovnaký tvar a farbu. Majú rovnaké aj mnohé parametre.

Envo-agenti reprezentujú neživé prírodné faktory, ako sú budovy, kamene, jazerá a pod. Títo sú použití pri reprezentácii typu prostredia. Môžu byť tiež použití na reprezentáciu tých živých častí prostredia, ktoré používajú ostatný agenti iba ako časti prostredia. Envo-agenti nemajú žiadne stavové premenné.

Producenti reprezentujú producentov ekosystému. Majú jednu celočíselnú premennú, ktorá reprezentuje ich biomasu. Producenti majú pevný prírastok, ktorý je rovnaký pre všetkých producentov rovnakej špecifikácie.

Etho-agenti reprezentujú primárnych, sekundárnych a terciárnych konzumentov. Iba etho-agenti sú schopný generovať akcie. Každý agent má svoju schému, ktorá je súborom pravidiel, reprezentujúcich definíciu správania agenta. Akcia etho-agenta sa vypočítava aplikovaním pravidiel z jeho schémy k aktuálnemu životnému prostrediu a aktuálneho postavenia agenta. Etho-agent má viacero možností postavení. Každé postavenie je reprezentované dvojicou "symbol, celočíselné postavenie", ktorá definuje kvalitu aktuálneho postavenia agenta. Agenti reagujú iba na kvalitatívnu stránku ich postavenia. Etho-agenti sú unisexuálny, čo znamená, že existujú samce a samice. Každý agent môže interagovať s iným agentom, s producentmi a s envo-agentmi.


Ekosystém

Ekosystém LEM je rozdelený do mriežky miest. Každé miesto má štvorcový charakter, na ktorom môže byť niekoľko agentov všetkých troch kategórií. Značky nie sú na týchto miestach zobrazené, tie sú uložené oddelene od ostatných agentov. V LEM môžu agenti interagovať s inými agentami len vtedy, ak sú na rovnakých miestach v momente interakcie. Z topologického hľadiska je ekosystém dvojdimenzionálna plocha, alebo toroid. Túto možnosť možno nastaviť v menu Options|Topology. Ak je ekosystém dvojdimenzionálna plocha, tak všetci agenti, ktorí dosiahnu okraj ekosystému, zmenia svoje otočenie o 1800. Ak je ekosystém toroid, tak všetci agenti, ktorí dosiahnu okraj ekosystému zmiznú a objavia sa na opačnej strane ekosystému.

Veľmi dôležitou časťou ekosystému LEM je tabuľka pravidiel, ktorá špecifikuje patern interakcie medzi agentami a ich dôsledok. Táto tabuľka pravidiel priraďuje reakciu ku každej akcii ethoagenta. Producenti, ktorí v skutočnosti reprezentujú agentov a sú rozmiestnený na miestach, môžu prijímať mnoho reakcií počas jedného kroku. Celkový efekt aktuálnej reakcie producenta je daný sumou všetkých reakcií, ktoré agent prijal.

Agenti majú voľnosť pri výbere akcií, ktorú použijú a je daná podmienkami. Tabuľka pravidiel definuje úspech, alebo neúspech agenta. Takto je definované napätie, ktorému musí agent odolať. Tabuľka pravidiel je veľmi dôležitá pri vývoji ALife evolučných modelov. Týmto je daná príležitosť na štúdium evolúcie každej kategórie agentov pod rôznym typom enviromentálnych tlakov.


Typy modelov

Súčasný LEM podporuje štyri typy modelov. Typ modelu je špecifikovaný pomocou termu:

model_type(MODELTYPE1, MODELTYPE2)
MODELTYPE1 je jeden z simple alebo evolution
MODELTYPE2 je jeden z linear alebo cyclic

Term musí byť umiestnený v základnom modelovom súbore.

V modeli typu simple všetci etho-agenti zdieľajú jednu schému. Schéma môže byť preprogramovaná. Táto trieda modelu je pre individuálne založené simulácie ekologických systémov.

Ak MODELTYPE1 je evolučný, každý etho-agent má svoju vlastnú schému. Schéma sú pravidlá, ktoré definujú správanie agentov. V evolučných modeloch tieto pravidlá plnia úlohu chromozómov. Je to spôsob ako každý novonarodený etho-agent zdedí schémy od rodičov, potom ako tieto pravidlá prejdu procesom kríženia a mutácie.

MODELTYPE2 definuje reprezentáciu času v modeli. Lineárny čas je jednoducho celočíselná hodnota, ktorá znamená aktuálny krok v simulácii. V cyklických modeloch je možnosť reprezentácie období a periód dňa, napríklad ráno, noc, atď. Deň a rok sú rozdelené do niekoľkých hodnôt periód. Užívateľ môže špecifikovať zoznam týchto periód a ich trvanie.


Interakcia agentov s LEM ekosystémom

LEM na rozdiel od modelu SWARM má iba jeden presný program simulácie. Nazýva sa "Trial-Resolution-Result" TRR (Pokus-Rozhodnutie-Výsledok). Pokiaľ navrhujeme tento program, robíme reálnu dichotómiu medzi želaním jedinca a želaním jeho okolia v algoritmickom tvare.

Tu sú tri hlavé kroky algoritmu TRR:
V prvom kroku, všetci agenti vyberú akciu, ktorú zvážia ako najrelevantnejšiu k aktuálnej situácii. Akcia agentov môže byť tranzitívna (vo vzťahu k nejakému inému agentovi), alebo netranzitívna. Pri selekcii výber akcie a tvorby stojí nejaké úsilie vstúpiť do rôznych druhov interakcie s iným agentom.

V druhom kroku je definovaný aktuálny výsledok interakcie. V skutočnosti, interakcia jedincov v spoločnosti a smerom spoločnosti sú často sprevádzané protirečeniami rozhodnutí. V takomto jave, jednotlivci participujú do vzájomného pôsobenia a zaujímajú sa o protivníkove dôsledky interakcií. Tabuľka pravidiel je pripravená pre výsledky kontradikcie medzi individuálnym úsilím agentov. Táto tabuľka priraďuje určitú symbolickú, alebo numerickú hodnotu akcii jedinca, ktorou je vyvolaná reakcia. Reakcia môže znamenať úspech alebo neúspech na vykonanú akciu. To môže teda znamenať prírastok alebo stratu v hodnote niektorého parametra agenta.

V treťom kroku sa reálna územná pozícia a aktuálne postavenie agentov zmení podľa špecifického hodnotenia pre kombináciu akcie a reakcie.


Modely adaptácie poskytované systémom LEM

Súčasná verzia modelu LEM poskytuje dva modely adaptácie - Genetickú adaptáciu a Smerovú adaptáciu

Genetická adaptácia
Evolučné modely systému LEM (Pozri kapitolu 2.2) napodobňujú prirodzenú evolúciu. Genetická adaptácia je veľmi dôležitá pre ALife simulátory ciest adaptácie. V evolučných modeloch má každý etho-agent svoju vlastnú schému, ktorá predstavuje chromozómy v procese reprodukcie. Takto sa teda v procese evolúcie menia schémy agentov. Evolúcia schémy jedinca zaručuje evolúciu správania agenta.

Takto nám evolučné modely dovoľujú štúdiu evolúcie fyzických vlastností agentov. Hoci táto možnosť je implementovaná v súčasnej verzii systému LEM, nepojednáva o tejto téme.

Smerová adaptácia
Cyklické modely systému LEM (Pozri kapitolu 2.2), boli navrhnuté pre štúdium dennej pávej priestorovej migrácie jedincov a časovej adaptácie zvierat pri zmene prostredia. Toto je základom adaptácie, ktorá používa miesto počas života jedinca. Podstata smerovej adaptácie je nasledovná:

Každý agent má v pamäti preferovanú cestu. Cesta je sada trojíc "Časť dňa, Miesto, Váha". Časť dňa je jeden z termov dayandyear (Pozri kapitolu 2.2). Miesto špecifikuje samotné postavenie v ekosystéme. Váha je celé číslo, ktorá ukazuje ako je agent náchylný zostať na mieste v tomto čase.

Migrovanie agentov je uskutočnené podľa toho, aká je jeho vybratá cesta, keď agent vykoná akciu follow_route. Pokiaľ je táto akcia vykonaná, agent nasleduje najvyššou rýchlosťou na miesto, ktoré korešponduje so súčasným časom v agentovej ceste.

Štandardne váha miesta na trati sa pre aktuálny čas znižuje v každom kroku. Toto spôsobuje, že agenti majú tendenciu nasledovať danú cestu. Potrebné parametre sú definované termom route_update(integer DefaultDecrement, integer InitialWeight), ktorý sa uvádza pri špecifikácii etho-agentov.

Avšak každá akcia, môže ovplyvniť pozitívne alebo negatívne váhu súčasného postavenia, aj v prípade ak je to časť cesty. Veľkosť váhy sa znižuje alebo zvyšuje v odpovedi na partikulárnu kombináciu akcií a reakcií, ktoré môžu byť špecifikované etho-agentmi (Pozri kapitolu 2.5) v terme nondeterm staterule(SIGNATURE, IACTION, REACTION, SDELTAS). Term d(0, Incr), člen zoznamu SDELTAS špecifikuje váhu zvýšenia Incr v odpovedi na IACTION a REACTION. Členy d(N, Incr) zoznamu SDELTAS špecifikujú prírastok N-tého postavenia v odpovedi na IACTION a REACTION. Váha aktuálneho miesta sa udáva ako špeciálna virtuálna s číslom 0.

Ak váha miesta poklesne pod hodnotu 0, miesto je odstránené z cesty.

Ak v priebehu kroku poklese váha miesta na trati pre aktuálny čas na nulu, potom je vytvorené nové miesto pre aktuálny čas a umiestnenie. Toto miesto bude mať strednú hodnotu váhy.

Adaptácia modelu cesty je naprogramovaná pre štúdium miestneho správania sa. Je relevantná k štúdiu odhadov environmentálnych zásahov, ak efekt environmentálnych zmien môže byť hodnotený na lokálnom rozmiestnení zvierat.

Iné formy adaptácie, ako napríklad "reinforcement learning" by mohli byť implementované do modelu LEM. TRR algoritmus robí model LEM špeciálne vhodným pre štúdium učenia z prostredia.


Špecifikácia modelu LEM

Modely programu LEM, alebo šablóny modelov sú špecifikované pomocou textového editora v špeciálnom jazyku "Model Specification Language" - MSL. V tomto momente je jazyk konzistentný s termami programu Visual Prolog. Na načítanie a ukladanie modelov používa LEM také isté predikáty ako Visual Prolog Data Base. Každý model má jedinečný súbor s príponou .md, ktorá ukladá odkazy na nastavenie súborov použitých pre špecifikáciu agentov a pravidiel prírody pre ekosystém. Okrem toho model ukladá každý term, ktorý špecifikuje typ modelu, veľkosť ekosystému a znaky v časových cykloch. Jedna šablóna modelu môže byť použitá s rôznymi spôsobmi nastavenia parametrov simulácie, rôznymi nastavenia agentov a rôznymi možnosťami pre databázu a tracer vzorov.

O jazyku MSL
Súborový systém programu LEM
Špecifikácia Envo-agentov
Špecifikácia producentov
Špecifikácia Etho-agentov
Špecifikácia pravidiel
Niektoré poznámky k pravidlám prispôsobovania
Uloženie a nahranie populácie


O jazyku MSL

Syntax jazyka MSL je ovplyvnená štruktúrou vnútorného databázového systému jazyka Visual Prolog. Tento jazyk bol vyvinutí ako provizórny. Posledný vývoj paradigmy "Logic Modeling" priniesol tlak na užitočnosť logickej syntaxe, ale predtým by bolo žiadúce vyvinúť sériu príkladov logicky založených modelov ekosystému, ktoré by pomohli identifikovať oblasť potreby, s ktorou sa musí paradigma "Logic Modeling" stretnúť.

Jazyk MSL používa tieto dátové typy:

Celočíselné typy
integer
short
long
ulong

Reálne typy
real

Reťazcové typy
symbol
string

Komplexné typy
modálny operátor
konjunkcia
term

Premenné
Jazyk MSL podporuje dva typy premenných. Premenné, ktoré sú použité pre agentov v definícii schém a tabuľky pravidiel a časové premenné, ktoré sú použité na označenie časového momentu vo vzorkách.

Všetky príkazy jazyka sú termy. Sú podriadené týmto obmedzeniam:
  1. Na konci súboru nesmú byť žiadne biele znaky
  2. Každý príkaz je definovaný v jednom riadku

MSL nepodporuje žiadnu bodkovú notáciu pre oddelenie príkazov.

Napriek tomu, že jazyk MSL má silný typový systém, nie je žiadne miesto v modeli, kde by sme mohli definovať vlastné typy. Jazyk MSL má svoj vlastný slovník predefinovaných termov s predefinovanými typmi argumentov. Pri používaní termu si jeho syntax musí užívateľ uvedomiť, alebo konzultovať so súborom pomocníka v procese vývoja modelu.

Tento pomocník poskytuje popis všetkých predefinovaných termov, ktoré môžu byť použité v špecifikácii modelu. Počas nasledujúcich kapitol budeme používať kľúčové slovo nondeterm na označenie termov, ktoré môžu vystúpiť niekoľkokrát (s rôznymi parametrami), ale musia vystúpiť aspoň raz. Kľúčové slovo determ označuje termy, ktoré môžu v definícii vystúpiť iba raz, alebo ani raz. Kľúčové slovo compulsory N označuje term, ktorý sa musí v definícii vyskytovať práve N-krát.

Každý argument komplexného termu patrí určitej doméne. Pre špecifikáciu termov a domén sme v tomto manuáli použili nasledovnú notáciu.

KEYWORD functor(Type1 Arg1, Type2 Arg2, ..., TypeM ArgM)
KEYWORD je jedno z označení determ, nondeterm, compulsory N.
TypeM ArgM je špecifikácia M-tého argumentu termu. Ak TypeM je komplexného typu môže mať alternatívne šablóny. Pre špecifikáciu všetkých alternatív používame zápis TypeM = Alt1; Alt2; ...; AltK, kde Alt1; Alt2; ...; AltK sú typové identifikátory.

TypeC = ModOpType * označuje, že TypeC je konjunkciou modálnych operátorov, ktoré prislúchajú typu identifikovaného ako ModOfType. Spôsob zápisu typu TypeC vyzerá nasledovne: [Term1, Term2, ..., TermN], kde Term1, Term2, ..., TermN sú termy prislúchajúce typu ModOfType.
Types = Type * teda znamená, že Types je zoznam termov prislúchajúcim k typu Type.


Súborový systém programu LEM

Špecifikácia modelu je uložená v súbore s príponou ".md". Špecifikácia obsahuje smerníky na iné súbory, ktoré obsahuje model. Kompletná špecifikácia modelu potrebuje jeden ".md" súbor, v ktorom je špecifikovaný model, jeden ".lw" súbor, v ktorom sú špecifikované pravidlá pre aktuálny model. Môže ešte vkladať jeden alebo viac ".esp" súborov, ktorými definujeme rozdielne špecifikácie etho-agentov, jeden ".prs" súbor špecifikujúci všetkých producentov, ktorí majú byť vložený do modelu a jeden ".ens" súbor, ktorý špecifikuje všetky typy okolitých agentov v modeli.

".md" súbor má nasledujúci formát:
compulsory 1 ecosystem(integer Width, integer High, integer SiteSize)
compulsory 1 model_type(MODELTYPE1, MODELTYPE2)
compulsory 1 thelaw(string Filename)
nondeterm ethospecie(string Filename)
determ producerspecies(string Filename)
determ envospecies(string Filename)
determ agents(string Filename)
determ dayandyear(long PerLgth, symbollist DayTimeList, long SeasLgth, symbollist SeasonList)
determ patterns(string FileName)

Povinný term, ktorý sa musí v špecifikácii vyskytovať práve raz, ecosystem(integer Width, integer High, integer SiteSize) poskytuje špecifikáciu pre šírku, výšku a veľkosť ekosystému. SiteSize je dimenzia jedného miesta v mriežke. Jedna jednotka SiteSize je jeden pixel na obrazovke. Width a High sú šírka a výška ekosystému počítaná v počtoch miest. To znamená, že ak SiteSize = 20, Width = 50 a High = 25, tak šírka ekosystému je 1000 a výška 500 jednotiek.

Povinný term, ktorý sa musí v špecifikácii vyskytovať práve raz, model_type(MODELTYPE1, MODELTYPE2) poskytuje špecifikáciu pre typ modelu. Formát argumentov je nasledovný:
MODELTYPE1 = simple; evolution
MODELTYPE2 = linear; cyclic

Povinný term, ktorý sa musí v špecifikácii vyskytovať práve raz, thelaw(string Filename) špecifikuje meno a umiestnenie súboru, v ktorom sú špecifikované pravidlá. Meno súboru musí mať príponu ".lw". Meno súboru môže byť udané absolútnou alebo relatívnou cestou. Relatívna špecifikácia cesty je preferovaná, pretože prenos modelu na iný počítač je jednoduchší.

Povinný term, ktorý sa môže vyskytovať viackrát, ethospecie(string Filename) špecifikuje meno a umiestnenie súboru, ktorý udáva špecifikáciu etho-agenta. Súbor musí mať príponu ".esp". Každý etho-agent je definovaný vo vlastnom súbore.

Nepovinný term producerspecies(string Filename) špecifikuje meno a umiestnenie súboru so špecifikáciou producentov ekosystému. Súbor musí mať príponu ".prs".

Nepovinný term envospecies(string Filename) špecifikuje meno a umiestnenie súboru so špecifikáciou envo-agentov. Súbor musí mať príponu ".ens".

Nepovinný term agents(string Filename) špecifikuje meno a umiestnenie súboru, ktorý špecifikuje agentov a musí mať príponu ".ag".

Nepovinný term dayandyear(long PerLgth, symbollist DayTimeList, long SeasLgth, symbollist SeasonList) ukladá argumenty, ktoré špecifikujú dni a roky.
symbollist = symbol *

Nepovinný term patterns(string FileName) obsahuje meno a umiestnenie súboru, v ktorom sú špecifikované vzorky. Súbor musí mať príponu ".pt".

Príklady špecifikácie modelov v programe LEM:
A. Lineárny model
model_type(simple, linear)
thelaw("C:\\VIP\\Lem\\first\\EXE\\PrayPred\\PrPrLaw.lw")
ethospecie("C:\\VIP\\Lem\\first\\EXE\\PrayPred\\predator.esp")
ethospecie("C:\\VIP\\Lem\\first\\EXE\\PrayPred\\pray.esp")
producerspecies("C:\\VIP\\Lem\\first\\EXE\\PrayPred\\producer.prs")
ecosystem(25, 13, 20)

B. Cyklický model
helaw("ROUTE\\LAW.LW")
ethospecie("ROUTE\\PFOWL.ESP")
ethospecie("ROUTE\\WILDCAT.ESP")
producerspecies("ROUTE\\FOOD.PRS")
envospecies("ROUTE\\ENV-AGENTS.ENS")
agents("ROUTE\\PRODLMKS.AG")
ecosystem(25, 13, 20)
model_type(simple, cyclic)
dayandyear(20, ["night", "sunrise", "morning", "early_noon", "late_noon", "sunset"], 600, ["winter", "spring", "summer", "rainy"])

Distribúcia špecifikácie modelu do viacerých súborov má svoje výhody ale aj nedostatky. Najdôležitejšia výhoda je, že šablóny agentov sú znova použiteľné. Jeden súbor môže byť simultánne používaný viacerými rôznymi modelmi.


Špecifikácia Envo-agentov

Všetci envo-agenti sú špecifikovaný v jednom súbore s príponou ".ens". Súbor musí mať nasledujúci formát:
nondeterm envo_shape(string SpName, string Shape, COLOR)

Argument SpName je názov envo-agenta.

Argument Shape je značka, s ktorou bude agent vystupovať v modeli a ktorou bude zobrazený na obrazovke.

COLOR je špecifikácia farby ako štandartná šablóna RGB známa z HTML formátu. Je to konvencia používania hexadecimálnych čísel v šablóne. Toto sú príklady farieb:
0x0000FF - červená
0x00FF00 - zelená
0xFF0000 - modrá

Nasledujúci príklad je špecifikáciou envo-agenta:
envo_shape("building", "H", 0x000000)


Špecifikácia producentov

Všetci producenti ekosystému sú špecifikovaný v jednom súbore s príponou ".prs". Formát tohto súboru je nasledovný:
nondeterm producer_sp(string SpName, string Sign, COLOR, real GrowthRate, real Biomass)

Argument SpName je názov producenta.

Argument Sign je značka, pod ktorou bude producent vystupovať v modeli systému LEM.

Argument COLOR je farba, pod ktorou bude producent vystupovať v modeli ekosystému. Táto farba nie je v hexadecimálnom kóde, ale v desiatkovom.

Argument GrowthRate označuje koľko biomasy pribudne producentovi v priebehu jedného kroku.

Argument Biomass reprezentuje biomasu producenta, s ktorou vstupuje do modelu systému LEM.

Nasledujúci príklad je špecifikáciou producenta:
producer_sp("w", "w", 65280, 0.00001, 100)
producer_sp("tree", "T", 65280, 0.00000001, 10000)


Špecifikácia Etho-agentov

Každý etho-agent je špecifikovaný v osobitnom súbore s príponou ".esp". Takto vyzerá formát súboru:
compulsory 1 name(string SpName)
compulsory 1 number_of_states(short NofStates)
compulsory NofStates state(short, STATEMAP)
compulsory 1 shape(string, COLOR)
compulsory 1 speed(integer Speed)
determ route_update(integer StepDecrement, integer ValueAfterCreation)
compulsory 1 pregnancy(integer Duration, short NumberOfChilds)
determ lhs_mutations(SOBJECTS)
determ rhs_mutations(IACTIONS)
nondeterm schema(short RuleNumber, SOBJECTS Conditions, IACTION Action)
nondeterm staterule(SIGNATURE, IACTION Action, REACTION, SDELTAS

Term name(string SpName) špecifikuje meno druhu.

Term number_of_states(short NofStates) špecifikuje počet rôznych stavov, ktoré sú definované pre druh vmodeli.

Term state(short, STATEMAP) definuje mapovanie z celočíselných hodnôt stavov na korešpondujúcu symbolickú hodnotu. Definícia STATEMAP je nasledovná:
STATEMAP = STATESCALE *
STATESCALE = s(integer From_Value, interger To_Value, symbol Quality)
Výraz s(integer From_Value, interger To_Value, symbol Quality) hovorí, že ak hodnota daného stavu sa pohybuje v intervale From_Value a To_Value, tak Quality korešponduje s kvalitatívnou hodnotou premennej.

Term shape(string, COLOR) špecifikuje vzhľad agentov, ktorý náleží danému druhu. Prakticky môže mať tvar agenta iba jeden znak. COLOR je farba druhu. Táto farba je zadaná v desiatkovom kóde.

Term speed(integer Speed) špecifikuje priemernú rýchlosť agenta v jednotkách za jeden krok.

Term route_update(integer StepDecrement, integer ValueAfterCreation) musí byť zadaný iba v prípade cyklických modelov.

Term pregnancy(integer Duration, short NumberOfChilds) špecifikuje dobu tehotenstva a počet potomkov bežných pre druh. Všetky tehotenstvá prinesú rovnaký počet potomkov.

Špecifikácia schém: Term schema(short RuleNumber, SOBJECTS Conditions, IACTION Action) je základ špecifikácie etho-agenta. Nastavenie tohto termu špecifikuje správanie daného druhu. Tento term používa dva komplexné typy SOBJECTS a IACTION. Schéma ako obyčajne má skupinu premenných. MSL má jednu charakteristickú črtu, na ktorú treba upozorniť. V špecifikácii schémy, čísla sú použité ako premenné mená. Čísla teda referujú na postavenia etho-agenta. Občas to môže vytvoriť neporiadok.

V inštancii nasledujúceho termu schema(2, [state(1, "sexy"), opt_sx(1, "&")], act2("matting", 1)) sa používa číslo 1 ako referencia na prvý stav agenta (state(1, "sexy")) a tiež pre referenciu na stav nejakého agenta, ktorý je situovaný na tej istej pozícii (v operátore opt_sx(1, "&")). V RHS act2("matting", 1) číslo 1 označuje meno agenta. Efekt tohto termu je teda nasledovný:

Agent sa pokúsi splniť podmienky v LHS s vnútorným stavom a stavom prostredia. Ak je to možné, tak sa pokúsia uskutočniť akciu špecifikovanú v RHS. V našom prípade act2("matting", 1) má premennú "1". Ak LHS je splnené, tak premenná bude referovať na agenta referovaného v LHS prostredníctvom premenných s rovnakým menom "1".

Pri použití tejto notácie by si mal užívateľ pamätať typy argumentov termov, ktoré boli použité pre špecifikáciu stavov a akcií. Tu je špecifikácia:

SOBJECTS je konjunkcia modálnym operátorov, ktoré patria k typu SOBJECT.

SOBJECTS = SOBJECT *

SOBJECT = obj(short AgentVar, string SpName); near(short AgentVar, string SpName); far(short AgentVar, string SpName); opt_sx(short AgentVar, string SpName); sm_sx(short AgentVar, string SpName); mysx(SEXX); myact(IACTION); state(short StateN, symbol StateQuality), sound(short AgentVar, string sound); leader_far; hasleader; dtime(symbol DTime); season(symbol Season); dtimestart(symbol DTime); seasonstart(symbol Season); dtimeto(integer); seasonto(integer)

IACTION = act1(symbol Action); act2(symbol Action, short AgentVar); follow_route; none; any; soundact1(string Sound, symbol Action); soundact2(string Sound, symbol Action, short AgentVar)

Nastavenie hodnôt pre premennú Action je predefinované.

Tu je množina voliteľných termov kategórii act1(symbol Action), ktorá špecifikuje netranzitívne akcie:
act1("forward")
act1("movel")
act1("movell")
act1("mover")
act1("moverr")
act1("moverandom")

Tu je množina voliteľných termov kategórii act2(symbol Action, short AgentVar), ktorá špecifikuje tranzitívne akcie:
act2("runfrom", AgentVar)
act2("approach", AgentVar)
act2("fight", AgentVar)
act2("follow", AgentVar)
act2("threaten", AgentVar)
act2("attack", AgentVar)
act2("eat", AgentVar)
act2("matting", AgentVar)

Súbor hodnôt pre Action v soundact1(string Sound, symbol Action) je rovnaký ako v act1(symbol Action). Množina hodnôt pre soundact2(string Sound, symbol Action, short AgentVar) je rovnaká ako pre act2(symbol Action, short AgentVar). Sound môže byť hocijaký reťazec. Nie je nutné špecifikovať všetky termy pre soundact1(string Sound, symbol Action) a soundact2(string Sound, symbol Action, short AgentVar)

Tu sú dva príklady schém:
schema(1 [obj(1, "m")], act2("runfrom", 1))
Ak nejaký objekt (agent) druhu "m" je postavený na tom istom mieste ako daný agent, daný agent ujde od tohto objektu.

schema(2, [state(2, "sexy"), opt_sx(1, "&")], act2("matting", 1))
Ak hodnota postavenia druhého agenta je "sexy", a na tomto mieste je agent 1 opačného pohlavia, ktorý patrí k druhu "&" (predpokladajme toho istého druh), tak sa agent posúsi spáriť s agentom 1.

Špecifikácia postavenia tabuľky pravidiel: Postavenie tabuľky pravidiel definuje modifikáciu postavenia premenných agentov, závislých od akcií agenta a reakcií okolia na túto akciu. Povinný term, ktorý musí vystúpiť aspoň raz staterule(SIGNATURE, IACTION Action, REACTION, SDELTAS) je použitý na tento účel.

REACTION = ok; bad; death; loss(short); income(short)

SDELTAS = SDELTA *
SDELTA = d(short StateNumber, integer StateUpdate)

SIGNATURE = sig(short, string); any

Term d(short StateNumber, integer StateUpdate) definuje inkrementáciu respektívne dekrementáciu postavenia s číslom StateNumber, ktoré musí nevyhnutne spájať akciu Action. Postavenia sú číslované od 1 vyššie. Číslo 0 je rezervované pre referenciu inkrementácie respektívne dekrementácie váh aktuálnej postupnosti ciest. Teda term d(0, N) sa môže vyskytnúť iba v cyklických modeloch.

Tu je príklad postavenia pravidiel:
staterule(any, act2("eat", 1), income(10), [d(1, 10), d(2, 7)])
Ak agent konzumuje tam kde iný agent a dostane reakciu income(10), tak prvé postavenie premennej bude inkrementované o 10 a druhé o 7 jednotiek.

Termy lhs_mutations(SOBJECTS) a rhs_mutatins(IACTIONS) definujú rozsah mutácie podmienok a akcií schémy. Oba tieto termy sa môžu objaviť iba v evolučných modeloch.

SOBJECTS = SOBJECT *

IACTIONS = IACTION *

Nasleduje kompletný príklad špecifikácie etho-agenta:
name("&")
number_of_states(2)
state(1, [s(100, 150, "high"), s(50, 101, "good"), s(30, 51, "normal"), s(10, 31, "low"), s(0, 11, "bad)])
state(2, [s(0, 50, "neutral"), s(49, 70, "sexy")])
shape("&", 70081736)
speed(6)
pregnancy(5, 4)
lhs_mutations([obj(1, "&"), obj(1, "m"), obj(2, "&"), near(1, "&"), far(1, "&"), opt_sx(1, "&")])
rhs_mutations([act1("forward"), act1("movel"), act1("movell"), act1("mover")])
schema(1, [obj(1, "m")], act2("runfrom", 1))
schema(2, [state(2, "sexy"), opt_sx(1, "&")], act2("mating", 1))
schema(3, [obj(1, "w")], act2("eat", 1))
schema(4, [obj(1, "w")], act2("eat", 1))
schema(5, [state(2, "sexy"), opt_sx(1, "&")], act2("mating", 1))
schema(6, [state(1, "good")], act1("moverandom"))
schema(7, [obj(1, "w")], act2("eat", 1))
schema(8, [obj(1, "m")], act2("runfrom", 1))
schema(9, [state(1, "good")], act1("moverandom"))
schema(10, [], act1("movel"))
staterule(any, act2("eat", 1), income(10), [d(1, 10), d(2, 7)])
staterule(any, act2("mating", 1), ok, [d(1, -3), d(2, -40)])
staterule(any, act1("any"), any, [d(1, -1), d(2, 3)])


Špecifikácia pravidiel

Pravidlá musia byť špecifikované v súbore s príponou ".lw". Formát špecifikácie pravidiel je nasledovný:
compulsory 1 species(SPLISTS)
nondeterm rule(LAWLHS LHS, LAWRHS RHS)

Nasleduje rekurzívny popis domén, ktoré sú relevantné k špecifikácii pravidiel:

SPLISTS = SPLIST *
SPLIST = String *
SPLISTS je zoznam troch zoznamov. Prvý obsahuje vymenovanie všetkých druhov etho-agentov, druhý producentov ekosystému a tretí envo-agentov.

LAWLHS = LAWL *
To znamená, že LAWLHS je zoznam termov, ktoré patria do domény LAWL. LAWLHS je teda zoznam predpokladov, ktoré je nutné splniť, aby sa dané pravidlo vykonalo.
LAWL = obj(short AgentVar, string SpName); action(short AgentVar, string SpName, IACTION); sx(short AgentVar, SEXX); near(short AgentVar, short AgentVar); far(short AgentVar, short AgentVar); sig(short AgentVar, short Position, string Substring)

LAWRHS je naproti LAWLHS dosledkova cast pravidla.
LAWRHS = s(REACTLIST TheOnlyAlternative); case(real ProhabilityOfFirst, REACTLIST FirstAlternative, REACTLIST SecondAlternative)
REACTLIST = REACT *
REACT = re(short, REACTION)
REACTION = ok; bad; death; loss(short); income(short)

Toto je príklad špecifikácie pravidiel:
species([["&", "m"], ["w"], []])
rule([obj(2, "w"), action(1, "&", act2("eat", 2))], s([re(1, income(10)), re(2, loss(10))]))
rule([action(1, "m", act2("atack", 2)), obj(2, "&"), far(1, 2)], s([re(1, bad), re(2, ok)]))
rule([action(1, "m", act2("atack", 2)), obj(2, "&"), near(1, 2)], s([re(1, income(100)), re(2,death)]))
rule([action(1, "m", act2("atack", 2)), obj(2, "&")], case(0.3, [re(1, income(100)), re(2, death)], [re(1, bad), re(2, ok)]))
rule([action(1, "&", any)], s([re(1, ok)]))
rule([action(1, "m", any)], s([re(1, ok)]))


Niektoré poznámky k pravidlám prispôsobovania

Aj napriek tomu ako veľmi je program LEM založený na systéme pravidiel, šablóny prispôsobovania stratégií sú veľmi dôležitou súčasťou architektúry systému LEM. V skutočnosti má LEM tri kompletné rôzne šablóny prispôsobenia podsystémov s rôznymi šablónami prispôsobovania algoritmu. Prvú používajú etho-agenti, druhá je použitá na prispôsobovanie pravidiel v tabuľke pravidiel a tretia je použitá v šablóne pre prispôsobovanie šablón s dátami v databáze.

Algoritmy prispôsobovania pravidiel sú nasledujúce:

Pre etho-agentov: Pravidlá sú skúšané rad za radom, od vrchu po spodok, od najnižšieho čísla pravidla k vyšším. Ak pravidlo môže byť splnené, tak je odpálené a nie je žiadne úsilie na vykonanie iných pravidiel, alebo nájdenie alternatívneho pravidla k aktuálnemu pravidlu. To spôsobí, že sa agent snaží splniť akciu špecifikovanú v RHS pravidla, ktoré bolo odpálené.

Pre pravidlá: Tabuľka pravidiel je aplikovaná na každé miesto ekosystému. Všetky pravidlá sú vykonávané zhora nadol. Pre každé pravidlo sa systém snaží identifikovať všetky možné prispôsobenia. Keď je prispôsobenie nájdené, systém zálohuje reakciu špecifikovanú v RHS pravidla pre aktuálne miesto. Úlohou tohto algoritmu je, aby sa špecifikovali všetky možné interakcie v ekosystéme, ktoré boli špecifikované v šablóne v tabuľke práv.

Prispôsobovací algoritmus pre šablóny vzorov nájde všetky možné prispôsobenia pre šablónu a vráti čísla prispôsobení. Ak je v menu položka Options | Store Patterns in DataBase zaškrtnutá, a existuje otvorená databáza, potom každá inštancia prispôsobenia bude uložená v databáze.


Uloženie a nahranie populácie

Naposledy vytvorená šablóna modelu ekosystému obsahuje minimum funkcií, ktoré sú potrebné na zaľudnenie agentmi danej špecifikácie. Toto môžu byť druhy producentov, envo-agentov alebo etho-agentov špecifikovaných v ".lw" súbore. Niekedy požadovaná populácia agentov je vytvorená pomocou GUI, pretože môžu byť uložené v rôznych obdobiach. Pre toto používame položku Model | Save Agents a potom špecifikujeme súbor s príponou ".ag".

Pri ukladaní agentov je uložená iba územná špecifikácia agentov . Formát uloženia agentov do súboru je nasledovný:
ag(string Type, string SpecName, integer X, integer Y)
Každý term je použitý pre uloženie informácie o etho-agentoch, producentoch, alebo envo-agentoch a ich umiestnení v priestore.

Populácia agentov je ukladaná v ".ag" súboroch, ktoré môžu byť nahrané v modeloch, ktoré majú nastavené identifikovanie druhov podľa mien, ktoré sa vyskytujú v ".ag" súbore.

Súbor s agentmi môže byť pripojený k šablóne modelu a v tomto prípade bude agent automaticky nahraný po nahraní nového modelu alebo znovunahraní aktuálneho modelu. Na pripojenie agentového súboru k aktuálne nahranému modelu sa používa v položke menu Model | Add | Agents.

V lineárnych modeloch sú agenti vytváraný pomocou GUI. Na vytvorenie agentov, najskôr vyberte druh pomocou menu Introduce a potom kliknite na obrazovku, kde chcete agenta umiestniť.

V cyklických modeloch na vstup populácie etho-agentov slúži ".ag" súbor, ale nevytváraný pomocou GUI. Na vytvorenie populácie etho-agentov v cyklických modeloch užívateľ musí najskôr zaviesť pomocou GUI (alebo načítať zo súboru) množinu značiek prostredia, ktoré predstavujú špecifikáciu cesty etho-agentov v dennej migrácii. Agenti a ich denná migrácia sú špecifikované v súbore s príponou ".ag", ktorý má nasledujúci formát:
ag_route(string Specie, string RouteName)
route(string RouteName, ROUTE)
Doména ROUTE je definovaná nasledovne:
ROUTE = RSITE *
RSITE = s(symbol DayTime, string LandmarkName)
Časová perióda je jeden zo symbolov, ktorý je uvedený v špecifikácii aktuálneho modelu termom
dayandyear(long, Symbollist DayTimeList, long, Symbollist SeasonList)
Envo-agenti, producenti a značky v prostredí v cyklických modeloch sa používajú rovnako ako v lineárnych modeloch.


Vizuálne rozhranie

Editor
Menu model
Menu Introduce
Menu Run
Plávajúce menu pre okno modelu


Editor

Editor programu LEM vytvára čisté textové súbory. Na rozdiel od programu Notepad, môže spracovávať ASCII súbory akejkoľvek dĺžky. Editor programu LEM má množinu funkcií typických pre editovacie programy systému Windows. Menu File a Edit sú tiež pripojené k programu. Menu funguje rovnako ako v ostatných programoch pre Windows. Napríklad uloženie textu z editora vyvoláme pomocou menu File | Save. Menu File | New vytvorí nový prázdny súbor.

Úprava textu obsahuje funkcie Undo, Redo, Cut, Copy, Paste a Delete pre patričné funkcie.

Základné položky menu editora reprezentuje aj toolbar. Tieto sú prístupné aj pomocou plávajúceho menu, keď užívateľ klikni pravým tlačidlom myši na textové okno.


Menu model

Menu model obsahuje množinu položiek pre interaktívny vývoj modelu. Na vytvorenie nového modelu užívateľ musí vytvoriť novú šablónu , pripojiť súbor ktorý špecifikuje pravidlá a druhy agentov. Je samozrejmé, že súbory ktoré špecifikujú pravidlá a druhy musia byť vytvorené. Avšak nedeterministické termy špecifikácie, môžu byť špecifikované viackrát. Potom ako je takto šablóna pripravená, je možné ju uložiť do ".md" súboru.

Menu Model má nasledujúce položky:

Model | New Template je použitá na vytvorenie novej šablóny modelu. Je vytvorený ekosystém s minimálnym počtom funkcií. Avšak nie je postačujúci, pretože nemá pripojené pravidlá a druhy. Typ modelu je však špecifikovaný. K asociovaniu pravidiel a jednotlivých druhov agentov s daným ekosystémom, užívateľ môže použiť funkcie možné v menu Model | Add Menu.

Model | Add vyvolá ďalšie podmenu, zložené z:

    Model | Add | The Law pripojí pravidlá k novému modelu, ktoré sú špecifikované v súbore s príponou ".lw". To automaticky nastaví pravidlá v akciách pre novú šablónu.

    Model | Add | Ethospecie pripojí súbor s druhom etho-agenta do posledne vytvorenej šablóny. Toto teda nahrá etho-agentov do ekosystému. Po tomto, etho-agenti ktorí patria k nahranému druhu, sa môžu zaviesť do ekosystému.

    Model | Add | Producer Specie pripojí druhy producentov špecifikovaných v súbore s príponou ".prs" do posledne vytvorenej šablóny. Všetky druhy producentov sú uložené v jednom súbore. Po tomto môžu byť producenti, ktorí patria k nahranému druhu, zavedení do ekosystému.

    Model | Add | Envospecie pripojí druhy envo-agentov, špecifikovaných v súbore s príponou ".ens". Všetky druhy envo-agentov sú špecifikované v jednom súbore. Po tomto envo-agenti, ktorí patria k nahranému druhu, môžu byť zavedení do ekosystému.

    Model | Add | Agents pripojí existujúcich agentov z predchádzajúceho modelu, ktorí sú uložení v súbore s príponou ".ag".

    Model | Add | Pattern Library pripojí existujúcu knižnicu šablóny vytvorenú pomocou editora a uloženú v súbore s príponou ".pt".

Model | Save Model uloží naposledy vytvorený model do súboru s príponou ".md" vo forme, aby k nemu bol prístup v budúcnosti.

Model | Save Agents uloží agentov v populácii ekosystému do súboru s príponou ".ag". Uloží iba aktuálne miesto agenta, ale nie schému agenta. Teda, keď je agent neskôr načítaný, je vlastne vytvorený nový agent na danom mieste.

Model | Load Model načíta model zo súboru s príponou ".md".

Model | Reload Model znovunačíta model, ktorý je práve načítaný.

Model | Load Agents načíta agentov zo súboru s príponou ".ag".

Model | Start DataBase vyvolá dialóg, ktorý ponúkne užívateľovi miesto na vytvorenie databázy. Databáza môže byť držaná v súbore, alebo pamäti RAM. Variant voľby vytvorí databázu na zvolenom mieste. Po tomto sa daná položka menu zmení z Start DataBase na Stop DataBase. Táto je použitá na zmazanie aktuálnej databázy.

Model | Save DataBase uloží databázu do súboru s príponou ".db".

Model | Open DBase File otvorí uloženú databázu v súbore s príponou ".db".

Model | DataBase Query vyvolá dialóg pre zadanie otázky.

Poznámka: Potom ako užívateľ uloží šablónu modelu do modelového súboru, tento môže byť editovaný viacerými spôsobmi. Niektoré dôležité termy ako model_type a dayandyear musia byť špecifikované manuálne pomocou textového editora.


Menu Introduce

Menu Introduce sprístupňuje užívateľovi vybratie partikulárneho druhu agenta a priradiť ho do aktuálneho modelu. Toto sa deje oddelene pre tri základné kategórie agentov pomocou menu Introduce | Ethoagent, Introduce | Producer a Introduce | Envoagent. Je tu ešte možnosť pre vytvorenie alebo zmazanie značiek trasy pomocou menu Introduce | Landmark a Introduce | Delete Landmark. Po vybratí druhu agenta užívateľ klikne ľavým tlačidlom myši do okna modelu, aby vytvoril nového agenta vybraného druhu na pozíciu, na ktorú ukazuje kurzor.


Menu Run

Menu Run sa používa keď je ekosystém alebo model so všetkými agentmi vytvorený alebo načítaný.

Run | Run spustí model simulácie pre nedefinovane dlhé obdobie.

Run | Stop po spustení simulácie pomocou menu Run | Run je týmto príkazom možné simuláciu zastaviť.

Položky Run | Step 1, Run | Step 10 a Run | Step 100 spustí simuláciu pre špecifikovaný počet krokov.


Plávajúce menu pre okno modelu

Kliknutím pravým tlačidlom myši na okno modelu sa vyvolá plávajúce menu. Toto menu špecifikuje operácie použité pri debugovaní modelu. Mená položiek sú samovysvetľujúce. Výstup sa zobrazuje v okne správ, alebo v oddelenom textovom okne.


Databáza a podsystém tracovania vzorov

Funkčnosť databázy programu LEM
Konfigurácia databázy
Databázové otázky
Tracer vzorov
Ploter


Funkčnosť databázy programu LEM

LEM má vnútorný databázový systém, ktorý povoľuje ukladanie najdôležitejších elementov simulácie. Databáza sa môže nachádzať v pamäti RAM alebo na harddisku. Možnosť umiestnenia databázy by mala byť závislá od aktuálnej konfigurácie. Ukladanie populácie, štatistika narodenia a úmrtia nevyžadujú mnoho miesta a pokiaľ sú vybraté iba tieto možnosti je možné umiestniť databázu do pamäti RAM. Ostatné možnosti potrebujú značné množstvo miesta.

Databáza môže byť vytvorená vybratím položky menu Model | Start DataBase. Potom ako sa databáza vytvorí, menu položky sa zmení na Model | Stop DataBase. Túto položku menu môže užívateľ dosiahnuť aj z tlačidla na lište toolbar. Je možné vytvoriť databázu pred vytvorením alebo načítaním modelu, hneď po vytvorení alebo načítaní, alebo počas simulácie. Prvá možnosť je odporúčaná.

Databáza s uloženými výsledkami simulácie môže byť uložená v súbore a použitá na inom počítači v iný čas pomocou menu Model | Save DataBase.


Konfigurácia databázy

Databáza môže byť konfigurovaná z menu Options. Zoznam možných položiek menu je samovysvetľujúci. Na pochopenia každej možnosti lepšie, užívateľ by mal použiť položku menu Display | DataBase, kde je výstup kompletne zobrazený na obrazovke. Je možné konfigurovať databázu pred vytvorením, tesne po vytvorení a počas simulácie. Prvá možnosť je odporúčaná.


Databázové otázky

Databázové otázky môžu byť položené pomocou položky menu Model | DataBase Query. Túto položku je možné aktivovať aj z lišty toolbar. Po vybratí tejto položky sa zadáva otázka do špeciálneho dialógového okna. Tu je zoznam predefinovaných termov otázok:

Term showagent(ulong AgId) zobrazí všetky možné statické dáta týkajúce sa agenta s ID AgId.

Term agents(ULONGLIST AgIds) zobrazí všetky možné statické dáta týkajúce sa agentov s ID v AgIds.
ULONGLIST = ulong *

Term agenthistory(ulong AgId) zobrazí správu s viac detailmi týkajúcich sa agenta s ID AgId. Výstup všetkých akcií, vnímanie agenta, pokiaľ je možné.

Term pattern(string PattName) vytvorí výstup všetkých dôležitých inštancií vzoru identifikovaného pomocou PattName.

Term interaction(string PattName, short AgVarPosition) vytvorí výstup všetkých dôležitých inštancií paternu identifikovaného pomocou PattName a ktorý sa nachádza vo vzťahu k agentovi identifikovaného pomocou AgVarPosition.

Term champion(string PattName, short AgVarPosition) zobrazí informácie o agentovi, ktorý má maximum interakcií identifikovaných paternom s menom PattName, ktorý sa nachádza v úlohe identifikovanej pomocou AgVarPosition

Term next môže byť vybraný po vykonaní termu champion(string PattName, short AgVarPosition). Zobrazí agenta, ktorý nasleduje za najlepším agentom v počte iterácií.

Poznámka: Posledné štyri termy môžu byť použité iba po tracovaní vzoru so zaškrtnutou položkou menu Options | Store Patterns in DataBase.


Tracer vzorov

LEM má špeciálny nástroj pre detekciu udalostí vo vzoroch. Tento nástroj - tracovač vzorov - je časťou databázového systému a pracuje iba s informáciami, ktoré sú prístupné v aktuálnej databáze. Všetky vzory, ktoré chceme študovať musia byť špecifikované v súbore vzorov knižnice s príponou ".pt". Súbor je použitý na načítanie vzorov a vzorov chromozómov, to znamená, že vzory sú zviazané so schémou. Formát tohto súboru je nasledovný:

nondeterm pattern(string PattName, SHORTLIST AgentIds, MODAL_EXPRESSION, TIMESEQ TimeVars)
compulsory pattern_list(SLIST)
nondeterm genes(string PattName, SpName, SOBJECTS, IACTIONS)

TIMESEQ = TimeVar *
TimeVar = t1;t2;t3;t4;t5;t6;t7;t8;t9;t10;t(ulong)

MODAL_EXPRESSION = MODAL_STATEMENT *
MODAL_STATEMENT = act(short AgVar, SpName, TimeVar, IACTION); sound(short AgVar, TimeVar, string)

Tu je príklad definovania súboru knižnice paternu: pattern("collab-attack", [1, 2, 3], [act(1, "m", t1, any), act(2, "&", t1, soundact2("shu", "attack", 1)), act(3, "&", t1, soundact2("shu", "attack", 1))], [t1])
pattern("attack", [1, 2], [sound(1, t1, "rrr"), act(2, "&", t2, soundact2("shu", "attack", 1))], [t1, t2])
pattern("escape1", [1, 2], [sound(1, t1, "rrr"), act(2, "&", t2, act2("runfrom", 1))], [t1, t2])
pattern_list(["collab-attack", "attack", "escape1"])
genes("rrr-runfrom", "&", [sound(1, "rrr")], [act2("runfrom", 1)])
genes("rrr-attack", "&", [sound(1, "rrr")], [soundact2("shu", "attack", 1)])
genes("coll_atack", "&", [obj(1, "m"), obj(2, "&")], [soundact2("shu", "attack", 1)])
genes("atack", "&", [obj(1, "m")], [soundact2("shu", "attack", 1)])
genes("Reproduction1", "&", [], [act2("mating", 1)])
genes("Reproduction2", "&", [], [act2("mating", 2)])
genes("Reproduction1", "m", [], [act2("mating", 1)])
genes("Reproduction2", "m", [], [act2("mating", 2)])

Ak nie je vzor knižnice špecifikovaný v deklarácii modelu alebo je potrebná knižnica rôzna od špecifikovanej, potom súbor knižnice musí byť načítaný pred tracovaním pomocou menu Patterns | Load Library. Potom je potrebné, aby bol vzor vybraný pomocou príkazu menu Patterns | Select for Tracing. Tracovanie môže byť ukončené počas behu alebo po simulácii. Pre tracovanie vzorov počas behu programu musí byť zaškrtnuté osobitné menu v Patterns. Výstup tracovania za behu programu je do okna správ.

Inštancia vzorov môže byť uložená v databáze v tvare:
p(string PattName, ulong Time, ULONGLIST Agents)

Posledné štyri termy na kladenie otázok do databázy môžu byť použité po kompletnom tracovaní so zaškrtnutou položkou menu Options | Store Patterns in DataBase.

Na rozdiel od vzorov interakcií, génové vzory alebo vzory schém nepotrebujú databázu. Možnosť Patterns | Gene Frequencies môžu byť použité po načítaní vzoru knižnice. Obsahujú informácie o absolútnych a relatívnych výskytoch pre všetky špecifikované génové vzory.


Ploter

Na použitie plotra na monitorovanie dynamiky populácie užívateľ musí urobiť nasledovné:

  1. Spustiť databázu pred samotnou simuláciou.
  2. Overiť, či je položka menu Options | Record Populations to DataBase zaškrtnutá.
  3. Spustiť simuláciu.
  4. Ukončiť simuláciu.
  5. Vybrať položku menu Plot | Populations.

Pri použití plotra na monitorovanie štatistiky vzoru interakcií, užívateľ musí urobiť nasledovné:

  1. Spustiť databázu pred samotnou simuláciou.
  2. Overiť, či knižnica vzorov je načítaná.
  3. Vybrať vzor pre tracovanie.
  4. Spustiť simuláciu pri použití tracovania počas behu programu.
  5. Zastaviť simuláciu.
  6. Ak sa vzor netracoval počas behu programu, potom musí byť použitá možnosť Patterns | Trace in current DataBase.
  7. Vybrať položku menu Plot Patterns Statistics.

Pokiaľ je potrebné užívateľ môže uložiť výstup plotra do obrázka. Obrázok môže byť editovaný programom Painbrush alebo v iných programoch a vložený priamo do správy o projekte.


Chyby

Syntaktické chyby
Chyby za behu programu


Syntaktické chyby

LEM má prostriedok pre zachytenie chýb počas načitávania modelu. Ak je nejaká chyba nájdená, vyvolá sa špeciálny dialóg, ktorý ponúkne užívateľovi možnosť pozrieť sa na miesto výskytu chyby. Ak užívateľ súhlasí, tak je súbor, ktorý obsahuje chybu, otvorený na riadku, kde vznikla chyba a je zvýraznený.


Chyby za behu programu

Chyby za behu programu môžu vzniknúť z rôznych dôvodov. Najväčšie množstvo týchto chýb je spôsobených v dôsledku chýbajúceho termu, ktorý musí byť uvedený v špecifikácii. Súčasný LEM nemá prostriedky na podanie správy o chýbajúcich povinných termoch. Ďalší možný dôvod sú chýbajúce deterministické termy, ktoré musia byť reprezentované v aktuálnom nastavení. Napríklad v cyklických modeloch je potrebná špecifikácia termu dayandyear v ".md" súbore a termu route_update v ".esp" súbore. Oba termy sú deterministické, čo spôsobuje, že termy môžu chýbať. Avšak je nutné, aby sa v cyklických modeloch nachádzali.


Ekologická modelácia so systémom LEM

Tento manuál popisuje štruktúru modelov LEM, syntax a špecifikáciu jazyka a funkčnosť modulov pre program LEM.

Štruktúra modelu LEM
Špecifikácia modelu LEM
Vizuálne rozhranie
Databáza a podsystém tracovania vzorov
Chyby