Fehaid
Fehaid

Reputation: 103

asking red turtles to avoid other turtles and move to one of its neighbor which is empty and has highest conc

I'm new to Netlogo. Here I'm trying ask red turtles to move towards the hight conc. patches. yellow turtles do not move. I did that! but I also want to ask the red turtles to avoid the patches which have yellow or red turtles on them and move to the neighbor of high conc.. In my code I asked them to stop once they become next to an occupied patch just because I couldn't do it. I also want to avoid getting 2 turtles on the same patch at any time. Any one could help me with that please?

    patches-own [conc] 

to set-up
clear-all
ask patch random-pxcor random-pycor [
set conc 200
set pcolor scale-color red conc 0 1]
crt 5 [setxy random-xcor random-ycor  set shape "circle" set color red]
crt 20 [setxy random-xcor random-ycor set shape "circle" set color yellow]
reset-ticks
end




to go
diffuse conc 0.1
ask patches [set pcolor scale-color red conc 0 1]
ask turtles with [color = red]
[ifelse  not any? turtles-on neighbors
[if [conc] of max-one-of neighbors [conc]  > conc [
face max-one-of neighbors4 [conc]
 move-to max-one-of neighbors4 [conc]]]

[stop]

]

tick

end

Upvotes: 2

Views: 4235

Answers (1)

Seth Tisue
Seth Tisue

Reputation: 30453

I think your code would read a little nicer if you used let to avoid repetition, like this:

let target max-one-of neighbors [conc]
if [conc] of target > conc [
  face target
  move-to target
]

For some different possible approaches to enforcing a "one turtle per patch" rule, see the One Turtle Per Patch Example model, in the Code Examples section of NetLogo's Models Library.

I assume that ifelse not any? turtles-on neighbors is your attempt to make turtles avoid occupied patches. But as you've written it, it has a stronger effect than that — it makes it so that any turtle with an adjacent occupied patch won't move at all.

I think you may have meant something more like:

ask turtles with [color = red] [
  let targets neighbors with [not any? turtles-here]
  let target max-one-of targets [conc]
  if target != nobody and [conc] of target > conc [
    face target
    move-to target
  ]
]

Hope this helps.

Upvotes: 4

Related Questions