如何每 10 ticks 创建新一代的海龟?

How to create new generation of turtles every 10 ticks?

我正在尝试在 NetLogo 中执行以下操作:

  1. 我为每个品种创建了一个滑块,创建了 100 只品种 A 的海龟和 100 只品种 B 的海龟
  2. 询问品种A和品种B的海龟随机移动等
  3. 10 刻后,品种 A 和 B 的海龟死亡(成功完成这项工作)
  4. Create/generate 新的 100 只海龟品种 A 和 B,随机移动等
  5. 重复第 3 步

基本上,我想请老一代的海龟在 10 个 ticks 后死亡,并创建新一代的 100 只海龟品种 A 和 100 只海龟品种 B。如何每 10 ticks 自动重复多次滴答声(例如 3000)?

非常感谢您的帮助。

部分代码如下:

breed [ honest-citizen honest-citizens ]
breed [ potential-offender potential-offenders  ]

…

to setup
  clear-all
  reset-ticks
  ask patches [ set pcolor black ]

  set-default-shape honest-citizen "circle"
  create-honest-citizen initial-number-honest-citizens ;;create honest citizens then initialise their variables
  [
    set color white
    set size 0.2
    set income income-from-work
    setxy random-xcor random-ycor
    set birth-tick ticks
  ]

  set-default-shape potential-offender "circle"
  create-potential-offender initial-number-potential-offenders
  [
    set color red + 1
    set size 0.2
    ;; set income a random number between two extremes using formula
    ;; random (max-extreme - min-extreme + 1) + min-extreme
    set income random ((income-from-work + alfa-constant) - (income-from-work - alfa-constant) + 1) + (income-from-work - alfa-constant)
    setxy random-xcor random-ycor
    set birth-tick ticks
  ]

  set-default-shape government-agent "circle"
  create-government-agent initial-number-law-enforcement-agents
  [
    set color yellow + 1
    set size 0.2
    setxy random-xcor random-ycor
  ]

end

to go
 if not any? turtles [ stop ]
 if ticks > 3000 [ stop ]


 ask government-agent [
    count-number-of-workers
    count-number-of-criminals
    calculate-tax-per-worker
    calculate-probability-of-conviction
    move
  ]

  ask potential-offender [
    move
    set net-income income
    ;; if decide to become criminal then commit crime, else work legally and pay tax
    decide-commit-crime
    death ;; occurs when arrested and after 10 periods of time
  ]

  ask honest-citizen [
    move
    set net-income income-from-work
    pay-tax
    death ;; after 10 periods of time
  ]

  tick
end

…

to move
  rt random 50
  rt random 50
  fd 1
end

to death
  if ticks - birth-tick > 10 [
  die
  ]
end

当你希望某事发生时"every n ticks",你通常可以使用mod。这是一个完整的例子:

breed [ as a ]
breed [ bs b ]

globals [
  ; those would be sliders in your model
  number-of-as
  number-of-bs
]

to setup
  clear-all
  set number-of-as 100 
  set number-of-bs 100
  create-as number-of-as 
  create-bs number-of-bs
  reset-ticks
end

to go
  if ticks > 0 and ticks mod 10 = 0 [ ; <--- this is the important line
    ask as [ die ]
    ask bs [ die ]
    create-as number-of-as 
    create-bs number-of-bs
  ]
  ask as [ move ]
  ask bs [ move ]
  tick
end

to move
  rt random 50
  lt random 50
  fd 1
end

我添加了一个 ticks > 0 子句,这样海龟就不会在第一个滴答时得到 killed/regenerated,但是你可以随意调整它。