Rafaela
Rafaela

Reputation: 449

Problems with ticks in NetLogo

I'm trying to understand and see if it's possible to change the following:

I have a code that has 2 iterations. with the configuration exactly as it is. By clicking the setup-all button and then clicking the go once button 4 times. Call the second iteration. But, this second iteration starts at tick 1 and not at tick zero. Why does it happen? Is there a way to solve this?

globals [ iteration ]

patches-own [ scale-patch ]

to setup-world
  clearMethod
  random-seed 1  
  ifelse iteration = 0
  [setup-layers]
  [setup-layers-2]
  setup-turtles
  reset-ticks
end

to clearMethod
  clear-ticks
  clear-turtles 
end

to setup-all
  clear-all
  random-seed 1  
  ifelse iteration = 0
  [setup-layers]
  [setup-layers-2]
 setup-turtles  
  reset-ticks
end


to setup-layers
  ask patches [
    set scale-patch random 10
    set pcolor scale-color blue scale-patch -8 12 ]   
end


to setup-layers-2
  ask patches [
    set scale-patch random 10
    set pcolor scale-color green scale-patch -8 12 ]  
end


to setup-turtles
   crt 1 [ set color black ] 
end


to go
moveproc
 let n count turtles
  if n = 0
  [
  ifelse iteration = 0
    [
      set iteration 1
      setup-world
    ]
    [
      stop
    ]
  ]
  
  tick
end


to moveproc
  ask turtles [
    right random 360
    fd 1 
  if ticks >= 3
      [
          die
      ]
  ]
end

Thanks in advance

Upvotes: 2

Views: 186

Answers (1)

Matteo
Matteo

Reputation: 2926

The moment when you change iteration is within the go procedure (i.e. set iteration 1 setup-world). However, the go procedure also ends with tick. This means that when you change iteration NetLogo will first perform all the new setup things, which include reset-ticks (bringing ticks to 0), and then perform tick (bringing ticks to 1).

If you don't like this to happen and if you need to maintain this structure (i.e. go performing setup things), you can rearrange the go procedure so that tick happens before you check the condition for the change of iteration:

to go
  moveproc
  tick
  
  let n count turtles
  if n = 0 [
   ifelse iteration = 0
    [set iteration 1
     setup-world]
    [stop] 
  ]
end

PS: the one you provided is a great minimal reproducible example

Upvotes: 1

Related Questions