Sunteți pe pagina 1din 56

Concepte de Programare NetLogo

1. Ageni i Variabile
1.1. Ageni
1.2. Proceduri
1.3. Variabile
1.4. Contor de ticks
1.5. Culori
1.6. Cereri
1.7. Seturi de ageni
1.8. Rase

2. Interfa i matematic
2.1. Butoane
2.2. Liste
2.3. Matematic
2.4. Numere aleatoare
2.5. Forme turtle
2.6. Forme link
2.7. Vizualizare actualizri

3. Desenare i producie
3.1. Reprezentare grafic
3.2. iruri de caractere
3.3. Producie
3.4. Fil I/O
3.5. Filme
3.6. Perspectiv
3.7. Desenare

4. Sarcini i Sintax
4.1. Topologie
4.2. Link-uri
4.3. Sarcini
4.4. Cerere simultan
4.5. Legtur
4.6. Fiierele cu surs multipl
4.7. Sintax

1
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

1. 1. Ageni
Lumea NetLogo este compus din ageni. Agenii sunt elemente care pot respecta instruciuni.
n NetLogo, exist patru tipuri de ageni: turtles, patch-uri, link-uri i observatorul.
Turtles sunt agenii care se pot deplasa n lume. Lumea este bidimensional i este mprit ntr-o
reea de patch-uri. Fiecare patch este o adevrat bucat de teren pe care turtles se pot deplasa.
Link-urile sunt agenii care leag dou turtles. Observatorul nu are o locaie ne putem imagina c
acesta examineaz lumea de turtles i patch-uri.
Observatorul nu observ n mod pasiv el d instruciuni celorlali ageni.
La iniializarea NetLogo, nu exist turtles. Observatorul poate crea turtles noi. De asemenea, i
patch-urile pot s creeze noi turtles. (Patch-urile nu se pot deplasa, dar n alte privine sunt la fel de
vii ca i turtles.)
Patch-urile au coordinate. Patch-ul de coordonate (0, 0) este denumit origine i coordonatele
celorlalte patch-uri sunt distanele pe vertical i orizontal fa de acesta. Numim coordonatele
unui patch pxcor i pycor. La fel ca n planul standard de coordinate matematice, pxcor crete
pe msur ce te deplasezi spre dreapta iar pycor crete pe msur ce te deplasezi n sus.
Numrul total de patch-uri este stabilit de setrile min-pxcor, max-pxcor, min-pycor, i maxpycor. La iniializarea NetLogo, min-pxcor, max-pxcor, min-pycor, i max-pycor sunt 16, 16, -16 i, respectiv, 16. Aceasta nseamn c pxcor i pycor pot varia ambele ntre -16 i
16, adic sunt de 33 ori 33, sau 1089 de patch-uri n total. (Numrul de patch-uri se poate modifica
din Setri.)
Turtles au coordonatele xcor i ycor. Coordonatele unui patch sunt ntotdeauna numere ntregi,
dar coordonatele unui turtle pot avea zecimale. Acest lucru nseamn c un turtle poate fi poziionat
n orice punct n interiorul patch-ului su; nu trebuie s fie n central patch-ului.
Link-urile nu au coordonate. Fiecare link are dou capete, la fiecare capt fiind cte un turtle. Dac
oricare turtle moare, moare i link-ul. Un link este reprezentat vizual ca o linie ce leag dou turtles.

1.2. Proceduri
n NetLogo, comenzile i raportorii indic agenilor ce este de fcut. O comand este o aciune pe
care un agent trebuie s-o duc la ndeplinire, rezultnd un oarecare efect. Un raportor reprezint
instruciuni pentru calcularea unei valori, pe care ulterior agentul o raporteaz oricui ar ntreba.
De obicei, numele unei comenzi ncepe cu un verb, cum ar fi create, die, inspect, sau clear.
Majoritatea numelor raportorilor sunt substantive sau locuiuni substantivale.
Comenzile i raportorii construii n NetLogo sunt numii primitive. Dicionarul NetLogo are lista
complet a comenzilor i raportorilor ncorporai.
Comenzile i raportorii definii de utilizator sunt numii proceduri. Fiecare procedur are un nume,
precedat de cuvntul-cheie to sau to-report, n funcie de faptul c e o procedur de comand
2
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

sau una de raportor. Cuvntul-cheie end arat finalul comenzilor din procedur. Odat ce defineti
o procedur, poi s o utilizezi i n alt parte n program.
Multe comenzi i raportori iau intrri -- valori pe care comanda sau raportorul le utilizeaz pentru
ndeplinirea aciunilor lor sau pentru calculul rezultatelor acestora.
Iat dou exemple de proceduri de comand:
to setup
clear-all
create-turtles 10
reset-ticks
end
to go
ask turtles [
fd 1
;; forward 1 step
rt random 10 ;; turn right
lt random 10 ;; turn left
]
tick
end

Se remarc utilizarea punct-virgulelor pentru adugarea de comentarii programului. Comentariile


pot face codul mai uor de citit i de neles, dar nu-i afecteaz comportamentul.
n acest program,
setup i go sunt comenzi definite de utilizator.
clear-all, create-turtles, reset-ticks, ask, lt (ntoarcere la stnga), rt
(ntoarcere la dreapta) i tick, sunt toate comenzi primitive.
random i turtles sunt raportori primitive. random ia un numr unic ca pe o intrare i
raporteaz un ntreg aleator mai mic dect intrarea (n acest caz, ntre 0 i 9). turtles raporteaz
un set de ageni constnd din toi turtles. (Setrile agenilor vor fi explicate ulterior.)
setup i go pot fi denumite de alte proceduri, sau de butoane, sau prin Centrul de Comand.
Multe modele NetLogo au un buton de o singur dat care apeleaz o procedur denumit setup
i un buton de tot timpul care apeleaz o procedur denumit go.
n Netlogo, se poate specifica care ageni turtles, patch-uri sau link-uri trebuie s ruleze fiecare
comand. Dac nu se specific, atunci codul este condus de ctre observator. n codul de mai jos,
observatorul utilizeaz ask pentru a face setul de toate turtles s ruleze comenzile dintre
parantezele ptrate.
clear-all i create-turtles pot fi rulate doar de ctre observator. Pe de alt parte, fd poate
fi rulat doar de turtles. Alte comenzi i raportori, cum ar fi set i ticks, pot fi rulate de diferite tipuri
de ageni.
Iat cteva caracteristici mai avansate, de care se poate profita pentru definirea propriilor proceduri.

Proceduri cu intrri

3
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Procedurile pot prelua intrri, la fel ca i multe alte primitive. Pentru a crea o procedur care s
accepte intrri, se pune numele acestora ntre paranteze ptrate dup numele procedurii. De
exemplu:
to draw-polygon [num-sides len] ;; turtle procedure
pen-down
repeat num-sides [
fd len
rt 360 / num-sides
]
end

n alt parte a programului, s-ar putea folosi procedura care cere fiecrui turtle s deseneze un
octogon cu latura egal cu o lungime specificat:
ask turtles [ draw-polygon 8 who ]

Proceduri cu raportori
Aa cum se pot defini propriile comenzi, se pot defini i proprii raportori. Trebuie realizate dou
lucruri speciale. Mai nti, se utilizeaz to-report n loc de to pentru a porni procedura. Apoi, n
interiorul procedurii, se utilizeaz report pentru a raporta valoarea ce se dorete a fi returnat:
to-report absolute-value [number]
ifelse number >= 0
[ report number ]
[ report (- number) ]
end

1.3. Variabile
Variabilele agenilor
Variabilele agenilor sunt locurile n care se stocheaz valori (cum ar fi numerele) ntr-un agent.
Variabila unui agent poate fi o variabil global, o variabil a unui turtle, o variabil a unui patch,
sau o variabil a unui link.
Dac o variabil este global, exist o singur valoare pentru ea, i oricare agent o poate accesa.
Se poate spune c variavilele globale aparin observatorului.
Variabilele unor turtles, patch-uri sau linkuri sunt diferite. Fiecare turtle are propria sa valoare
pentru fiecare variabil. La fel este i n cazul patch-urilor sau link-urilo.
Unele variabile sunt construite n NetLogo. De exemplu, fiecare turtle sau link are o variabil
color, i toate patch-urile au o variabil pcolor. (Variabila patch-ului ncepe cu p pentru a nu fi
confundat cu variabila unui turtle, de vreme ce turtles au acces direct la variabilele patch-ului.)
Dac se stabilete varibila, turtle sau patch-ul i vor schimba culoarea.
Alte variabile de turtle ncorporate includ xcor, ycor,i heading. Alte variabile de patch
ncorporate includ pxcor i pycor. (Lista complet aici.)

4
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Se pot defini, de asemenea, propriile variabile. Se poate construi o variabil global prin adugarea
unui comutator, cursor, selector, sau a unei casete de intrri la prpriul model, sau prin utilizarea
cuvntului-cheie globals la nceputul codului, ca de exemplu:
globals [score]
Se pot defini, de asemenea, noi variabile ale turtles, patch-urilor sau link-urilor folosind cuvintele
cheie turtles-own, patches-own sau links-own, ca de exemplu:
turtles-own [energy speed]
patches-own [friction]
links-own [strength]

Aceste variabile pot fi folosite n mod liber n modelul propriu. Utilizai comanda set pentru a le
configura. (Orice variabil ce rmne nesetat are valoarea de pornire zero.)
Variabilele globale pot fi citite i stabilite n orice moment de ctre oricare agent. De asemenea, un
turtle poate citi i configura variabilele de patch ale patch-ului pe care se afl. De exemplu, acest
cod:
ask turtles [ set pcolor red ]
Determin fiecare turtle s fac patch-ul pe care st rou. (Datorit faptului c variabilele specifice
patch-urilor sunt separate de cele specifice turtles n acest fel, nu se poate ca o variabil turtle i o
variabil de patch s aib acelai nume.)
n alte situaii n care se dorete ca un agent s citeasc variabila altui agent, se poate utiliza of.
Exemplu:
show [color] of turtle 5
;; prints current color of turtle with who number 5

De asemenea, se poate folosi of cu o expresie mult mai complicat dect doar un nume de
variabil, ca de exemplu:
show [xcor + ycor] of turtle 5
;; prints the sum of the x and y coordinates of
;; turtle with who number 5

Variabilele locale
O variabil local este definit i utilizat doar n contextul unei proceduri speciale sau ca parte a
unei proceduri. Pentru a crea o variabil local, se folosete comanda let. Dac let este utilizat
la nceputul procedurii, aceast comand va exista pe tot parcursul procedurii. Dac va fi folosit n
interiorul unor paranteze ptrate, de exemplu n interiorul unui ask, atunci ea va funciona doar
ntre acele paranteze.
to swap-colors [turtle1 turtle2]
let temp [color] of turtle1
ask turtle1 [ set color [color] of turtle2 ]
ask turtle2 [ set color temp ]
end

5
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

1.4. Contor de ticks


n multe modele NetLogo, timpul trece prin etape distincte, numite ticks. NetLogo include un
numrtor de ticks, pentru a putea urmri cte etape au trecut.
Valoarea curent a contorului este artat deasupra seciunii view. (Se poate folosi butonul Setri
pentru a ascunde contorul, sau pentru a schimba cuvntul ticks cu altul).
n cadrul codului, pentru a prelua valoarea curent a contorului, se folosete raportorul ticks.
Comanda tick mrete contorul de ticks cu 1. Comanda clear-all reseteaz contorul mpreun
cu restul.
n cazul n care contorul este resetat, ar fi o eroare s se ncerce citirea sau modificarea lui. Se
folosete comanda reset-ticks atunci cnd modelul este definitivat, pentru a porni contorul.
Dac modelul respectiv este setat s utilizeze actualizrile pe baza de ticks, atunci, de obicei,
comanda tick va actualiza de asemenea i seciunea view. A se vedea i seciunea ulterioar,
Vizualizare Actualizri.
Cnd se ticks
Se folosete reset-ticks la sfritul procedurii de setare.
Se folosete tick la finalul procedurii de iniializare.
to setup
clear-all
create-turtles 10
reset-ticks
end
to go
ask turtles [ fd 1 ]
tick
end

Ticks fracionare
n majoritatea modelelor, contorul de ticks pornete de la 0 i crete cu 1 la fiecare pas, din numr
ntreg n alt numr ntreg. Dar, de asemenea, este posibil ca un contor de ticks s ia valori cu
virgul.
Pentru a crete contorul cu o valoare fracionar, se utilizeaz comanda tick-advance. Aceast
comand primete o intrare numeric ce specific n ce msur avanseaz contorul.
O utilizare tipic a bifrilor fracionare este dat de aproximarea micrilor continue sau curbe. De
exemplu, pot fi urmrite modelele GasLab din Models Library. Aceste modele calculeaz momentul
exact la care un eveniment viitor se va petrece, i avanseaz contorul n exact acel moment.

6
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

1.5. Culori
NetLogo reprezint culorile n diferite moduri. O culoare poate fi un numr ce variaz n intervalul 0140, cu excepia lui 140. Mai jos este un grafic ce arat gama de culori ce poate fi utilizat n
NetLogo.

Din grafic se oberv faptul c:


Unele culori au nume. (Se pot folosi aceste nume n cadrul codului.)
Fiecare culoare cu nume, exceptnd negrul i albul, are un numr care se termin cu 5.
De fiecare parte a fiecrei culori cu nume sunt nuanele mai nchise i mai deschise ale
culorii respective.
0 reprezint negrul pur. 9.9 este albul pur.
10, 20 i aa mai departe sunt valori att de nchise, nct sunt foarte aproape de negru.
19.9, 29.9 i aa mai departe sunt valori att de deschise, nct sunt foarte aproape de
alb.

7
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Exemplu de cod: Graficul de culori a fost creat n NetLogo cu modelul Color Chart Example.
Dac se folosete un numr n afara intervalului 0-140, atunci NetLogo adaug sau scade n mod
repetat 140 pn cnd se ajunge n intervalul 0-140. De exemplu, 25 reprezint portocaliul, deci i
165, 305, 445 i aa mai departe sunt tot valori pentru portocaliu, la fel ca i -115, -255, -395, etc.
Acest calcul este fcut automat cnd se seteaz variabila turtle color sau variabila patch pcolor.
Dac acest calcul trebuie efectuat ntr-un alt context, se utilizeaz primitiva wrap-color.
Dac se dorete o culoare ce nu exist n grafic, se pot specifica valori intermediare. De exemplu,
26.5 este o nuan de portocaliu aflat la jumtatea spectrului dintre 26 i 27.
Aceasta nu nseamn c se poate crea orice culoare n NetLogo; spectrul de culori NetLogo este
doar un set din toate culorile posibile. Acesta conine doar un set fix de nuane distincte (cte o
nunan pentru fiecare rnd al graficului). Pornind de la una dintre aceste nuane, se poate fie
scdea luminozitatea (nuan mai ntunecat), fie reduce saturaia (nuan mai luminoas), dar nu
se pot scdea albele simultan. De asemenea, doar prima cifr de dup virgul este semnificativ.
Astfel, valorile culorii sunt rotunjite pn la urmtorul 0.1. De exemplu, nu exist o diferen vizibil
ntre 26.5, 26.52 i 26.58.
Primitive de culoare
Exist cteva primitive utili pentru gestiunea culorilor.
Am menionat deja primitiva wrap-color.
Primitiva scale-color este util pentru conversia datelor numerice n culori.
shade-of? indic dac dou culori sunt ambele nuane ale aceleiai culori de baz. De exemplu,
shade-of? orange 27 este valid, deoarece 27 este o nuan mai deschis de portocaliu.

Exemplu de cod: Scale-color Example arat raportorul scrii de culori.

Culorile RGB i RGBA


NetLogo prezint, de asemenea, i culori n format RGB (rou/verde/albastru) i RGBA
(rou/verde/albastru/alpha). Atunci cnd se utilizeaz formatul RGB, ntreaga gam de culori este
disponibil pentru utilizator. Culorile RGBA permit toate culorile RGB, dar se poate specifica i
transparena culorii. Listele RGB i RGBA sunt formate din trei sau patru numere ntregi ntre 0 i
255; dac un numr este n afara intervalului, se scade din el 255 n mod repetat pn se ajunge n
intervalul respectiv. Se pot seta orice variabil de culoare n NetLogo (color pentru turtles i linkuri i pcolor pentru patch-uri) folosind o list RGB. De exemplu, se poate seta culoarea patch-ului
0 0 la rou pur folosind urmtorul cod:
set pcolor [255 0 0]

8
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Toate turtles, link-urile i etichetele pot conine RGBA ca variabile de culoare; cu toate acestea,
patch-urile nu pot avea pcolors RGBA. Se poate seta culoarea unui turtle la rou pur
semitransparent cu urmtorul cod:
set color [255 0 0 125]

Se poate converti de la o culoare NetLogo la o culoare n formatele RGB sau HSB (nuan /
saturaie / luminozitate), folosind extract-rgb sau extract-hsb. Se poate folosi rgb pentru a
genera liste RGB sau hsb pentru a converti de la o culoare HSB la RGB.
Deoarece lipsesc multe culori din spectrul de culori NetLogo, approximate-hsb sau
approximate-rgb nu pot da de multe ori culoarea cerut, dar vor ncerca s ajung ct mai
aproape posibil.
Exemplu: se poate schimba culoarea deja existent n NetLogo a unui turtle la o variant pe
jumtate transparent a acelei culori folosind:
set color lput 125 extract-rgb color

Exemple de cod: HSB i RGB Example (permit ncercarea sistemelor de culori HSB i RGB),
Transparency Example.

Fereastra de dialog a specimenelor de culoare


Aceasta permite utilizatorului s ncerce i s aleag culori. Se deschide accesnd Color Swatches
din Tools Menu.

9
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Cnd se face click pe un specimen de culoare (sau pe un buton de culoare), acea culoare va fi
afiat alturi de alte culori. n stnga jos, codul pentru culoarea selectat n prezent este afiat (de
exemplu, rou + 2), astfel c el poate fi copiat i inserat n cod. n dreapta jos, sunt trei opiuni de
cretere, 1, 0.5 i 0.1. Aceste numere indic diferena dintre dou specimen vecine. Cnd creterea
este de 1, exist 10 nuane diferite pe fiecare rnd; cnd sporul este de 0.1, exist 100 de nuane n
fiecare rnd. 0.5 este o setare intermediar.

1.6. Cereri
NetLogo utilizeaz comanda ask pentru a da comenzi pentru turtles, patch-uri i link-uri. Toat
secvena de cod ce va fi rulat de turtles trebuie s fie localizat ntr-un context turtle. Un context
turtle poate fi stabilit n oricare din urmtoarele trei moduri:
ntr-un buton, prin alegerea Turtles din meniul pop-up. Orice cod s-a pus n buton va fi
rulat de toi turtles.
n Centrul de comand, prin alegerea Turtles din meniul pop-up. Orice comand
introdus va fi executat de toi turtles.
Prin utilizarea ask turtles, hatch, sau alte comenzi ce stabilesc un context turtle.
Acelai lucru este valabil i pentru patch-uri, link-uri sau pentru observator, cu excepia faptului c
nu se poate da comanda ask observatorului. Orice cod ce nu este inclus ntr-un ask este implicit
un cod observator.
Iat un exemplu de utilizare ask ntr-o procedur NetLogo:
to setup
clear-all
create-turtles 100
;; create 100 turtles with random headings
ask turtles
[ set color red ;; turn them red
fd 50 ]
;; spread them around
ask patches
[ if pxcor > 0
;; patches on the right side
[ set pcolor green ] ] ;; of the view turn green
reset-ticks
end

Modelele din Models Library sunt pline de alte exemple. Un loc bun de pornire este n seciunea
Code Examples.
De obicei, observatorul folosete ask pentru a solicita execuia de comenzi de ctre toate turtles,
patch-uri i link-uri. De asemenea, se poate folosi ask i pentru a cere unui singur turtle, patch sau
link s execute o comand. Raportorii turtle, patch, link i patch-at sunt deosebit de utili n
acest sens. De exemplu:
to setup
clear-all
crt 3
ask turtle 0
[ fd 1 ]
ask turtle 1
[ set color green ]

;;
;;
;;
;;
;;

make 3 turtles
tell the first one...
...to go forward
tell the second one...
...to become green

10
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

ask turtle 2
[ rt 90 ]
ask patch 2 -2
[ set pcolor blue ]
ask turtle 0
[ ask patch-at 1 0
[ set pcolor red ] ]
ask turtle 0
[ create-link-with turtle 1 ]
ask link 0 1
[ set color blue ]
reset-ticks

;;
;;
;;
;;
;;
;;
;;
;;
;;
;;
;;

tell the third one...


...to turn right
ask the patch at (2,-2)
...to become blue
ask the first turtle
...to ask patch to the east
...to become red
tell the first turtle...
...make a link with the second
tell the link between turtle 0 and 1
...to become blue

end

Oricare turtle creat are un numr. Primul turtle creat este numrul 0, urmtorul numrul 1, i aa
mai departe.
Raportorul turtle ia un numr ca intrare, i raporteaz turtle-ul cu acel numr.
Raportorul patch primete valori pentru pxcor i pycor i raporteaz patch-ul de la aceste
coordonate. Primitiva link primete dou intrri, numerele ale celor doi turtles pe care i
conecteaz. Raportorul patch-at primete plecri: distane, n direciile x i y, de la primul agent.
n exemplul de mai sus, unui turtle i se cere s ia patch-ul est (i nu patch-uri spre nord), de la sine.
De asemenea, se poate selecta un grup de turtles, de patch-uri sau de link-uri i li se solicite s
execute ceva. Acest lucru presupune folosirea seturilor de ageni. Urmtoarea seciune i explic
n detaliu.
Cnd i se cere unui set de ageni s execute mai mult de o comand, fiecare agent trebuie s
termine nainte de a ncepe urmtorul. Un agent execut toate comenzile, apoi agentul urmtoar le
ruleaz pe toate, i aa mai departe. De exemplu, dac se scrie:
ask turtles
[ fd 1
set color red ]

primul turtle se mic i devine rou, apoi alt turtle se mic i devine rou, i aa mai departe.
Dar dac se scrie astfel:
ask turtles [ fd 1 ]
ask turtles [ set color red ]

atunci mai nti toi turtles se mic, apoi toi iau culoarea rou.
(O alt form a comenzii ask, cu o alt regul de ordonare, este de asemenea disponibil. A se
consulta seciunea Ask-Concurrent de mai jos.)

11
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

1.7. Seturi de ageni


Un set de ageni poate conine o submulime de turtles, patch-uri, sau link-uri (doar ageni de un
singur tip la un moment dat).
Un set de ageni nu este sortat n vreo ordine special. La fiecare utilizare, el va fi ntr-o ordine
aleatoare. Acest lucru ajut ca modelul s nu trateze n mod difereniat unii turtles, patch-uri i linkuri (cu excepia cazului n care se dorete acest lucru). Deoarece ordinea este aleatoare de fiecare
dat, nici un agent nu primete ntotdeauna permisiunea de a porni primul.
Au fost prezentate primitivele turtles, care raporteaz setul de ageni tuturor turtles, primitivele
patches, ce raporteaz setul de ageni tuturor patch-urilor, i primitivele links, care raportez
setul de ageni tuturor link-urilor.
Se pot construi seturi de ageni care s cuprind numai anumii turtles, anumite patch-uri sau
anumite link-uri. De exemplu, toi turtles roii, sau toate patch-urile care au pxcor uniform divizibil
cu cinci, sau turtles din primul cadran ce sunt pe un patch verde, sau link-urile conectate la turtle 0.
Aceste seturi de ageni pot fi folosite apoi prin ask sau prin ali diferii raportori ce le iau ca intrri.
O modalitate ar fi de a utiliza turtles-here sau turtles-at, pentru a crea un set de ageni
care s conin doar turtles care s fie pe patch-ul specificat, sau doar turtles de pe alt patch la
anumite poziii x i y. Exist de asemenea turtles-on, astfel se poat obine setul de turtles de
pe un anumit patch sau de pe un anumit set de patch-uri, sau setul de turtle ce se afl pe acelai
patch ca i un anumit turtle sau un set de turtles.
Iat alte cteva exemple legate de modul n care se pot crea seturi de ageni:
;; all other turtles:
other turtles
;; all other turtles on this patch:
other turtles-here
;; all red turtles:
turtles with [color = red]
;; all red turtles on my patch
turtles-here with [color = red]
;; patches on right side of view
patches with [pxcor > 0]
;; all turtles less than 3 patches away
turtles in-radius 3
;; the four patches to the east, north, west, and south
patches at-points [[1 0] [0 1] [-1 0] [0 -1]]
;; shorthand for those four patches
neighbors4
;; turtles in the first quadrant that are on a green patch
turtles with [(xcor > 0) and (ycor > 0)
and (pcolor = green)]
;; turtles standing on my neighboring four patches
turtles-on neighbors4
;; all the links connected to turtle 0
[my-links] of turtle 0

De remarcat utilizarea other pentru excluderea unui agent.


O dat ce setul de ageni a fost creat, se pot efectua unele operaii simple:

12
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Utilizarea ask pentru a cere agenilor din setul de ageni s execute comenzi
Utilizarea any? pentru a afla dac setul de ageni este gol
Utilizarea all? pentru a afla dac fiecare agent dintr-un set de ageni satisface o condiie
Utilizarea count pentru a afla numrul de ageni din acel set.
Iat i unele lucruri mai complexe ce se pot efectua:
Alegerea la ntmplare a unui agent folosind one-of. De exemplu, un turtle ales aleator
poate fi fcut verde:
ask one-of turtles [ set color green ]

Sau s se cear unui patch ales aleator s genereze un nou turtle:


ask one-of patches [ sprout 1 ]

Folosirea raportorilor max-one-of i min-one-of pentru aflarea agentului care este


maximul sau minimul de-a lungul unei anumite scale. De exemplu, pentru eliminarea celui
mai mare turtle, se poate folosi:
ask max-one-of turtles [sum assets] [ die ]

Realizarea unei histograme a setului de ageni prin utilizarea comenzii histogram (n


combinaie cu of).
Folosirea of pentru a realiza o list de valori, cte una pentru fiecare agent din setul de
ageni. Apoi folosirea unui primitive din lista NetLogo pentru a schimba ceva n acea list. (A
se consulta seciunea Liste de mai jos.) De exemplu, pentru a afla ct de mari sunt turtles
n medie, se poate folosi:
show mean [sum assets] of turtles

Folosirea raportorilor turtle-set, patch-set i link-set pentru a crea noi seturi de


ageni reunind agenii dintr-o varietate de surse posibile.
Folosirea raportorilor no-turtles, no patches i no-links pentru crearea de seturi
de ageni goale.
Verificarea egalitii dintre dou seturi de ageni, folosind = sau !=.
Folosirea member? Pentru a afla dac un anumit agent este membru al unui set de
ageni.
Acestea sunt doar lucruri minore. A se consulta Models Library pentru multe alte exemple, i
Dicionarul NetLogo pentru mai multe informaii despre toi primitivii seturilor de ageni.
Mai multe exemple de utilizare a seturilor de ageni sunt furnizate n rubricile individuale pentru
aceste primitive din Dicionarul NetLogo.

13
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Seturi de ageni speciale


Seturile de ageni turtles i links au un comportament special deoarece ele dein ntotdeauna
setul tuturor turtles link-urilor. Prin urmare, aceste seturi de ageni pot crete.
Urmtoarea interaciune demonstreaz un comportament special al acestora. S presupunem c
tab-ul Code are globals [g]. Atunci:
observer>
observer>
observer>
observer>
5
observer>
observer>
10
observer>
observer>
10
observer>
observer>
10
observer>
15

clear-all
create-turtles 5
set g turtles
print count g
create-turtles 5
print count g
set g turtle-set turtles
print count g
create-turtles 5
print count g
print count turtles

Setul de ageni turtles crete cnd se nasc noi turtles, dar alte seturi de ageni nu cresc. Dac se
scrie turtle-set turtles, se obine un set de ageni nou, ce conine doar turtles care exist i
n prezent. Turtles noi nu se vor aduga dup ce vor aprea.

Seturi de ageni i liste


Anterior, s-a specificat faptul c fiecare set de ageni este sortat aleator. Dac este necesar ca
agenii s execute ceva ntr-o ordine prestabilit, trebuie fcut o anumit list a acestor ageni. A
se vedea seciunea Liste de mai jos.

Exemplu de cod: Ask Ordering Example

1.8. Rase
NetLogo permite utilizatorului s defineasc diferite rase de turtles sau rase de link-uri. Dup
definirea raselor, se poate trece mai departe i face ca diferite rase s se comporte n mod diferit.
De exemplu, poi avea rase denumite sheep i wolves, i s faci ca wolves s ncerce s
mnnce sheep, sau poi avea rase de link-uri denumite streets i sidewalks n care traficul
pietonal este direcionat spre sidewalks iar cel rutier spre streets.
Rasele de turtles se pot defini folosind cuvntul-cheie breed, din captul tab-ului Code, naintea
oricrei alte proceduri:
breed [wolves wolf]

14
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

breed [sheep a-sheep]

Referirea la un membru al rasei se face folosind forma singular, exact ca la un raportor turtle.
Cnd sunt editai, membrii rasei vor fi etichetai cu numele singular.
Unele comenzi i raportori primesc numele rasei n varianta plural, cum ar fi create-<breeds>.
Altele primesc numele singular al rasei, cum ar fi <breeds>.
Ordinea n care rasele sunt declarate este i ordinea n care ele sunt afiate. Aadar rasele definite
mai trziu vor aprea deasupra celor definite mai devreme; n acest exemplu, sheep vor fi
desenate peste wolves.
Cnd se definete o ras sheep, se creeaz automat un set de ageni pentru aceast ras, astfel
c toate proprietile seturilor de ageni descrise mai sus sunt valabile i pentru sheep.
Alte primitive disponibile odat definit o ras: create-sheep, hatch-sheep, sprout-sheep,
sheep-here, sheep-at, sheep-on, i is-a-sheep?.
De asemenea, se poate utiliza sheep-own pentru a defini noi variabile , doar pentru turtles ale
acelei rase. (Se permite ca mai multe rase s dein aceeai variabil.)
Setul de ageni al unei rase turtle este stocat n variabila turtle breed. n consecin, rasa unui
turtle poate fi verificat astfel:
if breed = wolves [ ... ]

De asemenea, un turtle i poate schimba rasa. Un wolf nu trebuie s rmn wolf ntreaga sa
via. Un wolf aleator poate fi schimbat ntr-un sheep astfel:
ask one-of wolves [ set breed sheep ]

Primitivul set-default-shape este util pentru asocierea diferitelor forme de turtle cu anumite rase.
A se consulta seciunea forme de mai jos.
Iat un exemplu rapid de utilizare a raselor:
breed [mice mouse]
breed [frogs frog]
mice-own [cheese]
to setup
clear-all
create-mice 50
[ set color white
set cheese random 10 ]
create-frogs 50
[ set color green ]
reset-ticks
end

Exemplu de cod: Breeds and Shapes Example

15
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Rasele link
Rasele link sunt foarte asemntoare cu rasele turtle, existnd totui cteva diferene:
Cnd se declar o ras link, trebuie s se specifice dac este o ras de link-uri direcionate sau
nedirecionate, folosind cuvintele cheie directed-link-breed i undirected-link-breed.
directed-link-breed [streets street]
undirected-link-breed [friendships friendship]

Dup ce s-a creat un link de ras, nu se mai pot crea link-uri fr ras sau invers. (Se poate totui
s existe link-uri direcionate sau nedirecionate n aceeai lume, doar c nu n cadrul aceleai
rase.)
Spre deosebire de rasele turtle, numele singular al rasei este necesar pentru rasele de link-uri, de
vreme ce multe dintre comenzile sau raportorii link folosesc numele singular, ca de exemplu
<link-breed>-neighbor?.
Primitive disponibile odat definit o ras de link-uri direcionate:
create-street-from create-streets-from create-street-to create-streets-to
in-street-neighbor? in-street-neighbors in-street-from my-in-streets myout-streets out-street-neighbor? out-street-neighbors out-street-to
Primitive disponibile odat definit o ras de link-uri nedirecionate:
create-friendship-with create-friendships-with friendship-neighbor?
friendship-neighbors friendship-with
my-friendships
Rasele de link-uri multiple pot declara aceeai variabil own, dar o variabil nu poate fi mprit
ntre o ras turtle i o ras link.
La fel ca i la rasele turtle, ordinea n care rasele link sunt declarate devine ordinea n care ele sunt
reprezentate; astfel, friendships vor fi ntotdeauna deasupra streets (n cazul n care dintr-un
motiv sau altul aceste rase au fcut parte din acelai model). De asemenea, se poate folosi <linkbreed>-own pentru a declara variabilele fiecrei rase de link-uri separat.
Se poate schimba rasa unui link cu set breed (Cu toate acestea, nu se poate schimba un link cu
ras cu unul fr, pentru a mpiedica existena link-urilor cu ras i fr ras n aceeai lume.)
ask one-of friendships [ set breed streets ]
ask one-of friendships [ set breed links ] ;; produces a runtime error

set-default-shape poate fi de asemenea folosit i pentru a asocia rasele link cu un anumit


profil link.

Exemplu de cod: Link Breeds Example

16
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

2.1. Butoane
Butoanele din interfa ofer o modalitate uoar de a controla modelul. De obicei, un model va
avea cel puin un buton setup, pentru a stabili starea iniial a lumii, i un buton go pentru a face
modelul s ruleze continuu. Unele modele au butoane suplimentare care realizeaz alte aciuni.
Un buton conine cod NetLogo. Acel cod este rulat cnd se apas butonul.
Un buton poate fi fie buton Once, fie buton Forever. Acest lucru poate fi controlat prin editarea
butonului i bifarea sau debifarea casetei Forever. Butoanele Forever continu s-i execute
codul n mod repetat, pn cnd fie se ajunge la comanda stop, fie utilizatorul apas butonul din
nou pentru a-l opri. Dac butonul e oprit, codul nu se ntrerupe, ci se ateapt ncheierea execuiei
codului su.
De obicei, un buton este etichetat cu codul pe care-l execut. De exemplu, un buton pe care scrie
go conine de obicei codul go, care nseamn execut procedura go. (Procedurile sunt definite
n tab-ul Code). De asemenea, se poate edita un buton i introduce un nume afiat pentru buton,
care e un text ce apare pe buton n loc de cod. Aceast funcie ar putea fi utilizat dac se crede c
n realitate codul este prea confuz pentru utilizatori.
Cnd s-a asociat o secven de cod unui buton, trebuie de asemenea specificai agenii care vor
executa acel cod. Se poate alege ca observatorul s ruleze codul, sau toi turtles, toate patch-urile
sau toate link-urile. (Dac se intenioneaz ca un cod s fie executat doar de anumii turtles sau
anumite patch-uri, se poate crea un buton de observator, care apoi s utilizeze comanda ask pentru
a cere doar unora dintre turtles sau patch-uri s fac ceva.)
Cnd se editeaz un buton, exist opiunea de a desemna o tast asociat butonului. Acest lucru
face ca acea tast de pe tastatur s se comporte la fel ca o apsare a butonului. Dac butonul
respectiv este un buton Forever, acesta va rmne activ pn cnd tasta este apsat din nou (sau
este apsat butonul). Tastele sunt deosebit de utile pentru jocuri sau orice
model n care este necesar declanarea rapid a butoanelor.
Butoane pe rnd
La un moment dat, mai mult de un buton poate fi apsat. Dac se ntmpl acest lucru, butoanele
merg "pe rnd", ceea ce nseamn c doar un singur buton execut o aciune la un moment dat.
Fiecare buton i ruleaz codul pn la capt, o singur dat, n timp ce celelalte butoane ateapt,
apoi urmtorului buton i vine rndul.
n urmtoarele exemple, setup este un buton Once iar go este un buton Forever.
Exemplul # 1: Utilizatorul apas butonul Setup, apoi apas go imediat, nainte ca setup s
apar iar. Rezultat: aciunea setup se termin nainte de a ncepe go.
Exemplul # 2: n timp ce butonul go este apsat, utilizatorul apas setup. Rezultat: butonul de
go i termin iteraia curent, apoi se activeaz butonul setup, apoi ncepe s ruleze din nou
go.

17
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Exemplul # 3: Utilizatorul are dou butoane Forever apsate n acelai timp. Rezultat: primul buton
i deruleaz codul su pn la capt, apoi cellalt i execut codul su pn la final, i aa mai
departe, alternativ.
A se reine c dac un buton intr ntr-o bucl infinit, atunci nici un alt buton nu va rula.
Butoanele Forever turtle, patch, si link
Exist o diferen subtil ntre a plasa comenzi ntr-un buton Forever turtle, patch sau link , i de a
plasa aceleai comenzi ntr-un buton de observator care execut ask turtles, ask patches
sau ask links. O aciune ask nu se va finaliza pn cnd toi agenii nu vor termina de rulat
toate comenzile din ask. Deci agenii, pentru c toi execut comenzile n acelai timp, pot fi
desincronizai ntre ei, dar toi se vor sincroniza din nou la sfritul cerinei. Acest lucru nu este
valabil n cazul butoanelor Forever turtle, patch sau link. Din moment ce ask nu a fost folosit,
fiecare turtle sau patch ruleaz codul dat n mod repetat, deci ei pot deveni (i rmne)
desincronizai ntre ei.
n prezent, aceast capacitate este foarte rar folosit n modelele din Models Library. Un model
care poate utiliza aceast capacitatea este modelul Termite, n seciunea Biologie din Sample
Models. Butonul go este un buton Forever turtle, astfel c fiecare termit continu treaba
independent de oricare alt termit, iar observatorul nu este deloc implicat. Acest lucru nseamn
c dac, de exemplu, s-a dorit adugarea de cpue i/sau o aciune modelului, va trebui adugat
un al doilea buton Forever (un buton observator Forever), i s se acioneze ambele butoane
Forever n acelai timp. De remarcat c, de asemenea, un model ca acesta nu poate fi folosit cu
BehaviorSpace.
Exemplu de cod: State Machine Example arat cum Termite pot fi recodate nr-un mod bazat
pe bifare, fr a mai folosi un buton Forever turtle.
n momentul de fa, NetLogo nu permite ca la apsarea unui buton Forever s se activeze altul.
Butoane sunt pornite numai atunci cnd sunt apsate.

2.2. Liste
n modelele cele mai simple, fiecare variabil are doar un fragment de informaie, de obicei un
numr sau un ir. Listele permit stocarea mai multor pri de informaie ntr-o singur valoare prin
colectarea acelor informaii ntr-o list. Fiecare valoare din list poate fi de orice tip: un numr, sau
un ir de caractere, un agent sau un set de ageni, sau chiar o alt list.
Listele permit ncorporarea convenabil de informaii n NetLogo. n cazul n care agenii efectueaz
un calcul repetitiv pentru mai multe variabile, ar putea fi mai uor s existe o list de variabile, n loc
de mai multe variabile numerice. Civa primitivi simplific procesul de realizare a aceluiai calcul
pentru fiecare valoare dintr-o list.
Dicionarul NetLogo are o seciune care specific toi primitivii asociai listelor.
Liste de constante

18
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Se poate crea o list punnd pur i simplu valorile dorite n list ntre paranteze, astfel: set
mylist [2 4 6 8]. De remarcat faptul c valorile individuale sunt separate de spaii. Se pot crea
astfel liste care conin numere sau iruri, dar i liste n interiorul altor liste, ca de exemplu: [[2 4]
[3 5]].
O list goal este creat nepunnd nimic ntre paranteze: [].
Crearea de liste n mod dinamic
Dac se dorete crearea unei liste n care valorile sunt determinate de raportori, i nu ca o serie de
constante, se va folosi raportorul list. Raportorul list accept ali doi raportori, i ruleaz i
raporteaz rezultatele sub forma unei liste.
Dac se dorete ca o list s conin dou valori aleatoare, se poate folosi urmtorul cod:
set random-list list (random 10) (random 20)

Aceasta va stabili o random list ca pe o nou list de dou numere ntregi aleatoare de fiecare
dat cnd ruleaz.
Pentru a face liste mai lungi sau mai scurte, se poate folosi raportorul list cu mai puin sau mai
mult de dou intrri, dar pentru a putea realiza acest lucru, trebuie inclus ntreaga cerin n
paranteze, ca de exemplu :
(list random 10)
(list random 10 random 20 random 30)

Unele tipuri de liste sunt cel mai uor de construit folosind raportorul n-values, care permite
crearea unei anumite liste prin executarea repetat a unui raportor dat. Se poate face o list cu
aceeai valoare repetat, sau cu toate numerele dintr-un ir, sau o mulime de numere aleatorii,
sau multe alte posibiliti.
Primitiva of permite crearea unei liste pornind de la un set de ageni. Aceasta raporteaz o list
care conine valoarea fiecrui agent pentru raportorul dat. (Raportorul poate fi un simplu nume de
variabil, sau o expresie mai complex -- chiar i o cerin pentru o procedur, definit prin
utilizarea to-report.) Un idiom comun este
max [...] of turtles
sum [...] of turtles

i aa mai departe.
Se pot combina dou sau mai multe liste cu ajutorul raportorului sentence, care leag listele
combinnd coninutul lor ntr-o singur list mai mare. Ca i list, sentence primete n mod
normal dou intrri, dar poate accepta orice numr de intrri n cazul n care cerina este ntre
paranteze.

19
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Schimbarea elementelor din list


Din punct de vedere tehnic, listele nu pot fi modificate, dar se pot construi noi liste bazate pe listele
vechi. Dac se dorete ca noua list s o nlocuiasc pe cea veche, se folosete set. De exemplu:
set mylist [2 7 5 Bob [3 0 -2]]
; mylist is now [2 7 5 Bob [3 0 -2]]
set mylist replace-item 2 mylist 10
; mylist is now [2 7 10 Bob [3 0 -2]]

Raportorul replace-item primete trei intrri. Prima specific ce element din list va fi modificat.
0 desemneaz primul element, 1 urmtorul, i aa mai departe.
Pentru adugarea unui element, de exemplu 42, ca fiind sfritul unei liste, se utilizeaz raportorul
lput .(fput adaug un element la nceputul unei liste.)
set mylist lput 42 mylist
; mylist is now [2 7 10 Bob [3 0 -2] 42]

Dar dac utilizatorul se rzgndete? Raportorul but-last (prescurtat bl) raporteaz toate
elementele din list cu excepia ultimului.
set mylist but-last mylist
; mylist is now [2 7 10 Bob [3 0 -2]]

S presupunem c se dorete eliminarea elementului 0, de la nceputul listei:


set mylist but-first mylist
; mylist is now [7 10 Bob [3 0 -2]]

S presupunem c se dorete modificarea celui de-al treilea element care este n interiorul
elementului 3, de la -2 la 9. Numele ce poate apela lista integrat [3 0 -2] este item 3 mylist.
Apoi raportorul replace-item poate schimba o list din interiorul altei liste. Parantezele sunt
adugate pentru claritate.
Iterarea peste liste
Dac se intenioneaz efectuarea unor de operaii pentru fiecare element dintr-o list pe rnd,
comanda foreach i raportorul map pot fi de ajutor.
foreach este folosit pentru a rula o comand sau mai multe comenzi pentru fiecare element dintro list. Este nevoie de o list de intrri i un nume de comand sau un bloc de comenzi, cum ar fi:
foreach [1 2 3] show
=> 1
=> 2
=> 3
foreach [2 4 6]
[ crt ?
show (word "created " ? " turtles") ]
=> created 2 turtles
=> created 4 turtles
=> created 6 turtles

20
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

n bloc, variabila ? pstreaz valoarea curent din lista de intrri.


Aici sunt mai multe exemple pentru foreach:
foreach [1 2 3] [ ask turtles [ fd ? ] ]
;; turtles move forward 6 patches
foreach [true false true true] [ ask turtles [ if ? [ fd 1 ] ] ]
;; turtles move forward 3 patches

map este similar cu foreach, dar este un raportor. Este necesar o list de intrri i un nume de
raportor sau un bloc de raportori. Spre deosebire de foreach, raportorul acioneaz primul, de
exemplu:
show map round [1.2 2.2 2.7]
;; prints [1 2 3]

map raporteaz o list care conine rezultatele aplicrii raportorului la fiecare element din lista de
intrri. Din nou, se folosete ? pentru a se face referire la elementul curent din list.
Aici sunt cteva exemple de ulilizare a map:
show map [? < 0] [1 -1 3 4 -2 -10]
;; prints [false true false false true true]
show map [? * ?] [1 2 3]
;; prints [1 4 9]

n afar de map i foreach, alte primitive utilizate n procesarea listelor ntregi ntr-un mod
configurabil includ filter, reduce, i sort-by.
Aceste primitive nu reprezint ntotdeauna o soluie pentru fiecare situaie n care se dorete
operarea cu o list ntreag. n anumite situaii, este posibil s fie necesar folosirea altor tehnici,
cum ar fi utilizarea unor bucle repeat sau while, sau o prodecud recursiv.
Blocurile de cod furnizate la map i foreach n aceste exemple sunt n realitate sarcini. Sarcinile
sunt explicate mai detaliat in Sarcini, mai jos.
Numrul variabil de intrri
Unele comenzi i raportori care implic liste i iruri de caractere pot avea un numr variabil de
intrri. n aceste cazuri, pentru a le transmite un numr de intrri diferit de cel implicit, primitivele i
intrrile lor trebuiesc ncadrate de paranteze. Iat cteva exemple:
show list 1 2
=> [1 2]
show (list 1 2 3 4)
=> [1 2 3 4]
show (list)
=> []

A se reine faptul c fiecare dintre aceste comenzi speciale are un numr implicit de intrri pentru
care nu sunt necesare parantezele. Primitivele ce au aceast capacitate sunt list, word,
sentence, map, i foreach.

21
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Listele de intrri
Anterior, s-a specificat faptul c seturile de ageni sunt ntr-o ordine aleatoare, de fiecare dat alta.
Dac se solicit ca agenii s efectueze o aciune nt-o ordine fix, atunci acetia trebuie ordonai
ntr-o list.
Exist dou primitive ce se pot utiliza n acest sens, sort i sort-by.
Att sort ct i sort-by pot primi un set de ageni ca intrare. ntotdeauna, rezultatul este o nou
list, ce conine aceeai ageni ca i setul de ageni, dar ntr-o anumit ordine.
Dac se folosete sort pe un set de ageni turtle, rezultatul este o list de turtles sortai ascendent
dup numrul who.
Dac se folosete sort pe un set de ageni patch, rezultatul este o list de patch-uri ordonate de la
stnga la dreapta i de sus n jos.
Dac se folosete sort pe un set de ageni link, rezultatul este o list de link-uri ordonate
ascendent mai nti dup end1 i apoi dup end2 ; orice legturi rmase sunt gestionate de ras n
ordinea n care sunt declarate n tab-ul Code.
Dac n schimb e nevoie de o ordine descendent, se poate combina reverse cu sort, de
exemplu reverse sort turtles.
Dac se dorete ordonarea agenilor dup un alt criteriu dect cel standard folosit de sort, va fi
nevoie de utilizarea lui sort-by.
Iat un exemplu:
sort-by [[size] of ?1 < [size] of ?2] turtles

Aceasta returneaz o list de turtles sortai n ordine cresctoare dup variabila proprie size.
Cererea pentru o list de ageni
Odat ce exist o list a agenilor, se poate cere fiecruia s execute ceva. Pentru a face acest
lucru, se folosesc combinat comenzile foreach i ask, astfel:
foreach sort turtles [
ask ? [
...
]
]

Astfel, se cere fiecrui turtle ordonarea ascendent dup numrul who. Pentru a cere patch-uri
ordonate de la stnga la dreapta i de sus n jos, se va nlocui turtles cu patches.
A se reine c nu se poate utiliza ask direct pentru o list de turtles. ask funcioneaz numai pentru
seturi de ageni i cu ageni individuali.

22
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Performana listelor
Structura de date care st la baza listelor NetLogo este un tip de arbore, unde cele mai multe
operaiuni ruleaz n timp aproape constant. Aceasta include fput, lput, butfirst, butlast,
length, item, i replace-item.
O excepie de la regula performanei rapide este c nlnuirea a dou liste cu sentence necesit
parcurgerea i copierea n ntregime a celei de-a doua liste. (Acest lucru va fi poate mbuntit ntro versiune viitoare.)
Din punct de vedere tehnic, timpul aproape constant este, de fapt, timp logaritmic, proporional cu
adncimea arborelui; ns aceti arbori au noduri mari i un factor de ramificare ridicat, astfel nct
ei nu au niciodat mai mult de cteva nivele. Acest lucru nseamn c modificrile pot fi fcute n
cel mult civa pai. Arborii sunt invariabili, dar pot avea o structur comun unul cu cellalt, astfel
nct nu este necesar s fie copiat ntreg arborele pentru a crea o versiune modificat.

2.3. Matematic
Toate numerele din NetLogo sunt stocate intern ca numere de dubl precizie n virgul mobil, aa
cum sunt definite n standardul IEEE 754. Acestea sunt numere pe 64 bii, constnd dintr-un un bit
de semn, un exponent de 11 bii, i o mantis de 52 de bii. A se vedea standardul IEEE 754 pentru
detalii.
Un "numr ntreg" n NetLogo este pur i simplu un numr care se ntmpl s nu aib nici o parte
fracionar. Nu se face nici o distincie ntre 3 i 3.0; ele reprezint acelai numr. (Acest lucru este
similar cu modul n care majoritatea oamenilor folosesc numerele n viaa de zi cu zi, dar diferit de
anumite limbaje de programare. Unele limbaje trateaz numerele ntregi i cele n virgul mobil ca
fiind de tipuri distincte.)
ntregii sunt ntotdeauna tiprii de NetLogo fr coada "0.0":
show 1.5 + 1.5
observer: 3

n cazul n care un numr cu o parte fracionar apare ntr-un context n care se ateapt un numr
ntreg, partea fracionar este pur i simplu ndeprtat. Deci, de exemplu, crt 3.5 creeaz trei
turtles, 0.5 fiind ignorat.
Gama de numere ntregi este de +/-9007199254740992 (2^53, aproximativ 9 cvadrilioane).
Calculele care depesc acest interval nu vor provoca erori de execuie, dar precizia va avea mult
de suferit n cazul n care cifrele cel mai puin semnificative (binare) sunt rotunjite, pentru a se
ncadra ntr-un numr pe 64 de bii. n cazul numerelor foarte mari, aceast rotunjire poate duce la
comportamente imprecise care pot fi surprinztoare:
show 2 ^ 60 + 1 = 2 ^ 60
=> true

23
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Calculele cu numere mai mici pot de asemenea produce rezultate surprinztoare dac implic pri
fracionare, ntruct nu toate fraciile pot fi reprezentate precis i pot aprea rotunjiri. De exemplu:
show 1 / 6 + 1 / 6 + 1 / 6 + 1 / 6 + 1 / 6 + 1 / 6
=> 0.9999999999999999
show 1 / 9 + 1 / 9 + 1 / 9 + 1 / 9 + 1 / 9 + 1 / 9 + 1 / 9 + 1 / 9 + 1 / 9
=> 1.0000000000000002

Orice operaiune care genereaz valorile speciale infinity sau no number, va provoca eroare de
execuie.
Notaie tiinific
Numerele cu virgul mobil foarte mari sau foarte mici sunt afiate de NetLogo folosind notaia
tiinific. Exemple:
show 0.000000000001
=> 1.0E-12
show 50000000000000000000
=> 5.0E19

Numerele din notaia tiinific se disting prin prezena literei E (exponent). Aceasta nseamn la
puterea a zecea. De exemplu, 1.0E-12 reprezint 1.0 ori 10 la puterea -12:
show 1.0 * 10 ^ -12
=> 1.0E-12

De asemenea, oricine poate folosi notaia tiinific n codul NetLogo:


show 3.0E6
=> 3000000
show 8.123456789E6
=> 8123456.789
show 8.123456789E7
=> 8.123456789E7
show 3.0E16
=> 3.0E16
show 8.0E-3
=> 0.0080
show 8.0E-4
=> 8.0E-4

Numerele cu pri fracionare sunt afiate folosind notaia tiinific dac exponentul este mai mic
dect -3 sau mai mare dect 6. Numerele aflate n afara intervalului ntreg NetLogo de la 9007199254740992 la -9007199254740992 (+/-2 ^ 53) sunt, de asemenea, reprezentate
ntotdeauna prin notaia tiinific:
show 2 ^ 60
=> 1.15292150460684698E18

Litera E poate fi majuscul sau nu. Cnd se afieaz un numr, NetLogo utilizeaz ntotdeauna un
E mare:
show 4.5e20
=> 4.5E20

24
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Acurateea virgulei
Deoarece numerele din NetLogo sunt supuse limitrilor legate de modul n care numerele cu virgul
sunt reprezentate binar, se pot obine rspunsuri uor inexacte. De exemplu:
show 0.1 + 0.1 + 0.1
=> 0.30000000000000004
show cos 90
=> 6.123233995736766E-17

Aceasta este o problem inerent aritmeticii fracionare, ea apare n toate limbajele de programare
care utilizeaz numerele cu virgul.
Dac se lucrez cu cantiti de precizie fixe, de exemplu cu dolari i ceni, o tehnic comun este
folosirea doar a numerelor ntregi (ceni) pe plan intern, apoi valoarea se mparte la 100 pentru a
obine un rezultat n dolari pentru a fi afiat.
Dac este necesar folosrea numerelor cu virgul, atunci n unele situaii este trebuie nlocuit un
test de egalitate simpl, cum ar fi if x = 1 [ ... ] cu un test ce permite uoare imprecizii, de
exemplu if abs (x - 1) < 0.0001 [ ... ].
De asemenea, primitiva precision este util pentru rotunjirea numerelor n scopuri de afiare. De
asemenea, monitoarele NetLogo rotunjesc numerele pe care le afieaz la un numar configurabil
de zecimale.

2.4. Numere aleatoare


Numerele aleatoare folosite de NetLogo sunt ceea ce se numete "pseudo-aleatoare". (Acest lucru
este tipic n programare.) Asta nseamn c, dei par aleatoare, ele sunt, de fapt, generate de un
proces determinist. Determinist nseamn c se obin aceleai rezultate de fiecare dat, dac se
pornete de la acelai seed.
n contextul unei modelri tiinifice, numerele pseudo-aleatoare sunt de fapt preferabile celor
aleatoaret. Aceasta deoarece este important ca un experiment tiinific s poat fi reprodus - ca
oricine s-l poat ncerca i s obin acelai rezultat. Deoarece NetLogo utilizeaz numere
pseudo-aleatoare, experimentele fcute cu el pot fi reproduse i de ctre alte persoane.
Iat cum funcioneaz: Generatorul NetLogo de numere aleatoare poate fi pornit cu o anumit
valoare seed, care trebuie s fie un numr ntreg n intervalul de la -2147483648 la 2147483647.
Odat ce generatorul a primit un seed cu comanda random-seed, acesta va genera ntotdeauna
aceeai secven de numere aleatoare. De exemplu, dac se execut aceste comenzi:
random-seed
show random
show random
show random

137
100
100
100

Se vor obine ntotdeauna numerele 79, 89, i 61, n aceast ordine.

25
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

A se reine, totui, c este garantat obinerea acelorai numere doar dac se utilizeaz aceeai
versiune de NetLogo. Uneori, atunci cnd se creeaz o nou versiune a NetLogo generatorul de
numere aleatoare se schimb. (n prezent, se folosete un generator cunoscut ca Mersenne
Twister.)
Pentru a obine un numr adecvat pentru generatea unui seed, se folosete raportorul new-seed.
Acesta creeaz un seed folosind ora i data curent. Acesta nu returneaz acelai seed de dou
ori la rnd.

Exemplu de cod: Random Seed Example


Dac nu se seteaz smna aleatoare, NetLogo i stabilete o valoare pe baza datei si orei
curente. Nu exist nici o cale de a afla care seed aleator a fost ales, deci, dac se dorete ca
execuia modelului s fie reproductibil, trebuie setat seed-ul n prealabil.
Primitivele NetLogo cu random n numele lor (random, random-float, i aa mai departe), nu sunt
singurii care utilizeaz numerele pseudo-aleatoare. Multe alte operaiuni fac, de asemenea, alegeri
aleatoare. De exemplu, seturile de ageni sunt ntotdeauna n ordine aleatoare, one-of i n-of
i aleg la ntmplare agenii, comanda sprout creeaz turtles cu culori i poziii aleatoare, iar
raportorul downhill alege un patch la ntmplare atunci cnd exist o egalitate. Toate aceste
alegeri aleatoare sunt reglementate de asemenea de seed-uri aleatoare, astfel nct rularea
modelului poate fi reprodus.
n plus fa de numerele ntregi aleatoare uniform distribuite i numerele cu virgul generate de
random i random-float, NetLogo ofer de asemenea cteva alte distribuii aleatoare. A se
consulta intrrile din dicionar pentru random-normal, random-poisson, randomexponential, i random-gamma.
Generatorul auxiliar
Codul executat de ctre butoane sau din centrul de comand folosete generatorul de numere
aleatoare principal.
Codul din monitoare folosete un generator aleator auxiliar, astfel nct, chiar dac un monitor face
un calcul care utilizeaz numere aleatoare, rezultatul modelului nu este afectat. Acelai lucru este
valabil pentru codurile din cursoare.
Dezordinea pe loc fix
Este de dorit s se specifice n mod explicit c o seciune a codului nu afecteaz starea
generatorului principal de numere aleatoare, astfel nct rezultatul modelului s nu fie afectat.
Comanda with-local-randomness este prevzut n acest scop. A se vedea intrarea sa n
NetLogo Dictionary pentru mai multe informaii.

2.5. Forme turtle

26
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

n NetLogo, formele de turtle sunt vectoriale. Ele sunt construite din forme geometrice de baz:
ptrate, cercuri i linii, mai degrab dect dintr-o reea de pixeli. Formele vectoriale sunt complet
scalabile i rotabile. NetLogo utilizeaz imagini bitmap ale formelor vectoriale de dimensiuni de 1,
1.5 i 2, pentru a accelera execuia.
Forma unui turtle este stocat n variabila shape i poate fi setat folosind comanda set.
Turtles noi au o form implicit. Primitiva set-default-shape modific forma implicit a turtle.
Primitiva shapes raporteaz lista a formelor disponibile la acel moment n model. Acest lucru este
util, de exemplu, dac se intenioneaz atribuirea unei forme aleatoare unui turtle:
ask turtles [ set shape one-of shapes ]

Se utilizeaz Turtle Shapes Editor pentru a crea forme proprii de turtle, sau pentru a aduga forme
pentru modele din biblioteca de forme, sau pentru a transfera forme ntre diferite modele. Pentru
mai multe informaii, consultai seciunea Shapes Editor din acest manual.
Grosimea liniilor folosite pentru a desena formele vectoriale poate fi controlat de ctre primitiva
set-line-thickness.
Exemplu de cod: Breeds i Shapes Example, Shape Animation Example

2.6. Forme link


Formele link sunt similare cu formele turtle, doar c se folosete Link Shape Editor pentru a le crea
i edita. Formele link sunt alctuite din 0 pn la 3 linii care pot avea diferite tipare, i dintr-un
indicator de direcie, care este compus din aceleai elemente ca i formele turtle. Link-urile au, de
asemenea, o variabil shape care poate fi setat oricrei forme link din model. Prin link-urile
implicite se obine forma "default", dei exist posibilitatea de a modifica acest lucru utiliznd setdefault-shape. Raportorul link-shapes raporteaz toate formele link incluse n modelul
actual.
Grosimea liniilor din formele link este controlat de ctre variabila link thickness.

2.7. Vizualizarea actualizrilor


Meniul "View" n NetLogo permite vizualizarea agenilor modelului existent pe ecranul computerului
observnd cum agenii se mic sau i schimb starea.
NetLogo creeaz o imagine care va permite s vedei cum arat agenii la un anumit moment dat.
Odat cu trecerea timpului, agenii i modific starea i astfel imaginea trebuie s fie actualizat.
NetLogo ofer dou moduri de actualizri, "continue" i "bazate pe tick-uri". Se poate comuta ntre
cele dou tipuri de actualizri, folosind un meniu pop-up din partea de sus a tabului Interface.

27
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Actualizrile continue sunt implicite la pornirea NetLogo sau cnd se creeaz un nou model.
Aproape fiecare model din biblioteca de modele folosete actualizri bazate pe tick-uri.
Actualizrile continue sunt mai simple, dar cele bazate pe tick-uri ofer mai mult control asupra
momentului n care se realizeaz actualizrile i asupra frecvenei cu care acestea se produc.
Este important momentul n care se realizeaz o actualizare, deoarece atunci se determin ceea ce
se afieaz pe ecran. Dac o actualizare se efectueaz ntr-un moment neateptat, s-ar putea
vedea ceva ce poate crea confuzie sau ceva ce poate induce n eroare.
Este important ct de des se realizeaz actualizrile, deoarece acestea necesit timp. Cu ct
NetLogo petrece mai mult timp pentru actualizarea imaginii, cu att va rula mai lent modelul creat.
Cu ct sunt mai puine actualizri, cu att modelul ruleaz mai repede.
Actualizri continue
Actualizrile continue sunt foarte simple. NetLogo actualizeaz imaginea de un anumit numr de ori
pe secund - implicit de 30 de ori pe secund atunci cnd slider-ul de vitez este n poziia
implicit, la mijloc.
Dac slider-ul de vitez este mutat la o setare mai lent, NetLogo va actualiza mai mult de 30 de ori
pe secund, ncetinind efectiv modelul. Pe o setare mai rapid, NetLogo va actualiza mai puin de
30 de ori pe secund. Pe setri rapide, actualizrile succesive vor fi separate de mai multe
secunde.
La setri extrem de lente, NetLogo va actualiza att de des nct se vor vedea agenii micndu-se
(sau schimbndu-i culoarea, etc), unul cte unul.
Dac este nevoie s se dezactiveze temporar actualizrile continue, se va utiliza comanda nodisplay. Comanda display pornete din nou actualizrile i foreaz, de asemenea, o
actualizare imediat (dac utilizatorul nu seteaz modelul pe fast forward, folosind slider-ul de
vitez).
Actualizrile bazate pe tick-uri
Aa cum s-a discutat mai sus n seciunea Tick Counter, n unele modele NetLogo, timpul trece n
pai discrei, numii "tick"-uri. De obicei, se dorete vizualizarea actualizrilor o dat pe tick, ntre
tick-uri. Acesta este comportamentul implicit al actualizrilor bazate pe tick-uri.
Dac se doresc actualizri suplimentare, se poate fora o actualizare folosind comanda display
(actualizarea poate fi omis n cazul n care utilizatorul foreaz modelul pe fast forward, folosind
slider-ul de vitez).

28
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Nu trebuie s se utilizeze tick counter-ul pentru a folosi actualizri bazate pe tick-uri. n cazul n
care tick counter-ul nu avanseaz niciodat, imaginea se va actualiza numai atunci cnd se
utilizeaz comanda display.
Dac slider-ul de vitez va fi mutat la o setare mai rapid, n cele din urm NetLogo va sri peste o
parte din actualizrile care s-ar fi realizat n mod normal. Mutarea cursorului de vitez la o setare
mai lent nu produce actualizri suplimentare, NetLogo face o pauza dup fiecare actualizare. Cu
ct viteza este mai lent, cu att pauza va fi mai lung.
Chiar i n cazul actualizrilor bazate pe tick-uri, imaginea se actualizeaz ori de cte ori se
declaneaz un buton din interfa (att butoanele "once", ct i cele "forever"), i atunci cnd o
comand dat n Command Center se termin de executat. Nu este necesar adugarea comenzii
display pentru butoanele "once" care nu incrementeaz tick counter-ul. Multe butoane
permanente care nu incrementeaz tick counter-ul trebuie s foloseasc comanda display. Un
exemplu din Libraria de modele este modelul Life (Computer Science - > Cellular Automat).
Butoanele permanente, care permit utilizatorului s traseze linii n imagine, utilizeaz comanda
display, astfel nct utilizatorul s poat vedea ceea ce se traseaz, chiar dac tick counter-ul
nu se incrementeaz.
Alegerea unui mod
Avantajele actualizrilor bazate pe tick-uri fa de actualizrile continue includ:
1. Un comportament consecvent, previzibil, al actualizrilor care nu variaz de la calculator
la calculator sau de la rulare la rulare.
2. Actualizrile continue pot crea confuzie, afind stri nedorite ale modelului, ceea ce
poate conduce la o eroare.
3. Viteza crescut. Actualizarea imaginii necesit timp; astfel, dac o actualizare pe tick
este suficient, atunci modelul va rula mai rapid.
4. Deoarece butoanele de setup nu incrementeaza tick counter-ul, ele nu sunt afectate
de slider-ul de vitez; acesta este, de cele mai multe ori, comportamentul dorit.
Dup cum s-a menionat mai sus, cele mai multe modele din biblioteca de modele folosesc
actualizrile bazate pe tick-uri.
Actualizrile continue sunt utile pentru modelele a cror execuie nu este mprit n faze scurte i
discrete. Un exemplu din biblioteca de modele sunt Termitele (Termites). (A se vedea, de
asemenea, exemplul cu modelul State Machine, care arat cum s recodm Termitele, folosind
tick-urile).
Comutarea temporar la actualizri continue ar putea fi util pentru scopuri de depanare chiar si
pentru modelele care n mod normal sunt setate pe actualizri bazate pe tick-uri. Vizualizarea a
ceea ce se ntmpl ntr-un tick, n loc de rezultatul final, ar putea ajuta la depanare. Dup trecerea
la actualizri continue, s-ar putea utiliza slider-ul pentru a ncetini viteza modelului pn cnd se vor

29
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

vedea agenii micndu-se unul cte unul. Este necesar revenirea la actualizrile bazate pe tickuri, deoarece alegerea modului de actualizare este salvat odat cu modelul.
Frame rate
Una dintre setrile modelului din NetLogo este "rata cadrelor" (frame rate), care este implicit setat
la 30 de cadre pe secund.
Setarea de cadre afecteaz att actualizrile continue ct i actualizrile bazate pe tick-uri.
n cazul actualizrilor continue, setarea determin n mod direct frecvena de actualizri. n cazul
celor bazate pe tick-uri, setarea este un plafon pentru ct de multe actualizri pe secund se
efectueaz. Dac rata este de 30, atunci NetLogo va asigura faptul c modelul nu ruleaz mai rapid
atunci cnd slider-ul de vitez este n poziia implicit. Dac procesarea oricrui cadru dureaz mai
puin de 1/30 secunde, NetLogo va face o pauz i va atepta pn cnd vor trece cele 1/30
secunde nainte de a continua.

3.1 . Trasarea (Plotarea)


nainte de plotare, trebuie create una sau mai multe parcele n tab-ul Interface. Pentru mai multe
informaii cu privire la utilizarea i editarea parcelelor, se va consulta Ghidul de interfa (Interface
Guide).
Puncte de plotare
Cele dou comenzi de baz pentru plotare sunt plot i plotxy.
Pentru plot trebuie specificat doar valoarea y care va fi reprezentat. Valoarea x va fi n mod
automat 0 pentru primul punct trasat, 1 pentru al doilea, i aa mai departe. (Asta dac "intervalul"
de trasare are valoarea implicit 1, se poate schimba intervalul dac se dorete acest lucru).
Comanda plot este deosebit de util atunci cnd se dorete ca modelul s traseze un nou punct
la fiecare pas. Exemplu:
plot count turtle

Dac se dorete specificarea att a valorilor lui x, ct i celor ale lui y ale punctului dorit, se va
utiliza plotxy. Acest exemplu presupune c exist o variabil global numit time:
plotxy time count-turtles

Comenzile plot

30
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Fiecare parcel i stilourile (pens) sale de trasat au domenii de configurare i actualizare care pot
conine comenzi (de obicei, plot sau plotxy). Aceste comenzi sunt rulate automat cnd sunt
declanate de alte comenzi n NetLogo.
Comenzile pentru configurarea plotului i comenzile pentru configurarea instrumentelor de trasat
sunt rulate atunci cnd sunt lansate comenzile reset-ticks sau setup-plots. n cazul n care
comanda stop se execut n corpul de configurare al plotrii atunci comanda pentru configurarea
instrumentelor de trasare nu va fi rulat.
Comenzile pentru actualizarea plotrii i cele pentru actualizarea instrumentelor de trasat sunt
rulate atunci la execuia uneia din urmtoarele comenzi: reset-ticks, tick sau updateplots. n cazul n care comanda stop se execut n corpul de actualizare al plotrii, comanda
pentru actualizarea instrumentelor de trasare nu va fi rulat.
In continuare vor fi prezentate patru comenzi care declaneaz trasarea, explicate mai detaliat.
setup-plots execut comenzile pentru un plot la un moment dat, comanda rulnd pentru
fiecare plot n parte. n cazul n care comanda de oprire nu este ntlnit n timp ce ruleaz
acele comenzi, fiecare dintre instrumentele de trasat vor avea codul de configurare
executat.
update-plots este foarte similar cu setup-plots. Pentru fiecare plot, comenzile de
actualizare ale plotului sunt executate. n cazul n care comanda de oprire nu este ntlnit
n timp ce execut aceste comenzi, fiecare dintre instrumentele de trasat vor avea codul
de actualizare executat.
tick este exact la fel ca update-plots cu excepia faptului c tick-counter-ul este
incrementat nainte de a executa comenzile de plotare.
reset-ticks reseteaz nti tick-counter-ul la 0, i apoi face echivalentul lui setupplots urmat de update-plots.
Un model tipic va folosi reset-ticks i tick astfel:
to setup
clear-all
...
reset-ticks
end
to go
...
tick
end

De reinut c n acest exemplu s-au plotat procedurile setup i go (deoarece reset-ticks


ruleaz comenzile pentru configurarea i actualizarea plotului). S-a fcut acest lucru deoarece
plotul trebuie s includ starea iniial a sistemului dupa procedura setup. S-a plotat la sfritul
procedurii go, i nu la nceput, deoarece plotul trebuie s fie ntotdeauna actualizat dup ce se
oprete butonul Go.

31
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Modelele care nu utilizeaz tick-uri, dar doresc s fac trasarea, vor folosi n schimb setup-plots
i update-plots. n codul anterior, nlocuii reset-ticks cu setup-plots update-plots i
nlocuii tick cu update-plots.

Exemplu de cod: Plotting Example

n mod implicit, instrumentul de trasare n NetLogo este setat pe modul linie, astfel nct punctele
trasate sunt conectate printr-o linie.
Dac se dorete mutarea stiloului (pen-ului) fr a trasa, se va folosi comanda plot-pen-up.
Dup ce aceast comand este apelat, comenzile plot i plotxy mut stiloul, fr a trasa nimic.
Odat ce pointer-ul este acolo unde se dorete, se va utiliza comanda plot-pen-down pentru a
activa din nou stiloul.
Dac se dorete plotarea unor puncte individuale n loc de linii, sau se dorete trasarea barelor n
loc de linii sau puncte, trebuie schimbat "modul" stilou al plotului. Sunt disponibile trei moduri: linie
(implicit), bar i punct. Este posibil schimbarea temporar a modului stilou folosind comanda
set-plot-pen-mode. Comanda primete un numr drept intrare: 0 pentru linie, 1 pentru bar, 2
pentru punct.
Histograme
O histogram este un tip special de plotare care msoar ct de frecvent apar anumite valori ntr-o
colecie de numere din model.
De exemplu, se presupune c agenii turtle din model au o vrst variabil. Se va putea crea o
histogram a distribuiei vrstelor agenilor turtle folosind comanda:
histogram [age] of turtles

Numerele din histogram nu trebuie neaprat s provin dintr-un set, acestea ar putea fi din orice
list de numere.
Utilizarea comenzii histogram nu schimb automat modul stilou n modul bare. Pentru aceasta,
trebuie setat acest mod manual. (Aa cum am spus nainte, se poate schimba modul implicit stilou
prin editarea plotului n tab-ul Interface.)
Limea barelor ntr-o histogram este controlat de intervalul stiloului din plot. Se poate seta
intervalul implicit prin editarea plotului n tab-ul Interface. De asemenea, se poate schimba temporar
intervalul folosind comenzile set-plot-pen-interval sau set-histogram-num-bars. Dac
se utilizeaz comanda din urm, NetLogo va seta intervalul corespunztor, astfel nct numrul
specificat de bare s se potriveasc n gama axei x.

32
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Exemplu de cod: Histogram Example

tergerea i resetarea
Se poate terge plot-ul curent folosind comanda clear-plot, sau se pot sterge toate plot-urile din
model folosind clear-all-plots. Comanda clear-all elimin, de asemenea, toate ploturile,
i terge orice altceva din model.
Dac se dorete eliminarea punctelor create cu un anumit stilou, se va utiliza comanda plot-penreset.
Atunci cnd un ntreg plot este ters, sau atunci cnd un stilou este resetat, nu se elimin doar
datele care au fost reprezentate grafic, ci se restabilete, de asemenea, plot-ul sau stiloul la setrile
implicite, aa cum au fost specificate n tab-ul Interface atunci cnd plot-ul a fost creat sau editat
ultima dat. Prin urmare, efectele comenzilor precum set-plot-x-range i set-plot-pencolor sunt doar temporare.
Limite i scalare automat
Limitele implicite x i y ale unui plot sunt numere fixe, dar ele pot fi modificate n timpul configurrii
sau pe msur ce modelul ruleaz.
Pentru a modifica limitele n orice moment, se utilizeaz set-plot-x-range i set-plot-yrange. Sau, se pot lsa intervalele s creasc n mod automat. n orice caz, atunci cnd plotul este
ters, limitele vor reveni la valorile lor implicite.
n mod implicit, toate ploturile din NetLogo au funcia de autoscalare activat. Aceasta nseamn
c, dac modelul ncearc s ploteze un punct care este n afara limitelor de afiare, limita de
plotare va crete de-a lungul uneia sau a ambelor axe, astfel nct noul punct s fie vizibil.
n ipoteza c intervalele nu vor trebui schimbate de fiecare dat cnd se adaug un nou punct,
atunci cnd limitele cresc, ele las un spaiu suplimentar: 25% dac cresc orizontal, 10% n cazul n
care cresc pe vertical.
Dac se dorete dezactivarea acestei caracteristici, se va edita plotul i se va debifa Auto Scale. n
prezent, nu este posibil activarea sau dezactivarea aceastei funcii doar pe o singur ax, se
aplic ntotdeauna la ambele axe.
Folosirea legendei
Se poate afia legenda unui plot bifnd casua "Show legend" n caseta de dialog edit. Dac nu se
dorete ca un anumit stilou s apar n legend, se poate debifa casua "Show legend" pentru
33
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

stiloul respectiv, de asemenea, n setrile avansate pentru plot (setrile avansate pentru plot pot fi
deschise dnd click pe butonul cu iconia creion pentru stiloul respectiv n tabelul de stilouri n
caseta de dialog plot edit).
Stilouri temporare
Cele mai multe ploturi se pot obine cu un numr fix de stilouri. Dar unele ploturi sunt mai complexe;
acestea pot avea nevoie de mai multe stilouri n funcie de condiii. n astfel de cazuri, se pot crea
stilouri "temporare" din cod i apoi se pot plota cu ele. Aceste stilouri dispar atunci cnd plotul este
eliminat (de catre clear-plot, clear-all-plots sau clear-all).
Pentru a crea un stilou temporar, se va utiliza comanda create-temporary-plot-pen. De
obicei, acest lucru ar putea fi fcut n tab-ul Code, dar este, de asemenea, posibil s se utilizeze
aceast comand din configurarea plotului sau din codul de actualizare al plotului (n caseta de
dialog Edit). n mod implicit, noul stilou este activat, are culoarea neagr, un interval de 1, i
ploteaza n modul linie.
nainte de a putea utiliza stiloul, vor trebui lansate comenzile set-current-plot i setcurrent-plot-pen.
set-current-plot i set-current-plot-pen
nainte de NetLogo 5, nu a fost posibil specificarea comenzilor direct n plotul de sine stttor. Tot
codul plotului era scris n tab-ul Code, mpreun cu restul codului. Pentru compatibilitatea cu
modelele mai vechi, i pentru ploturile temporare, aceast caracteristic este n continuare valabil.
Modelele din versiunile anterioare ale NetLogo (i cele care folosesc plotrile cu stilourile
temporare) trebuie s precizeze n mod explicit care plot este cel curent folosind comanda setcurrent-plot i care stilou este cel curent folosind comanda set-current-plot-pen.
Pentru a seta plotul curent folosim comanda set-current-plot cu numele plotului scris n
ghilimele:
set-current-plot "Distance vs. Time"

Numele plotului trebuie s fie exact asa cum a fost introdus atunci cnd a fost creat. Ulterior, dac
se schimb numele plotului, vor trebui actualizate apelurile set-current-plot n model pentru a
folosi noul nume. (Copy-paste poate fi de ajutor aici.)
Pentru un plot cu mai multe stiluri, se poate specifica manual care stilou s fie folosit pentru plotare.
Dac nu este specificat nici un stilou, plotarea va avea loc cu primul stilou din plot. Pentru a plota
cu un stilou diferit, se folosete comanda set-current-plot-pen cu numele stiloului ntre
ghilimele:
set-current-plot-pen "distance"

34
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Odat ce stiloul curent este stabilit, comanda plot count turtle poate fi executat pentru acel
stilou.
Modelele mai vechi cu ploturi au, de obicei, propria lor procedur do-plotting care arat astfel:
to do-plotting
set-current-plot "populations"
set-current-plot-pen "sheep"
plot count sheep
set-current-plot-pen "wolves"
plot count wolves
set-current-plot "next plot"
...
end

Acest lucru nu mai este necesar n NetLogo 5, cu excepia cazului n care se utilizeaz stilouri de
plotare temporare.
Concluzii
Nu au fost explicate toate aspectele sistemului de plotare n NetLogo. Pentru mai multe informaii
despre comenzile adiionale i reporteri relaionari cu plotarea vizitai seciunea Plotting din
dicionarul NetLogo.
Majoritatea modelelor din biblioteca de modele ilustreaz diverse tehnici avansate de plotare. De
asemenea, analizai i urmtoarele exemple de cod:

Exemplu de cod: Plot Axis Example, Plot Smoothing Example, Rolling Plot Example

3.2 . iruri de caractere


irurile de caractere pot conine orice caracter Unicode.
Pentru a introduce o constant de tip ir de caractere n NetLogo, aceasta se va ncandra ntre
ghilimele.
irul gol este scris astfel: " ".
Majoritatea primitivelor de list funcioneaz i cu iruri de caractere, precum:
but-first "string" => "tring"
but-last "string" => "strin"
empty? "" => true
empty? "string" => false
first "string" => "s"
item 2 "string" => "r"

35
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

last "string" => "g"


length "string" => 6
member? "s" "string" => true
member? "rin" "string" => true
member? "ron" "string" => false
position "s" "string" => 0
position "rin" "string" => 2
position "ron" "string" => false
remove "r" "string" => "sting"
remove "s" "strings" => "tring"
replace-item 3 "string" "o" => "strong"
reverse "string" => "gnirts"

Cteva primitive sunt specifice irurilor de caractere, cum ar fi is-string?, substring, word:
is-string? "string" => true
is-string? 37 => false
substring "string" 2 5 => "rin"
word "tur" "tle" => "turtle"

irurile de caractere pot fi comparate cu ajutorul operatorilor: =, !=, <, >, <=, >=.
Dac se dorete ncorporarea unui caracter special ntr-un ir, se vor utiliza urmtoarele secvene:
\n = linie nou
\t = tab
\" = ghilimele
\\ = backslash

3.3 . Ieire (Output)


Aceast seciune trateaz problema afirii pe ecran. Ieirea la ecran poate fi, de asemenea,
salvat ntr-un fiier folosind comanda export-output. Dac este nevoie de o metod mai
flexibil de a scrie date n fiierele externe, se va consulta seciunea urmtoare, File I/O.
Comenzile de baz pentru generarea ieirii pe ecran n NetLogo sunt print, show, type i
write. Aceste comenzi trimit ieirea lor la Centrul de Comanda. Pentru informii complete legate
de aceste patru comenzi, vezi detaliile lor n dicionarul NetLogo. Iat cum sunt acestea utilizate de
obicei:

print este util n majoritatea situaiilor.


show permite s vedem ce anume afieaz fiecare agent.
type permite afiarea mai multor elemente pe aceeai linie.
write permite afiarea valorilor ntr-un format care poate fi citit apoi folosind file-read.

Un model NetLogo poate avea, opional, o "zon de ieire", n tab-ul su de interfa, pe lng
Command Center. Pentru a trimite dateel de ieire n acea zon n loc de Centrul de Comand, se
vor utiliza comenzile output-print, output-show, output-type si output-write.

36
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Zona de ieire poate fi tears folosind comanda clear-output i salvat ntr-un fiier folosind
comanda export-output. Coninutul zonei de ieire va fi salvat prin comanda export-world.
Comanda import-world terge zona de ieire i seteaz coninutul su la valoarea din fiierul
importat. Trebuie remarcat faptul c o cantitate mare de date trimis la zona de ieire poate mri
dimensiunile fiierelor exportate.
Dac se utilizeaz output-print, output-show, output-type, output-write, clearoutput sau export-output ntr-un model care nu are o zon de ieire separat, atunci
comenzile se aplic pentru poriunea de ieire din centrul de comand.

3.4 . Fiiere I/O (input/output)


n NetLogo, exist un set de primitive care ofer posibilitatea de a interaciona cu fiierele din
exterior. Toate ncep cu prefixul file-.
Exist dou moduri principale atunci cnd se lucreaz cu fiiere: citire i scriere. Diferena este
direcia fluxului de date. Atunci cnd se citesc informaiile dintr-un director, datele care sunt stocate
n fiier sunt transferate n model. Pe de alt parte, scrierea permite ca datele s se transfere din
model ctre un fiier.
Atunci cnd un model NetLogo ruleaz ca un applet ntr-un browser web, acesta va avea doar
posibilitatea de a citi datele din fiierele care sunt n acelai director cu modelul. Applet-urile nu pot
scrie n toate fiierele.
Atunci cnd se lucreaz cu fiiere, ntotdeauna se utilizeaz mai nti primitiva file-open.
Aceasta specific fiierul cu care se va interaciona. Nici una din celelalte primitive nu vor funciona
dect dac se deschide mai nti un fiier.
O alt primitiv pentru fiiere specific modul n care se va gsi fiierul pn cnd acesta va fi
nchis: citire sau scriere. Pentru a comuta ntre cele dou moduri, vom nchide i apoi vom
redeschide fiierul.
Primitivele pentru citire includ: file-read, file-read-line, file-read-characters i
file-at-end?. Fiierul trebuie s existe deja, nainte de a putea fi deschis pentru citire.

Exemplu de cod: File Input Example

Primitivele pentru scriere sunt similare cu cele de afiare n Command Center, cu excepia faptului
c ieirea se salveaz ntr-un fiier. Acestea includ file-print, file-show, file-type i
file-write. De reinut este faptul c nu se pot "suprascrie" date. Cu alte cuvinte, dac se
ncearc scrierea ntr-un fiier cu date existente, toate datele noi vor fi adaugate la sfritul

37
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

fiierului. (Dac se dorete suprascrierea ntr-un fiier, se va utiliza file-delete pentru a-l
terge, apoi trebuie deschis pentru scriere.)

Exemplu de cod: File Output Example

Cnd s-a ncheiat lucrul cu un fiier, se poate folosi comanda file-close pentru terminarea
sesiunii de utilizare a fiierului. Dac ulterior se dorete tergerea fiierului, se va utiliza primitiva
file-delete. Pentru a nchide mai multe fiiere deschise, trebuie selectat mai nti fiierul
utiliznd file-open nainte de a-l nchide.
;; Open 3
file-open
file-open
file-open

files
"myfile1.txt"
"myfile2.txt"
"myfile3.txt"

;; Now close the 3 files


file-close
file-open "myfile2.txt"
file-close
file-open "myfile1.txt"
file-close

Sau, dac se vrea nchiderea tuturor fiierelor, se va utiliza file-close-all.


Dou primitive demne de remarcat sunt file-write i file-read. Acestea sunt salveze i
preiau constante din NetLogo, cum ar fi numere, liste, constante de tip boolean i iruri de
caractere. Primitiva file-write va afia ntotdeauna variabilele astfel nct primitiva file-read
s le poat interpreta corect.
file-open "myfile.txt" ;; Opening file for writing
ask turtles
[ file-write xcor file-write ycor ]
file-close
file-open "myfile.txt" ;; Opening file for reading
ask turtles
[ setxy file-read file-read ]
file-close

Exemplu de cod: File Input Example i File Output Example

Primitivele user-directory, user-file i user-new-file sunt utile atunci cnd se las


libertatea utilizatorului de a alege un fiier sau director de lucru.

38
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

3.5 . Capturarea de filme


Aceast seciune descrie modul n care se poate captura un film QuickTime al unui model NetLogo.
Mai nti, se va utiliza comanda movie-start pentru a ncepe un film nou. Numele fiierului va
trebui s se termine cu extensia .mov, specific filmelor QuickTime.
Pentru a aduga un cadru la film, folosim fie movie-grab-view sau movie-grab-interface,
n funcie de ceea ce dorim s apar n film: doar vizualizarea curent sau ntregul tab Interface.
ntr-un singur film, trebuie utilizat o singur dat primitiva movie-grab- sau oricare alta; nu pot fi
amestecate. Cnd am terminat de adugat cadre, utilizm movie-close.
;; export a 30 frame movie of the view
setup
movie-start "out.mov"
movie-grab-view ;; show the initial state
repeat 30
[ go
movie-grab-view ]
movie-close

n mod implicit, un film va rula cu 15 cadre pe secund. Pentru a crea un film cu un alt frame rate,
se va apela movie-set-frame-rate, cu un numr diferit de cadre pe secund. Trebuie setat
numrul de cadre pe secund, dup movie-start, dar nainte de a capta vreun cadru.
Pentru a verifica frame rate-ul filmului sau pentru a vedea numrul de cadre capturate, se va apela
movie-status, care raporteaz un ir de caractere ce descrie starea filmului curent.
Pentru a renuna la un film i pentru a-l terge, se folosete movie-cancel.

Exemplu de cod: Movie Example

Filmele pot fi generate doar de NetLogo GUI, dar nu atunci cnd ruleaza fr header sau cnd n
fundal se execut un model n paralel.
Filmele NetLogo sunt exportate ca fiiere QuickTime necomprimate. Pentru a reda un film
QuickTime, se poate folosi QuickTime Player, un soft care se descarc gratuit de la Apple.
Avnd n vedere c filmele nu sunt arhivate, ele pot ocupa mult spaiu pe disc. Cel mai probabil se
va dori comprimarea filmelor cu un software third-party. Software-ul poate oferi diferite tipuri de
compresie. Unele tipuri de compresie sunt fr pierderi, n timp ce altele au pierderi. "Pierderile"
nseamn c, pentru reducerea dimensiunii fiierelor, unele detalii din film se pierd. n funcie de
natura modelului, se poate dori evitarea compresiei cu pierderi, de exemplu, n cazul n care filmul
conine detalii de finee, la nivel de pixel.

39
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Un pachet software care poate comprima filmele QuickTime att pe Mac cat i pe Windows este
QuickTime Pro. Pe Mac, iMovie funcioneaza la fel de bine. Compresia cu PNG este un bun
exemplu de compresie fr pierderi.

3.6. Perspectiva
Vizualizrile 2D i 3D arat modelul din punctul de vedere al observatorului. n mod implicit,
observatorul privete modelul din originea spre sensul pozitiv al axei Z. Se poate schimba punctul
de vedere al observatorului, prin utilizarea follow, ride si watch (comenzi pentru observator) i
follow-me, ride-me si watch-me (comenzi pentru agentul turtle). n modul follow sau modul
ride, observatorul se deplaseaz odat cu agentul. Diferena dintre follow i ride este vizibil doar n
vederea 3D. n vederea 3D utilizatorul poate modifica distana din spatele agentului folosind mouseul. Atunci cnd observatorul urmeaz agentul de la distana zero el de fapt se afla n modul ride. n
cazul n care observatorul este n modul watch, el urmrete micrile unui agent turtle fr s se
mite. n ambele vizualizri se va vedea un prim-plan, iar n vederea 3D observatorul se va ntoarce
cu faa ctre subiect. Pentru a determina agentul care este folosit se va utiliza reporterul subject.

Exemplu de cod: Plot Axis Example, Plot Smoothing Example, Rolling Plot Example

3.7 . Spaiul de desen


Spaiul de desen este un layer unde agenii turtle pot face semne vizibile.
El apare deasupra patch-urilor, dar sub agenii turtle. Iniial, este gol i transparent. Se poate
observa acest spaiu, ns agenii turtle (i patch-urile) nu pot percepe desenul i nu pot reaciona
la el.
Agenii turtle pot desena i terge liniile din desen utiliznd comenzile pen-down i pen-erase.
Cnd stiloul unui agent turtle este jos (sau pe modul de tergere), agentul turtle traseaz (sau
terge) o linie n spatele su ori de cte ori se mic. Liniile sunt de aceeai culoare ca i agentul.
Pentru a opri desenarea (sau tergerea), se folosete pen-up.
Liniile trasate de agenii turtle au n mod normal grosimea de un pixel. Dac se dorete o grosime
diferit, se va seta variabila agentului pen-size la un numar diferit nainte de a trasa (sau terge).
Pentru agenii noi, variabila este setat la 1.
Liniile trasate atunci cnd un agent se deplaseaz ntr-o direcie imprecis, cum rezult din
utilizarea setxy sau move-to, vor fi trasate pe cea mai scurt direcie care satisface topologia
curent.

40
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Iat ctiva ageni turtle care au realizat un desen pe o grila cu patch-uri colorate aleator. Observai
cum agenii acopera liniile i liniile acoper culorile patch-ului. Pen-size-ul folosit aici a fost 2:

Comanda stamp permite unui agent turtle s lase o imagine a sa n urma n desen, iar stamperase permite eliminarea pixelilor de dedesubt n desen. Pentru a terge ntregul desen se va
utiliza comanda clear-drawing. (De asemenea, se poate folosi clear-all, care terge orice
altceva.)
Importarea unei imagini
Comanda import-drawing permite importarea unui fiier imagine de pe disc.
Este util doar pentru a furniza un fundal. Daca se dorete ca agenii turtle i patch-urile s
reacioneze la imagine, ar trebui utilizate comenzile import-pcolors sau import-pcolorsrgb.
Comparaie cu alte Logo-uri
Desenarea funcioneaz oarecum diferit n NetLogo dect n alte Logo-uri.
Diferenele semnificative includ:

Stilourile noilor ageni sunt sus, nu jos.


n loc de comanda fence pentru limitarea agentului turtle n interiorul granielor, n
NetLogo se editeaz lumea i se seteaz wrapping off.
Nu exist screen-color, bgcolor sau setbg. Background-ul poate fi fcut solid prin
colorarea patch-urilor, de exemplu ask patches [ set pcolor blue ].

Caracteristici care nu sunt acceptate de ctre NetLogo:

41
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Nu exist comanda window. Aceasta este utilizat n alte Logo-uri pentru a lsa agentul
turtle s se deplaseze pe un plan infinit.
Nu exist comenzile flood sau fill pentru a umple un spaiu nchis cu o culoare.

4.1 . Topologie
Modul n care mulimea de patch-uri este conectat se poate schimba. n mod implicit lumea este
un tor, ceea ce nseamn c este nemrginit, dar poate s nfoare, adic atunci cnd un agent
turtle trece de marginea lumii, el dispare i reapare pe marginea opus i fiecare patch are acelai
numr de patch-uri "vecine". n cazul unui un patch de la marginea lumii, o parte dintre "vecinii" si
sunt pe marginea opus.
Cu toate acestea, se pot modifica setrile de nfurare folosind butonul Settings. n cazul n care
nfurarea nu este permis ntr-o direcie dat, atunci n acea direcie (x sau y) lumea este
mrginit. Patch-urile de-a lungul acestei limite vor avea mai puin de 8 vecini i agenii turtle nu se
vor muta dincolo de marginea lumii.
Topologia lumii NetLogo are patru valori posibile: tor, cutie, cilindru vertical sau cilindru orizontal.
Topologia este controlata prin activarea sau dezactivarea teleportarii pe direcia x sau y. Lumea
implicit este tor-ul.
Un tor nfoar n ambele direcii, ceea ce nseamna c marginile de sus i cele de jos ale lumii
sunt conectate, la fel i marginile din stnga i din dreapta. Dac un agent turtle se mut dincolo de
marginea din dreapta a lumii, el va aprea din nou pe stnga, acelai lucru fiind valabil pentru
partea de sus i de jos.
O cutie nu nfoar n orice direcie. Lumea este delimitat astfel nct agenii turtle care ncearc
s se mute dincolo de marginea lumii nu pot face acest lucru. Patch-urile din jurul marginii au mai
puin de opt vecini, colurile au trei, iar restul au cinci.
Cilindrii orizontali i verticali nfoar ntr-o singur direcie, dar nu i n cealalt. Un cilindru
orizontal nfoar n plan vertical, astfel nct partea de sus a lumii este conectat cu partea de
jos, iar marginile din stnga i din dreapta sunt delimitate. Un cilindru vertical nfoar n plan
orizontal astfel nct marginile din stnga i din dreapta sunt conectate, dar marginile de sus i de
jos sunt delimitate.

Exemplu de cod: Neighbors Example

Cnd coordonatele se nfoar, agenii turtle i link-urile se nfoar i ei vizual. n cazul n care o
form de agent turtle sau link se extinde peste o margine, o parte din ea va aprea la cealalt
margine. (Agenii turtle propriu-zii sunt puncte care nu au acces la spaiu, astfel nct acetia nu

42
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

pot fi pe ambele pari ale lumii n acelai timp, dar n view ei par s aib acces la spaiu, deoarece
forma lor conine mai mult de un punct.)
nfurarea, afecteaz modul n care arat view-ul atunci cnd se afl n modul follow al unui agent
turtle. Pe un tor, oriunde se deplaseaz agentul turtle, se va vedea ntotdeauna toat lumea din
jurul su:

ntr-o cutie sau cilindru lumea are margini, astfel nct zonele dincolo de acele margini apar n
vedere cu gri:

43
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Exemplu de cod: Termites Perspective Demo (torus), Ants Perspective Demo (box)

Setrile de topologie pot controla comportamentul primitivelor distance(xy), in-radius, incone, face(xy) i towards(xy). Topologia controleaz dac primitivele nfoar sau nu. Ele
folosesc mereu calea cea mai scurt permisa de topologie. De exemplu, distana de la centrul
patch-urilor pn n colul din dreapta jos (min-pxcor, min-pycor) i pn n colul din stnga
sus (max-pxcor, max-pycor) va fi dup cum urmeaz, pentru fiecare topologie, avnd n vedere
c min i max pxcor si pycor sunt +/- 2:

tor - sqrt(2) ~ 1.414 (va fi acelai pentru toate dimensiunile lumii fiindc patch-urile sunt
direct diagonale ntr-un tor.)
box - sqrt(world - lime^2 + world nlime^2) ~ 7.07
cilindru vertical - sqrt(world nlime ^2 + 1) ~ 5.099
cilindru orizontal - sqrt (world lime^2 + 1) ~ 5.099

Toate celelalte primitive vor aciona n mod similar cu distance. Dac s-au folosit deja primitive nowrap n model se recomand eliminarea lor i schimbarea topologiei lumii.
Dac modelul are ageni turtle care se deplaseaz, va trebui luat n considerare ceea ce se
ntmpl cu ei atunci cnd acetia ajung la marginea lumii, n cazul n care topologia utilizat are
unele margini fr nfurare (no-wrapping). Sunt cteva cazuri frecvente: agentul este reflectat
napoi n lume (fie sistematic, fie aleatoriu), agentul iese din sistem (moare) sau agentul este
ascuns. Nu mai este necesar verificarea limitelor folosind coordonatele agenilor, n schimb se
poate verifica n NetLogo dac un agent este la marginea lumii. Exista cteva moduri de a face
acest lucru, cel mai simplu este utilizarea primitivei can-move?.
if not can-move? distance [ rt 180 ]

can-move? returneaz true dac poziia primitivei distance n faa agentului este n interiorul
NetLogo, i false n caz contrar. n acest caz, dac agentul este la marginea lumii, el pur i simplu
merge napoi n acelai mod n care a ajuns acolo. Se poate folosi patch-ahead 1 ! = nobody
n loc de can-move?. Dac vrem s facem ceva mai interesant dect s ntoarcem pur i simplu
agentul ar putea fi util folosirea patch-at cu dx i dy.
if patch-at dx 0 = nobody [
set heading (- heading)
]
if patch-at 0 dy = nobody [
set heading (180 - heading)
]

Aceasta testeaz dac agentul lovete un perete orizontal sau vertical i dac este respins de
perete.

44
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

n unele modele, n cazul n care un agent nu poate merge mai departe, el pur i simplu moare
(iese din sistem).
if not can-move? distance[ die ]

Dac agenii sunt mutai folosind setxy n loc de forward, ar trebui testat dac patch-ul unde va
fi mutat exist, deoarece setxy returneaz o eroare de execuie n cazul n care coordonatele date
sunt n afara lumii. Aceasta este o situaie frecvent n cazul n care modelul simuleaz un plan
infinit, caz n care i agenii din afara sa ar fi pur i simplu ascuni.
let new-x new-value-of-xcor
let new-y new-value-of-ycor
ifelse patch-at (new-x - xcor) (new-y - ycor) = nobody
[ hide-turtle ]
[ setxy new-x new-y
show-turtle ]

Numeroase din biblioteca de modele folosesc aceast tehnic: gravitaia i electrostatica sunt cele
mai bune exemple.
Comenzile diffuse si diffuse4 se comport corect n toate topologiile. Fiecare patch se
rspndete i o cantitate egal a variabilei de difuzie se transmite la fiecare dintre vecinii si, n
cazul n care are mai puin de 8 vecini (sau 4 dac utilizai diffuse4), restul ramn mprtiai pe
patch-uri. Aceasta nseamn c suma total a variabilelor patch-urilor n ntreaga lume rmne
constant. Cu toate acestea, dac se dorete ca mprtierea s cad de pe marginile lumii aa
cum ar fi pe un plan infinit, trebuiesc terse marginile la fiecare pas ca n exemplul dispersiei pe
margini.

4.2 . Link-uri (legturi)


O legatur este un agent care conecteaz doi ageni de tip turtle. Aceti ageni turtle sunt uneori
numii noduri.
Link-ul este ntotdeauna trasat ca o linie ntre cei doi ageni turtle. Link-urile nu au o locaie, acetia
nu sunt considerai a fi pe vreun patch i nu se poate determina distana de la o legatur la un alt
punct.
Exist dou variante de link-uri, orientate i neorientate. Un link orientat este de la un nod ctre un
alt nod. Relaia dintre un parinte i un copil poate fi modelat ca un link orientat. O legtur
neorientat este la fel pentru ambele noduri, fiecare nod are o legatur cu celalalt nod. Relaia
dintre soi, sau frai, ar putea fi modelat ca o legatur neorientat.
Exista un agentset global al tuturor link-urilor, la fel ca pentru agenii turtle si pentru patch-uri. Se
pot crea link-uri neorientate utiliznd comenzile create-link-with i create-links-with; i

45
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

link-uri orientate folosind comenzile create-link-to, create-links-to, create-link-from


i create-links-from. Dup ce primul link a fost creat (orientat sau neorientat), toate celelalte
link-uri fr ras trebuie s se potriveasca, este imposibil s existe dou link-uri fr ras dintre
care unul este orientat, iar cellalt este neorientat. O eroare de execuie apare dac se ncearc
acest lucru.
n general, primitivele care lucreaz cu link-uri orientate conin n numele lor "in", "out", "to" i
"from". Cele neorientate fie omit acestea, fie folosesc "with".
Variabilele end1 i end2 ale unei legturi conin cei doi ageni turtle pe care link-ul i conecteaz. n
cazul n care link-ul este orientat, direcia este de la end1 la end2. n cazul n care link-ul este
neorientat, end1 este ntotdeauna cel mai vechi dintre cei doi ageni turtle, adic agentul turtle cu
numrul mai mic.
Rasele de link-uri vor permite definirea diferitelor tipuri de link-uri n model. Ele trebuie s fie
orientate sau neorientate; spre deosebire de link-urile fr ras, acestea sunt definite n timpul
compilrii si nu n timpul rulrii. Declararea rasei unei legturi se face folosind: undirectedlink-breed si directed-link-breed. Link-urile cu ras pot fi create folosind comenzile:
create-<breed>-with i create-<breeds>-with pentru rasele neorientate iar pentru cele
orientate se vor folosi comenzile create-<breed>-to, create-<breeds>-to, create<breed>-from i create-<breeds>-from.
Nu pot exista mai multe link-uri neorientate din aceeai ras (sau dou legturi fr ras) ntre o
pereche de ageni, nici mai mult de o legtur orientat a aceleiai rase n aceeai direcie ntre o
pereche de ageni. Pot exista dou link-uri orientate din aceeai ras (sau dou legturi fr ras)
ntre o pereche de ageni n cazul n care sunt n direcii opuse.
Layout-uri
Exist o serie de primitive care ajut la vizualizarea reelelor. Cel mai simplu este layout-circle
care poziioneaz uniform agenii n jurul centrului lumii la o anumit raz.

46
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

layout-radial este un util dac lucrai cu ceva asemntor unei structuri arborescente; chiar
dac exista bucle n arbore, acesta va funciona n continuare. layout-radial are un agent
rdcin pentru nodul central care este plasat la (0,0) i aranjeaz nodurile conectate la acesta ntrun model concentric. Nodurile la distan de un grad de rdcin vor fi aranjate ntr-un model
circular n jurul nodului central i la nivelul urmator n jurul acestor noduri i aa mai departe.
layout-radial va ncerca s in seama de graficele asimetrice i ofer mai mult spaiu
ramurilor care sunt mai mari. layout-radial are, de asemenea, o ras ca intrare astfel nct se
utilizeaz o anumit ras de link-uri pentru afiarea unei anumite reele i nu a alteia.

Se are n vedere un set de noduri de ancorare, astfel layout-tutte plaseaz toate celelalte
noduri n centrul masei nodurilor la care este legat. Setul de ancor este aranjat n mod automat
ntr-un aspect de cerc cu raz definit de utilizator i celelalte noduri vor converge la acesta
(desigur, modelul va trebui rulat de mai multe ori nainte ca aspectul s fie stabil.)

layout-spring este util pentru multe tipuri de reele, dezavantajul fiind c este relativ lent,
deoarece este nevoie de mai multe iteraii pentru a converge. n acest aspect, link-urile acioneaz
ca nite arcuri care trag nodurile conectate unele cu altele i de nodurile care se resping reciproc.
Puterea forelor arcurilor este controlat de intrrile primitivelor. Aceste intrri vor avea ntotdeauna
valori ntre 0 i 1; chiar i schimbrile foarte mici pot afecta n continuare aspectul reelei. Arcurile
au, de asemenea, o lungime (n uniti de patch-uri); cu toate acestea, din cauza tuturor forelor
implicate, nodurile nu vor ajunge exact la aceeai distan unul fa de cellalt.

47
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Exemplu de cod: Termites Network Example, Network Import Example, Giant Component,
Small Worlds, Preferential Attachment

4.3 . Sarcini (task-uri)


Task-urile v permit s stocai cod pentru a fi rulat mai trziu. Exist dou tipuri de task-uri: de
comand i de reporter.
Task-urile sunt valori, ceea ce nseamn c un task poate fi specificat ca intrare, raportat ca i
rezultat sau poate fi stocat ntr-o variabil.
Un task poate fi executat o singur dat, de mai multe ori, sau deloc.
n alte limbaje de programare task-urile sunt cunoscute ca funcii de prim clas, de nchidere, sau
lambda.
Primitive de task-uri
Noile primitive asociate cu task-urile sunt task, is-command-task? i is-reporter-task?.
Comanda run accept task-uri de comand precum i iruri de caractere.
Reporterul runresult accept task-urile de reporter precum i iruri de caractere.
Aceste primitive accept de asemenea i task-uri: foreach, map, reduce, filter, n-values,
sort-by. (Sintaxa este compatibil cu codul existent de la versiunile NetLogo anterioare.)
Primitiva task creeaz un task. Task-ul la care se raporteaz ar putea fi un task de comand sau
un task de reporter, n funcie de tipul de bloc pe care l conine. De exemplu, task [ fd 1 ]
raporteaz un task de comand, deoarece fd este o comand, n timp ce task [ count
turtles ] raporteaz un task de reporter deoarece count este un reporter.
Intrrile task-urilor
Un task poate avea zero sau mai multe intrri. Intrrile sunt referite folosind variabilele speciale ?
(aka ?1), ?2, ?3, etc. Orice intrri suplimentare sunt ignorate.

48
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Task-uri i iruri de caractere


Crearea i rularea unui task se face rapid. Utilizarea run sau runresult pe un ir nou pentru
prima dat este de 100 de ori mai lent dect rularea unui task. De aceea, ar fi de preferat
utilizarea taskurilor n locul rulrii irurilor de caractere, cu excepia cazului irurilor de caractere
introduse de utilizator.
Sintaxa concis
Utilizrile simple ale: foreach, map, reduce, filter, n-values i sort-by pot fi acum scrise
cu o sintax mai concis. Astfel:
map abs [1 -2 3 -4] => [1 2 3 4]
reduce + [1 2 3 4] => 10
filter is-number? [1 "x" 3] => [1 3]
foreach [1 2 3 4] print

n versiunile NetLogo mai vechi, acestea erau scrise astfel:


map [abs ?] [1 -2 3 -4] => [1 2 3 4]
reduce [?1 + ?2] [1 2 3 4] => 10
filter [is-number? ?] [1 "x" 3] => [1 3]
foreach [1 2 3 4] [ print ? ]

Sintaxa veche ramne valabil.


Sintaxa concis poate fi, de asemenea, utilizat cu primitiva task. De exemplu, task die este
forma scurt pentru task [ die ], task fd este forma scurt pentru task [fd ?], iar task
+ este forma scurt pentru task [?1 + ?2].
Task-uri de ncheiere
Exist i task-uri "de ncheiere"; ceea ce nseamn c ele captureaz sau "nchid" legturile (nu
doar valorile curente) de variabile locale i intrrile de procedur. Ele nu includ variabilele de agent
i nu capteaz identitatea agentului curent.
Ieirile nelocale
Comenzile task i report ies din procedura de nchidere dinamic, nu din task-ul de nchidere.
(Acest lucru este compatibil cu versiunile mai vechi de NetLogo.)
Task-uri i extensii
Extensiile API suport primitive de scriere care accept task-uri ca intrare.

49
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Limitri
Vom aborda cel puin cteva din urmtoarele limitri n versiunile viitoare NetLogo:

import-world nu accept task-uri.


Intrrile task-urilor nu pot avea nume. Acest lucru poate face ca returnarea task-urilor de
raport sa fie dificil. (Task-urile de comand pot utiliza let pentru a da nume intrrilor, dac
este necesar.)
Task-urile nu pot fi variadice (adic nu pot accepta un numr variabil de intrri).
Task-urile de reporter nu pot conine comenzi, doar o singur expresie de reporter. De
exemplu trebuie utilizat ifelse-value n loc de if, i nu trebuie utilizat deloc report. n
cazul n care codul este prea complex pentru a fi scris ca un reporter, va trebui mutat codul
ntr-o procedur de reporter separat, i apoi apelat acea procedur din task, dndu-i un
numr de intrri necesare.
Task-urile nu sunt interschimbabile cu blocuri de comand i blocuri de reporter. Doar
primitivele enumerate mai sus accept task-uri ca intrri. Primitivele de control, cum ar fi
ifelse i while i primitivele de ageni, cum ar fi of i with nu accept task-uri. De
exemplu, dac avem un task de raport r i dou task-uri de comand c1 si c2, nu putem
scrie ifelse r c1 c2, ci trebuie s scriem ifelse runresult r [ run c1 ] [
run c2 ].

Exemplu de cod: State Machine Example

4.4 . ask-concurrent
n versiunile foarte vechi de NetLogo, ask a fost concurent n mod implicit. De la NetLogo 4.0
(2007) ncoace, ask este serial, adic agenii ruleaz pe rnd comenzile n interiorul unui ask.
Urmtoarele informaii descriu comportamentul comenzii ask-concurrent, care se comport la
fel cu vechiul ask.
ask-concurrent produce concuren simulat printr-un mecanism de turn-taking. Primul agent ia
o tur, devine activ o tura, (takes a turn), apoi al doilea agent devine activ i asa mai departe pn
cnd fiecare agent din agentset-ul cerut a fost activ, dup care se revine la primul agent. Acest
proces continu pna cnd toi agenii au terminat de rulat toate comenzile.
Tura unui agent se ncheie n momentul n care acesta efectueaz o aciune care afecteaz
starea lumii, cum ar fi micarea sau crearea unui agent turtle, sau schimbarea valorii unei variabile
globale, turtle, patch sau link. (Setarea unei variabile locale nu se ia in calcul.)

50
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Comenzile forward(fd) i back(bk) sunt tratate special. Atunci cnd sunt utilizate n interiorul
ask-concurrent, aceste comenzi se pot executa n decursul mai multor ture. n timpul unei
ture, agentul turtle se poate deplasa doar cu un singur pas. De exemplu, fd 20 este echivalent
cu repeat 20 [fd 1], unde tura agentului turtle se termin dupa fiecare rulare a fd. Dac
distana specificat nu este un numr ntreg, ultima fraciune de pas dureaz o tur complet. De
exemplu fd 20.3 este echivalent cu repeat 20 [fd 1] fd 0.3.
Comanda jump dureaz ntotdeauna exact o singur tur, indiferent de distan.
Pentru a nelege diferena dintre ask i ask-concurrent, lum n considerare urmtoarele dou
comenzi:
ask turtles [ fd 5 ]
ask-concurrent turtles [ fd 5 ]

Cu ask, primul agent turtle are nevoie de cinci pai nainte, apoi al doilea agent turtle are nevoie de
cinci pai nainte i aa mai departe.
Cu ask-concurrent, toi agentii turtle iau un pas nainte. Apoi toi iau un al doilea pas i aa mai
departe. Astfel, ultima comand este echivalent cu:
repeat 5 [ ask turtles [ fd 1 ] ]

Exemplu de cod: State Machine Example

Comportamentul lui ask-concurrent nu poate fi ntotdeauna att de simplu reprodus cu ajutorul


ask. Considerm urmtoarea comand:
ask-concurrent turtles [ fd random 10 ]

Pentru a obine acelai comportament cu ajutorul ask, ar trebui s scriem:


turtles-own [steps]
ask turtles [ set steps random 10 ]
while [any? turtles with [steps > 0]] [
ask turtles with [steps > 0] [
fd 1
set steps steps - 1
]
]

Pentru a prelungi tura unui agent vom utiliza comanda without-interruption. (Blocurile de
comand din interiorul altor comenzi cum ar fi create-turtle i hatch, au un withoutinterruption implicit n jurul lor.)

51
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Comportamentul ask-concurrent este complet determinist. Avnd n vedere acelai cod i n


aceleai condiii iniiale, acelai lucru se va ntmpla ntotdeauna (dac se utilizeaz aceeai
versiune de NetLogo i se ruleaz modelul cu aceleai seed-uri).
n general, trebuie ca modelul s fie scris astfel nct acesta s nu depind de particularitile de
funcionare ale ask-concurrent. Nu exist garania c semantica sa va ramne la fel i n
versiunile viitoare de NetLogo.

4.5 . Tie (conexiune)


Tie conecteaz doi ageni turtle, astfel nct deplasarea unui agent afecteaz poziia i orientarea
celuilalt. Tie este o proprietate a link-urilor, astfel nct trebuie s existe un link ntre doi ageni
turtle pentru a crea o relaie tie.
Cnd tie-mode-ul unei legturi este setat pe "fixed" sau "free" end1 i end2 sunt legate
mpreun. n cazul n care link-ul este orientat, end1 este "agentul rdcin" i end2 este "agentul
frunz". Aceasta nseamn c atunci cnd end1 se mut (folosind fd, jump, setxy, etc), end2 se
mut cu aceeai distan i n aceeai direcie. Cu toate acestea, atunci cnd se mut end2,
acesta nu afecteaz end1.
n cazul n care link-ul este neorientat, exist o relaie de reciprocitate, egalitate, ceea ce nseamn
c dac oricare agent turtle se mut, se va deplasa i cellalt. n funcie de agentul turtle care se
deplaseaz, fiecare agent poate fi considerat rdcin sau frunz. Agentul rdcin este
ntotdeauna agentul care iniiaza micarea.
Cnd agentul rdcin vireaza spre dreapta sau stnga, agentul frunz se rotete n jurul acestuia
cu aceeai distan ca si cum un corp rigid a fost ataat de cei doi ageni. Cnd tie-mode-ul este
setat pe "fixed" antetul agentului frunz se schimb cu aceeai valoare. Dac tie-mode-ul este
setat pe "free" antetul agentului frunz rmne neschimbat.
Tie-mode-ul unui link poate fi setat pe "fixed", folosind comanda tie i setnd pe "none" (n
sensul c agenii turtle nu mai sunt legai); pentru folosirea comenzii untie pentru setarea pe
modul "free" trebuie utilizat comanda: set tie-mode "free".

Exemplu de cod: Tie System Example

52
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

4.6 . Fiierele surs multiple


Cuvntul cheie __include permite folosirea mai multor fiiere surs ntr-un singur model
NetLogo.
Cuvntul cheie ncepe cu dou underscore-uri pentru a indica faptul c funcia este experimental
i se poate schimba n versiunile viitoare NetLogo.
Cnd se deschide un model care utilizeaz cuvantul cheie __include, sau dac este adugat la
partea de sus a unui model i apoi este apsat butonul de verificare, meniul include va aprea n
bara de instrumente. Din meniul include se pot selecta fiierele incluse n model.
Cnd se deschid, fiierele incluse apar n tab-uri suplimentare. Consultai Ghidul de interfa
(Interface Guide) pentru mai multe detalii.
n fiierele din sursa extern (.nls) poate exista orice element care poate fi adugat n mod normal
n tab-ul Code: globals, breed, turtles-own, patches-own, breeds-own, definiii de
proceduri, etc. Aceste declaraii mprtesc acelai namespace, adic, dac se va declara un
global my-global n tab-ul Code, nu mai poate fi declarat nca un global (sau orice altceva) cu
numele my-global n nici un alt fiier inclus n model. my-global va fi accesibil din toate fiierele
incluse. Acelai lucru este valabil dac my-global este deja declarat n unul dintre fiierele
incluse.

4.7 . sintaxa
Culori
n tab-ul Code i n orice alta parte n interfaa cu utilizatorul NetLogo, codul programului este
colorat astfel:
Cuvintele cheie sunt verzi
Constantele sunt portocalii
Comentariile sunt gri
Comenzile de primitive sunt albastre
Raporturile de primitive sunt violet
Orice altceva este negru
Cuvinte cheie
Singurele cuvinte cheie n acest limbaj sunt globals, breed, turtles-own, patches-own, to,
to-report si end plus extensions i cuvntul cheie nc experimental __include. (Numele
de primitive ncapsulate nu pot fi umbrite sau redefinite, astfel nct acestea sunt efectiv un fel de
cuvinte cheie)

53
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Identificatori
Toate primitivele, numele de variabile globale, numele agenilor i numele procedurilor mpart un
singur namespace, case-insensitive, la nivel global; numele locale (variabilele let i numele
intrrilor procedurilor) pot s nu afecteze numele globale sau pe ele nsele. Identificatorii pot
conine orice caracter Unicode sau cifre i urmtoarele caractere ASCII:
.?=*!<>:#+/%$_^'&-

Unele nume de primitive ncep cu dou underscore-uri pentru a indica faptul c acestea sunt nc
experimentale i foarte probabil se vor schimba sau vor fi eliminate n versiunile viitoare NetLogo.
Identificatorii care ncep cu un semn de ntrebare sunt rezervati.
Scope
Variabilele locale (inclusiv intrrile procedurilor) sunt accesibile n blocul de comenzi n care sunt
declarate, dar nu sunt accesibile n procedurile apelate de aceste comenzi.
Comentarii
Caracterul punct i virgul introduce un comentariu, care ine pn la sfritul liniei. Nu exist nici o
sintax pentru comentariu multi-linie.
Structura
Un program este format din declaraiile opionale (globals, breed, turtles-own, patchesown, <BREED>-own) n oricare ordine, urmat de zero sau mai multe definiii de proceduri. Rasele
multiple pot fi declarate separat; alte declaraii pot s apar o singur dat.
Fiecare definiie de procedur ncepe cu to sau to-report, numele procedurii i o list de
paranteze opional cu nume de intrare. Fiecare definiie de procedur se termina cu end. ntre
acestea sunt zero sau mai multe comenzi.
Comenzi i reporteri
Comenzile au zero sau mai multe intrri, intrrile sunt reporteri, care pot lua, de asemenea zero sau
mai multe intrri. Comenzile nu sunt separate sau terminate prin punctuaie; la fel, intrrile nu sunt
separate prin punctuaie. Identificatorii trebuie s fie separai prin spaiu, paranteze rotunde sau
paranteze ptrate. (De exemplu, a + b este un singur identificator, dar a(b[c]d)e contine cinci
identificatori.)

54
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Toate comenzile sunt prefixe. Toti repoarterii definii de utilizator sunt prefixe. Reporterii-primitive
sunt prefixe, dar unii (operatori aritmetici, operatori booleni i unii operatori agentset cum ar fi like i
in-points), sunt infixe.
Toate comenzile i reporterii, att primitivele ct i cele definite de utilizator, au un numr fix de
intrri implicit. (Acesta este motivul pentru care limbajul poate fi analizat, dei nu exist nici o
punctuaie care separ sau termin comenzile i/sau intrrile.) Unele primitive pot avea un numar
diferit de intrri dect cel implicit; parantezele sunt utilizate pentru a indica acest lucru, de exemplu,
(list 1 2 3) (primitiva list are numai dou intrri n mod implicit). Parantezele sunt de
asemenea folosite pentru a suprascrie implicit operatorul de prioritate, de exemplu, (1 + 2) * 3,
ca i n alte limbaje de programare.
Uneori, intrarea unei primitive este un bloc de comand (zero sau mai multe comenzi n interiorul
parantezelor ptrate) sau un bloc de reporter (o singur expresie de reporter n interiorul
parantezelor ptrate). Procedurile definite de utilizator nu pot avea un bloc de comand sau un bloc
de reporter ca intrare.
Prioritatea operatorilor, de la cel mai important la cel mai puin important:
with, at-points, in-radius, in-cone
(toate celelalte primitive i proceduri definite de utilizator)
^
*, /, mod
+, <, >, <=, >=
=, !=
and, or, xor
Comparaia cu alte Logo-uri
Nu exist nici o definiie standard a logo-ului, este o familie liber de limbaje. Noi credem c
NetLogo are suficiente lucruri n comun cu alte logo-uri pentru a-i ctiga numele de logo. Totui,
NetLogo difer n unele privine de cele mai multe alte Logo-uri. Cele mai importante diferene sunt
dup cum urmeaz.
Diferenele de la suprafa

Prioritatea operatorilor matematici este diferit. Operatorii matematici infix (cum ar fi +, *,


etc) au prioritate mai mic dect reporterii cu nume. De exemplu, n multe Logo-uri, dac
scriem sin x + 1, va fi interpretat ca sin (x + 1). NetLogo interpreteaz aa cum
cele mai multe alte limbaje de programare ar face-o, totui aceeai expresie ar putea fi
interpretat n notaia matematic standard, i anume (sin x) + 1.
Reporterii and i or sunt forme speciale, nu sunt funcii obinuite, i "scurtcircuiteaz",
adic, evalueaz doar dou intrri, dac este necesar.

55
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

Procedurile pot fi definite doar n fila Code, nu interactiv n Centrul de comand.


Procedurile reporter, care sunt, proceduri ce returneaz o valoare, trebuie s fie definite
cu to-report n loc de to. Comanda pentru a raporta o valoare de la o procedur de
raport este report, nu output.
La definirea unei proceduri, intrrile procedurilor trebuie s fie ncadrate n paranteze
ptrate, de exemplu to square [x].
Numele variabilelor sunt utilizate ntotdeauna, fr semne de punctuaie: ntotdeauna
foo, nu :foo sau "foo. (Pentru a face acest lucru, n loc de comanda make care are
un argument ntre ghilimele vom oferi un formular special set care nu se evalueaz la
prima intrare.) Prin urmare, procedurile i variabilele ocup un singur namespace
comun.

Ultimele trei diferene sunt ilustrate n urmtoarele definiii de proceduri:


cele mai multe Logo-uri

NetLogo

to square :x
output :x * :x
end

to-report square [x]


report x * x
end

Diferene n adncime

Variabilele i intrrile procedurilor locale NetLogo sunt analizate lexical, nu dinamic.


NetLogo nu are nici un tip de date "cuvnt" (ceea ce Lisp numeste "simboluri"). n cele
din urm, s-ar putea aduga unul, dar din moment ce este rar solicitat, se poate ca
nevoia s nu decurg prea mult n modelarea bazat pe ageni. Avem ns iruri de
caractere. n cele mai multe situatii n care Logo-ul tradiional ar folosi cuvinte, vom folosi
pur i simplu iruri de caractere. De exemplu, n Logo am putea scrie [ see spot run
] (o list de cuvinte), dar n NetLogo trebuie s scriem "see spot run" (un ir de
caractere) sau ["see" "spot" "run"] (o list de iruri de caractere).
Comanda run din NetLogo lucreaz pe sarcini i iruri de caractere, nu liste (deoarece
nu avem nici un tip de date "cuvnt"), i nu permite definirea sau redefinirea
procedurilor.
Structurile de control, cum ar fi if i while sunt forme speciale, nu funcii obinuite. Nu
se pot defini propriile forme speciale, astfel nct nu se pot defini structuri de control
proprii. (Se poate face ceva similar folosind task-uri, dar trebuiesc utilizate primitivele
task, run i runresult, nu exist posibilitatea s fie implicite.)
Task-urile (valorile funciei sau lambda) sunt adevrate nchideri analizate lexical.
Aceast caracteristic este disponibil n NetLogo si n lisps-urile moderne, dar nu n
logo-ul standard.

Desigur, limbajul NetLogo conine alte caracteristici care nu se gsesc n cele mai multe Logouri, cele mai importante fiind agenii i agentset-urile.

56
Modelarea si analiza sistemelor multi-agent - Laborator
http://florinleon.byethost24.com/lab_masma.htm

S-ar putea să vă placă și