Ming
Ming

Reputation: 215

How to avoid turtles revisiting the patch on which they were last time?

Turtles stay on patches for 60 ticks, and then move to another target patch. How to avoid turtles revisiting the patch on which they were last time? Thanks

Hi Seth and Frank,

Thank you very much for your reply. I am sorry I did not describe the questions in detail.

Turtles will not visit the patch that they were on the last tick, and will move to another nearest patch instead in next tick. The following codes mean they find the nearest patch, and move on to it.

What I would want to do is the turtle will find the nearest patch again in the next tick. They will move to other alternative that is nearest to themselves, if the nearest patch is still the same one that they were on the last tick. Thanks

let closest-leaf min-one-of (patches in-radius 1 with [pcolor = lime]) [distance myself]

face closest-leaf

fd distance closest-leaf

Upvotes: 3

Views: 661

Answers (2)

Alan
Alan

Reputation: 9610

Add a get-target reporter.

to-report get-target  ;;turtle proc
  let %close patches in-radius 1 with [pcolor = lime and self != [patch-here] of myself]
  ifelse (any? %close) [
    report min-one-of %close [distance myself]
  ] [
    report nobody
  ]
end

Now you can easily change your mind about how to pick a target. You can then move to the target (if one exists).

to move  ;; turtle proc
  let %target get-target
  ifelse (%target = nobody) [
    ;handle this case
  ] [
    face %target move-to %target
  ]
end

Upvotes: 3

Frank Duncan
Frank Duncan

Reputation: 358

A good way is to have a turtles-own variable of patches visited that can be maintained (remember to initialize it to the empty list when you create the turtle).

turtles-own [ patches-visited ]

to setup
  ...
  ask turtles [ set patches-visited [] ]
  ...
end

to move
  let potential-targets filter [ not member? ? patches-visited ] target-patches
  let target-patch one-of potential-targets

  if target-patch != NOBODY [
    set patches-visited fput target-patch patches-visited
    ; move to target patch
  ]
end

Upvotes: 5

Related Questions