Š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)])

Spracoval: Dudy