Вопрос

Part of what I am trying to do is make a breed of turtles move around, but when one reaches its destination that turtle waits for a certain number of ticks before continuing ? Also is it possible to make turtles wait for different number of ticks depending upon their destination ( different patch colors). Is it a case of making a turtle breed or global variable to count the number of ticks? The hopefully relevant code is below.

Это было полезно?

Решение

You are right, this can be done by making the turtles count the number of ticks they have been on a patch. Also this has to be a turtle variable and not a global variable since each turtle will have a different value for this

The approach, I have used is this:

  1. Once the turtle arrives at its destination record the ticks (the global variable which records the number of ticks that have passed till now) into a turtle variable say ticks-since-here. This works like a time-stamp.
  2. On each successive tick check the difference between the current-time ticks global variable and the ticks-since-here turtle variable. If this becomes greater than the number of ticks the turtle is allowed to stay on the patch, let it choose and move to the new destination.

    breed [visitors visitor]

    globals [ number-of-visitors ]
    
    visitors-own [
      ; visitors own destination 
      destination
      ticks-since-here
    ]
    
    to go
      ask visitors [
        move
      ]
      tick
    end
    
    to move
      ; Instructions to move the agents around the environment go here
      ; comparing patch standing on to dest, if at dest then  choose random new dest
      ; then more forward towards new dest
      ifelse ( patch-here = destination ) 
      [
        if ticks - ticks-since-here > ticks-to-stay-on-patch patch-here
        [
          set ticks-since-here 0
          set destination one-of patches with 
          [
            pcolor = 65 or pcolor = 95 or pcolor = 125 or pcolor = 25 or pcolor = 15 or pcolor = 5
          ]
        ]
      ]
      [
        face destination
        forward 1
        if ( patch-here = destination ) 
        [
          set ticks-since-here ticks
        ]
      ]
    end
    
    to-report ticks-to-stay-on-patch [p]  
      if [pcolor] of p = 65
        [
          report 6
        ]
      if [pcolor] of p = 95
        [
          report 5
        ]
      if [pcolor] of p = 125
        [
          report 4
        ]
      if [pcolor] of p = 25
        [
          report 3
        ]
      if [pcolor] of p = 15
        [
          report 2
        ]
      if [pcolor] of p = 5
        [
          report 1
        ] 
    end
    
    to setup-people 
      ;;;; added the following lines to facilitate world view creation
      ask patches
      [
        set pcolor one-of [65 95 125 25 15 5]
      ]
      set number-of-visitors 100
      ;;;;
    
      create-visitors number-of-visitors 
      [
        ask visitors 
        [
          ; set the shape of the visitor to "visitor"
          set shape "person"
          ; set the color of visitor to white
          set color white
          ; give person a random xy
          setxy (random 50) (random 50)
          ; set visitors destination variable
          set destination one-of patches with 
          [
            pcolor = 65 or pcolor = 95 or pcolor = 125 or pcolor = 25 or pcolor = 15 or pcolor = 5
          ]
        ]
      ]  
    end
    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top