Iris
Iris

Reputation: 11

Netlogo Flocking model turtles are bored

I'm new to programming in Netlogo and I need to adapt the code so that turtles get bored after 50 ticks of flying in formation and make a right turn of 90 degrees. I modified the code while looking at some other examples but I get a very strong hunch it doesn't do what it's supposed to do. Can you please help me or give me a hint? Here's the code in question:

turtles-own [
  flockmates         ;; agentset of nearby turtles
  nearest-neighbor  ;; closest one of our flockmates
  flock-tick
]

to setup
  clear-all
  create-turtles population
    [ set color yellow - 2 + random 7  ;; random shades look nice
      set size 1.5  ;; easier to see
      setxy random-xcor random-ycor
      set flockmates no-turtles
      set flock-tick 0 ]
  reset-ticks
end

to go
  ask turtles [ flock ] 
  ;; the following line is used to make the turtles
  ;; animate more smoothly.
  repeat 5 [ ask turtles [ fd 1 ] display ]
  ;; for greater efficiency, at the expense of smooth
  ;; animation, substitute the following line instead:
  ;;   ask turtles [ fd 1 ]
  tick
end

to flock  ;; turtle procedure
  find-flockmates
  if any? flockmates
    [ find-nearest-neighbor
      ifelse distance nearest-neighbor < minimum-separation
        [ separate ]
        [ align
          cohere ] ]
end

to find-flockmates  ;; turtle procedure
  set flockmates other turtles in-cone vision 90
end

to find-nearest-neighbor ;; turtle procedure
  set nearest-neighbor min-one-of flockmates [distance myself]
end

to flock-timer
    if any? flockmates [
    set flock-tick 50
    while [ flock-tick > 0 ] [
      set flock-tick ( flock-tick - 1 ) ]
    if flock-tick = 0  
    [ set heading ( heading - 90 ) ] ]
end

The rest of the code is still the same as the the model in the library. I must admit I'm not really sure of what I'm doin and the northwestern website is also not very helpfull to me (probably my own fault).

Thanks!

Upvotes: 1

Views: 204

Answers (1)

Alan
Alan

Reputation: 9610

If we add comments to your code, we can see the logic problem.

to flock-timer
  if any? flockmates [
    ;the next line sets `flock-tick` to 50
    set flock-tick 50
    ;the next line sets `flock-tick` to 0
    while [flock-tick > 0] [set flock-tick (flock-tick - 1)]
    ;so the next condition will always be satisfied
    if (flock-tick = 0) [
      ;and so the heading will always be changed
      set heading (heading - 90)
    ]
  ]
end

You might break things up to make it easier to follow the logic.

to flock-timer ;turtle proc
  update-flock-tick
  if (flock-tick = 0) [get-bored]
end

to update-flock-ticks ;turtle proc
  ;you can add additional logic here if you wish
  if (flock-tick > 0) [
    set flock-tick (flock-tick - 1)
  ]
end

to get-bored ;turtle proc
  set heading (heading + one-of [-90, 90])
end

This is not a complete solution, but it should get you started.

Upvotes: 3

Related Questions