2017-07-11 4 views
1

J'ai deux races: supras et sous-marins.Comptage des races avec les voisins (à comploter)

Je voudrais dessiner deux lignes:

  • Nombre de sous-marins qui ont des voisins qui sont Supras (divisé par l'ensemble population de tortues)
  • Nombre de Supras qui ont des voisins qui sont sous-marins (divisé par la population totale de tortues)

Comment est-ce que je peux faire ceci? Je l'ai essayé ceci:

  • plot count (subs with [one-of neighbors = supras])/num-turtles
  • plot count (supras with [one-of neighbors = subs])/num-turtles

Le nombre est toujours 0 pour chaque population, qui ne devrait pas être le cas. Voici mon code:

breed [supras supra] 
breed [subs sub] 

turtles-own [age] 
subs-own [status] 

to setup 
    clear-all 

    ;; Color the patches so they're easier to see 
    ask patches [ set pcolor random-float 2 ] 

    ;; 1/2 of num-turtles patches will sprout subs 
    ask n-of (num-turtles/2) patches [ 
    if not any? turtles-on patch-set self [ 
     sprout-subs 1 
    ] 
    ] 

    ;; 1/2 of num-turtles patches will sprout supras 
    ask n-of (num-turtles/2) patches [ 
    if not any? turtles-on patch-set self [ 
     sprout-supras 1 
    ] 
    ] 

    ;; Set breed colors and own-variables 
    ask subs [ 
    set color blue 
    set shape "dot" 
    set age 0 
    set status random 10 
    ] 

    ask supras [ 
    set color pink 
    set shape "dot" 
    set age 0 
    ] 

    reset-ticks 
end 

to go 

    ask turtles [ 
    let empty-patches neighbors with [not any? turtles-here] 
    if any? empty-patches[ 
     let target one-of empty-patches 
     face target 
     move-to target 
    ] 
    ] 

    ;; Mating conditions 
    ask supras [ 
    if any? subs-on neighbors [ 
     ;; Mate with highest status sub 
     mate 
    ] 
    ] 

    tick 
end 

to mate 
    move-to max-one-of subs [status] 
end 

Répondre

2

neighbors retourne un agentset de patches, donc en disant neighbors = supras ne va pas pour obtenir votre ce que vous need- aucun patch sont supras ou subs. Au lieu de cela, vous voulez vérifier si l'un des voisins a supras-here ou . Cela a fonctionné pour moi:

plot (count (subs with [ any? neighbors with [ any? supras-here ] ]))/(count turtles) 

plot (count (supras with [ any? neighbors with [ any? subs-here ] ]))/(count turtles) 

Vous voudrez probablement à l'échelle de votre Y max jusqu'à 1 afin de voir beaucoup.

+0

Salut merci pour l'aide man! Je joue juste pour apprendre. Quel genre de travail faites-vous dans NetLogo? – santafebound

+2

Vous pariez! C'est un programme amusant à jouer à coup sûr. Une partie de mon projet de diplômé utilise Netlogo, et j'ai certainement bénéficié d'une tonne de ce site, les utilisateurs ont été super utiles. –