Netlogo Exercises

Embed Size (px)

Citation preview

  • 8/22/2019 Netlogo Exercises

    1/27

    Un exemplu de program care creaza un numar de turtles si le misca intr-un loc cu iarba

    verde, din care mananca.

    Sunt doar doua butoane Setup si Go

    turtles-own[energy] ;;variabila globalato Setup ;; to si end definesc functia (procedura)

    clear-all

    setup-patches

    setup-turtles

    reset-ticks

    end

    to setup-patches

    ask patches [ set pcolor green ]

    end

    to setup-turtlescreate-turtles 25

    ask turtles [ setxy random-xcor random-ycor ]

    end

    to Go

    move-turtles

    eat-grass

    tick

    end

    to eat-grass

    ask turtles

    [if pcolor = green

    [

    set pcolor black

    set energy energy + 10

    ]

    ]

    end

    to move-turtles

    ask turtles

    [right random 360

    forward 1

    set energy energy - 1

    ]

    end

    Programul poate fi dezvoltata prin adaugarea de monitoare, slidere, butoane si plot-uri.

  • 8/22/2019 Netlogo Exercises

    2/27

    Monitoarele sunt campuri destinate sa afiseze o variabila globala.

    Codul asociat cu monitorul e inclus in campul Reporter

    Switch-urile se asociaza cu o variabila globala, definita chiar la nivelul switch-ului

    Dar aceasta variabila trebuie testata undeva in program.

    In cazul nostru, asta se face in functia eat-grass

  • 8/22/2019 Netlogo Exercises

    3/27

    to eat-grass

    ask turtles

    [

    if pcolor = green

    [set pcolor black

    set energy energy + 10

    ]

    ifelse show-energy?

    [ set label energy ] ;; if show-energy switch is on (condition TRUE)

    [ set label "" ] ;; is switch is off

    ]

    end

    Interesanta instructiunea ifelse care specifica ambele optiuni si pentru if si pentru else.Interesant si modul de folosire a proprietatii labela obiectelor din clasa turtle.

    O varianta si mai complexa, in care agentii mananca se inmultesc sau mor, iar iarba

    creste la loc dupa un timp.

    Se modifica functia go, astfel:

    to gomove-turtleseat-grassreproduce

    check-deathregrow-grasstick ;; sa nu uitam acest tick!!!

    end

    Se observa ca au aparaut niste functii noi:

    to reproduceask turtles[

    if energy > 50[set energy energy - 50hatch 1 [ set energy 50 ]

    ]]

    end

    to check-deathask turtles[

    if energy

  • 8/22/2019 Netlogo Exercises

    4/27

    to regrow-grass

    ask patches[if random 100 < 3 [ set pcolor green ]]

    end

    Observatii:

    hatch ( a cloci, a scoate pui) este o primitiva Netlogo

    hatch number [commands]

    Se pare ca pozitia puiului este implict setata ca random (desi probabil este posibil ca in

    secventa de comenzi asociata cu hatch sa se specifice si pozitia puiului.

    die comanda omorarea turtles

    Plotting

    Nota: actualizarea plot-urilor se face la tick

    Vrem sa adaugam o fereastra de plotting in care sa vizualizam evolutia unor variabile.

    Incepem cu Add plot si definim axele si pen-urile pltului:

    Apoi modificam functiile setup si go ca sa apeleze o functie noua do-plots.

  • 8/22/2019 Netlogo Exercises

    5/27

    turtles-own[energy]

    to Setup

    clear-all

    setup-patches

    setup-turtlesreset-ticks

    do-plots

    end

    to setup-patches

    ask patches [ set pcolor green ]

    end

    to setup-turtles

    create-turtles 1

    ask turtles [ setxy random-xcor random-ycor ]

    end

    to go

    move-turtles

    eat-grass

    reproduce

    check-death

    regrow-grass

    tick ;; sa nu uitam acest tick!!!. Daca il

    omitem, programul ruleaza OK, dar actualizarea imaginii

    ;; treuie setata pe 'continuous' - daca e pe on tick nu se

    vede nimic!!do-plots

    end

    to eat-grass

    ask turtles

    [

    if pcolor = green

    [

    set pcolor black

    set energy energy + 10

    ]ifelse show-energy?

    [ set label energy ] ;; do this if switch is on

    [ set label "" ] ;; do this if switch is off

    ]

    end

  • 8/22/2019 Netlogo Exercises

    6/27

    to move-turtles

    ask turtles

    [

    right random 360

    forward 1

    set energy energy - 1]

    end

    to reproduce

    ask turtles

    [

    if energy > 50

    [

    set energy energy - 50

    hatch 1 [ set energy 50 ]

    ]

    ]

    end

    to check-death

    ask turtles

    [

    if energy

  • 8/22/2019 Netlogo Exercises

    7/27

    Tick counter

    netlogo mentine o variabila globala implicita denumita ticks care se actualizeaza cu

    numarul de pasi executati.

    Poate fi testata in program, de exemplu pentru a iesi din bucle

    to goif ticks >= 500 [ stop ]move-turtleseat-grasscheck-deathreproduceregrow-grasstick ;; aici se incrementeaza variabila ticksdo-plots

    end

    Comanda clear-all reseteaza contorul de tick-uri.

    Sliders

    Vrem sa modificam din inetrfata grafica valoarea initiala a numarului de turtles cu care

    pornim si valoarea energetica a ierbii si energia puilor la nastere.

    Incepem prin a adauga cele 3 slidere pe care le asociem cu niste variabile globale:

    Dupa care modificam un pic codul:

    to setup-turtlescreate-turtles number

    ask turtles [ setxy random-xcor random-ycor ]end

    to eat-grassask turtles [if pcolor = green [set pcolor blackset energy (energy + energy-from-grass)]

  • 8/22/2019 Netlogo Exercises

    8/27

    ifelse show-energy?[ set label energy ][ set label "" ]]end

    to reproduce

    ask turtles[if energy > birth-energy[set energy energy - birth-energyhatch 1 [ set energy birth-energy ]]

    ]end

    Despre BREED (rasa, specie)

    In continuare analizez si comentez exemplu de cod Breeds and shapes din sectiuneaCode Examples

    Pornim de la o interfata de genul asta:

    Speciile (breeds) se definesc la inceputul zonei de cod inainte de orice procedura.

    breed [monsters monster]breed [fish a-fish] ;; the word "fish" is both singular and plural,

    ;; so we need to use something different for

    ;; the singular formbreed [humans human] ;; bag si niste oamenibreed [rate o-rata] ;; si niste rate

    Popularea cu turtles se face - in acest exemplu cu comanda sprout (a rasari, a germina)

    care e asociata cu patches.

  • 8/22/2019 Netlogo Exercises

    9/27

    to setupclear-all ;; clear all patches and turtlesset-default-shape monsters "monster" ;; shape is defined in Turtle Shapes Editorset-default-shape fish "fish" ;; dittoset-default-shape humans "boy"set-default-shape rate "bird2"

    ask patches with [pxcor = 0] [ ;; just the middle column of patchesifelse random 2 = 0 ;; flip a coin[ sprout-monsters 1 ][ sprout-fish 1 ]

    ]ask patches with [pxcor = -1][if random 2 = 1[ sprout-humans 1 ]

    ]ask turtles [ ;; includes both monsters and fish

    set heading 90 ;; face east]ask patches with [ pxcor > 5 and pycor > 4 ] [sprout-rate 1]

    end

    Comenzile de miscare:

    to move-monsters

    ;; ask monsters [ fd 1 ]

    ask monsters [ back random 3 ]

    end

    to move-fish

    ask fish [ fd 1 ] ;; echivalent cu [ forward 1 ]

    tick

    end

    to move-humans

    ask humans [ fd 1]

    ask humans [

    if xcor > 4 [set shape "girl" ]]

    tick

    end

  • 8/22/2019 Netlogo Exercises

    10/27

    Recapitulare:

    - Pentru generarea/nasterea turtles am gasit 3 metode:a. cu comanda create-turtles how_many [commands...]

    Observatii importante

    1. Daca am definit o serie de breeds atunci putem invoca comanda create-turtles sub forma:

    create-breed_name

    De exemplu:

    create-humans 25 [set color green]

    - Agentii creati cu comanda create-turtles sunt pusi unul peste altul in patch-ul cu

    coordonatele xcor=0 si ycor=0!!

    - Ca sa-i dispersam e nevoie de ceva de genul urmator:create-humans 5 [ask humans [ setxy random-xcor random-ycor ] ]

    ceea ce este echivalent cu:

    create-humans 5

    ask humans [ setxy random-xcor random-ycor ]

    2. Forma (shape) agentilor se stabileste cu comanda:set-default-shape humans "boy" ;; denumirea formei pedefinite

    b. Cu comanda sprout-sprout-turtles how_many

    Comanda sprout este asociata cu patch-urile ( sprout inseamna a germina, ainmuguri, a da rod) deci trebuie invocata musai intr-un context de tipul:

    ask patches with [pxcor = 0]

    [ ;; just the middle column of patches

    ifelse random 2 = 0 ;; flip a coin

    [ sprout-monsters 1 ]

    [ sprout-fish 1 ]

    ]

    c. Cu comanda hatch how_many [ commands ]

    Asta este asociata cu turtles (hatch inseamna a cloci, a face pui, a ecloza) si trebuie

    invocata intr-un context de tipul ask turtles

    Exemplu:

    to reproduceask turtles[

    if energy > 50[set energy energy - 50hatch 1 [ set energy 50 ]]

    ]end

  • 8/22/2019 Netlogo Exercises

    11/27

    Pentru disparitia/moartea turtles exista urmatoarele posibilitati:

    - comanda [ die ] invocata cu ask turtles, de exemplu:ask turtles [if age > 50 die]

    - comanda clear- omoara toata specia si reseteaza contorul who

    Pentru sistematizarea ideilor, facem un nou proiect denumit Miscari elementare

    Gui-ul arata asa:

    Si codul complet (lucrurile demne de atentie sunt marcate cu rosu):

    breed [arrows arrow]

    to setup

    clear-all ;; clear all patches and turtles

    set-default-shape arrows "arrow"

    create-arrows 5 [ask arrows [ setxy random-xcor random-ycor ] ]

    ask arrows [ set color red ]

    ask turtles [ ;; includes both monsters and fish

    set heading random 360 ;; zero grade inseamna in sus!!

    ]

    end

  • 8/22/2019 Netlogo Exercises

    12/27

    to rotate-left

    ask arrows [ left 10 ]

    tick

    end

    to rotate-rightask arrows [ right 10 ] ;;grade

    tick

    end

    to Move-forward

    ask arrows [ fd 0.5 ] ;; se poate misca si cu mai putin de o unitate per tick

    tick

    end

    to Move-backask arrows [bk 0.5] ;; se poate misca si cu mai putin de o unitate per tick

    tick

    end

    to auto

    ask arrows [ left random 100 ]

    ask arrows [ fd 0.5 ]

    tick

    end

    Miscari elementare 2

    Adaugam un slider care defineste si controleaza variabila globala speed .

  • 8/22/2019 Netlogo Exercises

    13/27

    Observatie: Nu este nevoie sa redefinim in cod variabila globala asociata cu sliderul. Va

    fi recunoscuta automat.

    Procedura asociata cu butonul Auto se executa repetat, datorita unei proprietati a

    butonului (exista un check-boc denumit Forever).

    Codul se modifica in felul urmator:

    to Move-forward

    ask arrows [ fd speed ]

    tick

    end

    to Move-back

    ask arrows [bk speed]

    tick

    end

    to auto

    ask arrows [ left random 100 ]

    ask arrows [ fd speed ]

    tick

    end

    Cate ceva despre adresarea individuala a agentilor

    Cream un nou proiect denumit 3.Miscari elementare.nlogo, cu interfata grafica:

  • 8/22/2019 Netlogo Exercises

    14/27

    Si codul asta:

    breed [arrows arrow]

    arrows-own [ speed ]

    to setup

    clear-all ;; clear all patches and turtlesset-default-shape arrows "arrow"

    create-arrows 3 [ask arrows [ setxy random-xcor random-ycor ] ]

    ask arrows [ set color red ]

    ask turtles [ ;; includes both monsters and fish

    set heading random 360

    ]

    end

    to rotate-left

    ask arrows [ left 10 ]

    tick

    end

    to rotate-right

    ask arrows [ right 10 ]

    tick

    end

    to auto

    ask arrows [ left random 100 ]

    ask arrows [ fd speed ]

    ask arrow 1 [ show speed ]

    tick

    end

    Sunt cateva elemente noi aici:

    1. Speed este o proprietate a agentilor individuali, definita imediat dupa breed.

    arrows-own [ speed ]

    2. Cand am definit butoanele, le-am asociat direct o bucatica de cod ca in figura:

  • 8/22/2019 Netlogo Exercises

    15/27

    3. Comanda show afiseaza un mesaj (valoarea unei variabile de exemplu, in

    fereastra de dialog din josul ferestrei de lucru)

    In continuare sunt de analizat comenzile:

    towardstowardsxyturtleturtlesturtle-setturtles-atturtles-onprintshow

    writePornesc de la informatiile din manual si construiesc mici proiecte care sa ilustrezefunctiile respective.

    Nota: Netlogo permite file I/O, de exemplu citirea unor configuratii de patches dintr-

    un fisier.

    Neighborhoods example

    Interfata grafica arata asa:

  • 8/22/2019 Netlogo Exercises

    16/27

    Exista doua noutati evidente in interfata asta:

    Un text informativ static - note (Add, note)

    Un cooser (drop down menu) care permite initializarea unei variabile globale cu valori

    numerice sau string. In exemplul considerat e o variabila string.

    Procedurile asociate cu butoanele au si ele o serie de particularitati interesante:

    to setup

    ca ;; echivalent cu clear-all

    crt 8 ;; echivalent cu create 8

    [ fd 10 ] ;; comanda inclusa in create

    ask turtle 0 [ fd 7 ]

    ask turtle 1 [ fd 14 ]

    ask turtle 2 [ fd 7 ]

    end

    Modul de functionare a acestei proceduri: se simuleaza o distributie random a celor 8

    turtles.

    Comanda crt 8 creaza 8 turtles pe care le pune gramada in origine. Ele au totusi heading-

    uri random, asa ca urmatoarea comanda [ forward 10 ] le muta pe toate inainte pe

    directia initiala a fiecareia.

    Rezulta o distributie destul de random.

    Restul procedurilor sunt destinate sa ilustreze ideea de vecinatate se coloreaza patch-

    urile din vecinatate, cu precizarea ca vecinatatea e definita in mai multe moduri.

    Colorarea efectiva se face cu functia auxiliarapaint-agents [ agents ] :

    to paint-agents [agents]

    ask agents [ set pcolor [color] ofmyself + 2 ]

    end

    Aici avem nise noutati:

    - Procedura are un parametru de intrare: [agents]

    - apelarea ei se face in urmatoarele moduri:

    a. Se specifica pur si simplu o lista de agenti ca in exemplul urmator:

    paint-agents patches at-points [[1 1] [-1 1] [-1 -1] [1 -1 ]](nota: adresarea path-urilor in exemplul de mai sus este relativa la un punct curent. vezi

    mai departe)

    In afara de at-points, definirea subseturilor de agenti se mai poate face si cu operatori i:

    with, at-points, in-radius, in-cone ;; reporters

    b. ask turtles [ paint-agents patches in-radius radius ]

    c. ask turtles [ paint-agents neighbors4 ]

  • 8/22/2019 Netlogo Exercises

    17/27

    Codul complet:

    ;; This procedure creates 8 turtles in puts them in a circle,

    ;; and moves three to the edges of the worldto setup

    cacrt 8

    [ fd 10 ]

    ask turtle 0 [ fd 7 ]

    ask turtle 1 [ fd 14 ]

    ask turtle 2 [ fd 7 ]

    ask turtle 0 [ set color red ]

    ask turtle 1 [ set color yellow ]

    ask turtle 2 [ set color green ]

    ask turtle 3 [ set color blue ]

    ask turtle 4 [ set color gray ]

    ask turtle 5 [ set color cyan ]

    ask turtle 6 [ set color magenta ]

    ask turtle 7 [ set color white ]

    end

    ;; This procedure colors all the patches neighboring each turtle.

    ;; neighbors reports the eight patches surrounding the turtle.

    ;; Note that patches have neighbors as well, and can also use the neighbors reporter.to paint-neighbors

    clear-patches

    ask turtles [ paint-agents neighbors ]

    end

    ;; This procedure is similar to paint-neighbors, but uses the neighbors4 reporter.;; neighbors4 reports only the four patches adjacent to the current patch, and does not include

    ;; the four neighbors which are only diagonally touching the current patch.

    ;; As with neighbors, both turtles and patches can use neighbors4.

    to paint-neighbors4

    clear-patches

    ask turtles

    [ paint-agents neighbors4 ]

    end

    ;; This procedure uses in-radius to paint a "circle" around each turtle.

    ;; "agentset in-radius n" reports those agents in agentset whose distance from the current agent;; is less than or equal to n. For patches, distance is measured from the center of the patch.

    ;; Note that the caller can be a turtle or a patch, and agentset can be a set of turtles or a set of

    ;; patches, so you can also use in-radius to locate turtles within a given radius

    ;; of another turtle or patch. Also notice that the reported agentset includes the patch

    ;; that the turtle is currently on.

  • 8/22/2019 Netlogo Exercises

    18/27

    to paint-in-radius

    clear-patches

    ask turtles

    [ paint-agents patches in-radius radius ]

    end

    ;; This procedure uses the at-points reporter to paint an arbitrary neighborhood.

    ;; at-points lets you specify groups of agents on individual patches, using points

    ;; relative to the calling agent (so [0 0] indicates the patch the agent is on).

    ;; As with the above primitives, at-points can be used by both turtles and patches.

    to paint-at-points

    clear-patches

    ask turtles

    [

    if points = "corners"

    [ paint-agents patches at-points [[1 1] [-1 1] [-1 -1] [1 -1 ]] ]

    if points = "left"

    [ paint-agents patches at-points [[-1 1] [-1 0] [-1 -1]] ]if points = "L-shape"

    [ paint-agents patches at-points [[-1 1] [-1 0] [-1 -1] [0 -1] [1 -1 ]]]

    if points = "line-up"

    [ paint-agents patches at-points [[0 1] [0 2] [0 3] [0 4]] ]

    ]

    end

    ;; This is a helper procedure, used to set the color of a set of patches.

    to paint-agents [agents]

    ask agents [ set pcolor [color] of myself + 2 ]

    end

    Note:

    - Ideea de neighborhood (neighbor, neighbor4) se refera doar la patches.

    - Nu e clar cum functioneaza paint-agents

    Am rescris-o asa:

    to paint-agents [which_agents]

    ask which_agents [ set pcolor [color] of myself + 2 ]

    end

    Si merge.

    Daca inlocuiesc myself cu self da eroare.

    In schimb, daca lansez din command center comanda:

  • 8/22/2019 Netlogo Exercises

    19/27

    ask turtle 0 [show [color] of self] - merge imi raspunde cu un numar codul culorii

    ask turtle 0 [show [color] of myself]- da eroare!

    Explicatia din manual suna asa:

    "self" and "myself" are very different. "self" is simple; it means "me". "myself" means "theturtle or patch who asked me to do what I'm doing right now."

    Exista un code example denumit "Myself Example" care explica mai multe.Daca elimin parantezele patrate din [color] iar da eroare.

    Alta informatie extrasa din manual:

    Formularea:

    let new-color colorask turtle 0 [ set color new-color ]

    este echivalenta cu:

    ask turtle 0 [ set color [color] of myself ]

    Am incercat sa lansez asta din centrul de comanda, din perspectiva turtles si merge.

    Dar tot nu e clar cine e myself.

    Daca lansez tot din perspectiva turtles comanda:

    ask turtle 0 [show color]

    primesc de N ori acelasi raspuns (N=numarul de turtles definit)

    Iar comanda show who primeste raspuns de la toti agentii de tip turtle.

    Din perspectiva observer, pot intreba:

    show [color] of turtle 0

    si primesc raspuns. [color] e un reporter, color e o proprietate.

    Daca intreb show color din perspectiva turtles, primesc N raspunsuri, fiecare turtle isi

    raporteaza culoarea.

    Din perspectiva turtles, comenzile:

    show color

    show [color] of selfproduc acelasi rezultat cei N agenti isi raporteaza culoarea.

    OK mergem mai departe cu exemplele: Box drawing example

  • 8/22/2019 Netlogo Exercises

    20/27

    Box drawing example

    Deci, avem o variabila globala edge definita de un slider si doua proceduri, setup-

    corner si setup-center

    Codul are putine noutati:

    globals [halfedge]

    ;; setup procedure for case where point (0,0) is in the center of Box

    to setup-center

    ca ;; clear everything

    set halfedge int (edge / 2)

    ask patches[

    if (pxcor = (- halfedge) and pycor >= (- halfedge) and pycor = (-

    halfedge) and pycor = (- halfedge) and pxcor = (- halfedge) and pxcor

  • 8/22/2019 Netlogo Exercises

    21/27

    Breed procedures.nlogo

    ;;defineste un caine, o pisica si o vaca mari (universul

    e limitat la 3x3 celule)

    breed [dogs dog]

    breed [cats cat]breed [cows cow]

    to setup

    clear-all

    set-default-shape dogs "dog"

    set-default-shape cats "cat"

    set-default-shape cows "cow"

    ask patch 0 1 [ sprout-dogs 1 ]

    ask patch 0 0 [ sprout-cats 1 ]

    ask patch 0 -1 [ sprout-cows 1 ]

    end

    Asta e perfect echivalent cu (mai putin elegant):

    breed [dogs dog]

    breed [cats cat]

    breed [cows cow]

    to setup

    clear-all

    set-default-shape dogs "dog"

    set-default-shape cats "cat"

    set-default-shape cows "cow"

    create-dogs 1 [set heading 0]

    ask dogs [fd 1]

    create-cats 1

    create-cows 1 [set heading -180]

    ask cows [fd 1]

    end

    si procedura go

    to go

    ;; "turtles" refers to all of the turtles,

    ;; no matter what breed they are

    ask turtles [

    ;; each turtle takes its breed, adds "-speak"

    ;; onto it, and then runs that procedure

  • 8/22/2019 Netlogo Exercises

    22/27

    run word breed "-speak"

    ]

    end

    ;; Here we have the separate procedure definitions

    ;; for each breed.

    to dogs-speak ;; dog procedure

    set label "arf arf!"

    end

    to cats-speak ;; cat procedure

    set label "meow!"

    end

    to cows-speak ;; cow procedure

    set label "mooooo!"

    end

    E interesanta smecheria, dar e echivalenta cu:

    to go

    ;; "turtles" refers to all of the turtles,

    ;; no matter what breed they are

    ask turtles [

    if (breed = dogs) [ set label "Ham"]

    if (breed = cats) [ set label "Miau"]

    if (breed = cows) [ set label "Muuu"]

    ]

    end

    si la fel de echivalenta cu asta:

    to go

    ;; "turtles" refers to all of the turtles,

    ;; no matter what breed they are

    ask turtles [

    ask dogs [set label "Ham"]

    ask cats [set label "miau"]

    ask cows [set label "Muuu!!"]

    ]

    end

  • 8/22/2019 Netlogo Exercises

    23/27

    Un prim exemplu care foloseste agenti de tip link Link Breeds Example.nlogo

    Exista o singura procedura in proiect

    Exemplul asta pare a fi important pentru ca ar putea fi nucleul unei aplicatii in care se

    construieste o retea neuronala pornind de la un set de agenti conectati intre ei !!

    ;; every link breed must be declared as either directed or undirected

    directed-link-breed [red-links red-link]

    undirected-link-breed [blue-links blue-link]

    blue-links-own [ weight ] ;; !!link breeds can own variables

    to setup

    clear-all

    create-ordered-turtles 10 [

    fd 5

    set color gray

    ]

    ask n-of 5 turtles [

    ;; create--with is used to make undirected links

    create-blue-link-with one-of other turtles [

    set color blue

    set weight random 10

    set label weight

    ]

    ]

    ;; different breeds can have different default shapesset-default-shape red-links "curved link"

    ask n-of 5 turtles [

    ;; create--to/from are used to make directed links

    create-red-link-to one-of other turtles [

    set color red

    ]

    ]

    end

  • 8/22/2019 Netlogo Exercises

    24/27

    Cateva lucruri noi, de remarcat aici:

    ask n-of number [command]

    Se aplica o comanda unui numar specificat (number) de turtles

    1.Hill Climbing Example.nlogo

    Exemplul asta seamana mult cu ideea de a asocia patch-urile cu o altitudine (stocata in

    tag-uri RFID) si de a instrui agentii (roboti) sa o ia la vale (downhill).

    NetLogo are doua functii: uphill si downhill (cu variantele uphill4, downhill4)

    Care comanda deplasarea agentului (turtle) intr-o casuta (patch) din vecinatate

    (neighbors, sau neighbors4) care are un parametru specificat mai mare (uphill) sau mai

    mic (downhill) decat casuta curenta.

    Sintaxa este:

    uphill patch_variable

    Daca nu e nici o casuta in vecinatate care sa aiba o valoare mai mare decat

    patch_variable, atunci agentul nu sse misca.

    Daca sunt mai multe casute cu aceeasi valoare a patch_variable in vecinatate, se alege

    una random.

    Codul:turtles-own

    [at_peak ;; indicates whether a turtle has reached a "peak",

    ;; that is, it can no longer go "uphill" from where it stands

    ]

    to setup

    clear-all

    ;; make a landscape with hills and valleys

    ask n-of 10 patches [ set pcolor 120 ]

    ;; slightly smooth out the landscape

  • 8/22/2019 Netlogo Exercises

    25/27

    repeat 20 [ diffuse pcolor 1 ]

    ;; put some turtles on patch centers in the landscape

    ask n-of 30 patches [

    sprout 1 [

    set at_peak false

    set color red

    pen-down

    ]

    ]

    end

    to go

    ;; stop when all turtles are on peak

    if all? turtles [at_peak]

    [ stop ]

    ask turtles [

    ;; remember where we started

    let old-patch patch-here

    ;; to use UPHILL, the turtles specify a patch variable

    uphill pcolor

    ;; are we still where we started? if so, we didn't;; move, so we must be on a peak

    if old-patch = patch-here [ set at_peak true ]

    ]

    tick

    end

    Sunt mai multe chestii interesante aici:

    a. Specificatorul n-of

    b. pcolor definita printr-un numar.

  • 8/22/2019 Netlogo Exercises

    26/27

    c. Comanda diffuse percent/100

    Se refera la patches dar e o comanda de observer. Se executa de toate patch-urile!

    Exemplu:

    diffuse chemical 0.5

    ;; each patch diffuses 50% of its variable;; chemical to its neighboring 8 patches. Thus,;; each patch gets 1/8 of 50% of the chemical;; from each neighboring patch.)

    Asta merita un studiu separat, pentru ca feromonii difuzeaza.

    d. repeat [commands ... ]

    repeta lista de comenzi de numarul specificat de ori.

    Exemplu:

    pd repeat 36 [ fd 1 rt 10 ]

    pd este prescurtarea de la pen-down

    fd forward

    rt right

    Efectul este ca agentul deseneaza un cerc aproximat din 36 de segmente.

    e.if all? turtles [at_peak]

    if all? testeaza o conditie logica. Interesant ca e pusa in paranteze patrate.

    f.let old-patch patch-here

    Aici avem o metoda de a defini variabile locale.

    Explicatia din manual:

    letlet variable valueCreates a new local variable and gives it the given value. A local variable is one thatexists only within the enclosing block of commands.If you want to change the value afterwards, use set.

    Deci conceptul de variabila locala se refera la ceva foarte local si volatil.

    g.uphill pcolor

    Deplasarea in sus in functie de culoarea patch-urilor din vecinatate

  • 8/22/2019 Netlogo Exercises

    27/27

    Exemplu separat Diffuse_test.nlogo

    Codul:

    patches-own [pheromone]

    to setup

    clear-allask patch 0 0 [set pheromone 100]

    ask patches [set plabel pheromone ]

    end

    to diffuse_once

    diffuse pheromone 0.5

    ask patches [set plabel precision pheromone 3 ]

    end

    Aici e interesant modul de a limita numarul de zecimale afisate folosind precision

    precision number placesReports numberrounded to placesdecimal places