如何在Netlogo购物模型中使用补丁数周内的蜱虫



我必须创建一个Netlogo世界,为家庭提供N个绿色补丁,为超市提供M个蓝色补丁。在这个世界上,海龟从家(绿色区域(到超市(蓝色区域(再回家。我在下面发布了我的代码。

为什么要将week变量作为补丁变量?换句话说,为什么要使用补丁来测量时间?

我认为你应该考虑另外两种选择:

  1. 使用全局变量测量时间:已经有ticks全局变量,但您可以创建自己的全局变量,每个代理都可以读取它
  2. 让您的乌龟测量它们想去商店的频率:每只乌龟都可以有一个自己的变量,用作倒计时。当倒计时到达0时,乌龟将离开去商店参观

例如,根据我的理解,如果你希望每70只乌龟去一次他们选择的商店,你可以这样做。

turtles-own [
housePatch
target
storeVisited
phase
countdown
]

to setup
clear-all
reset-ticks

ask n-of 10 patches [set pcolor blue]

ask n-of 15 patches with [ pcolor != blue ][
set pcolor green
sprout 1 [
set target one-of patches with [pcolor = blue]
set housePatch patch-here
set phase 1
set color red
set size 1
]
]
end 

to go
ask turtles [
ifelse (phase = 1)
[shop]
[return]
]

ask turtles with [countdown > 0] [
set countdown countdown - 1
]

tick
end

to shop
if (countdown = 0) [
face target
forward 1
]

if (patch-here = target) [
set storeVisited storeVisited + 1
set phase 2
]
end

to return
face housePatch
forward 1

if (patch-here = housePatch) [
set countdown 70
set phase 1
]
end

让我们探讨一下我在这里实现的主要内容:

  1. 阶段:设置模型的方式意味着,在go的大多数迭代中,每个海龟要么执行shop,要么执行return。但是,您的go是:
to go
ask turtles [
shop
return
]
end

当我去实现倒计时时,这造成了一些混乱,所以我想用phase海龟自己的变量来清楚地划分海龟的活动:值为1意味着海龟必须执行shop;值为2意味着乌龟将不得不执行CCD_ 9。phase的值在setup和每次乌龟回家时设置为1,并且在每次乌龟到达商店时设置为2。

正如你所看到的,我从模型中删除了stay,因为它让海龟什么都不做。

  1. 倒计时:每只乌龟都有一个countdown变量,在shop开始时进行检查。如果countdown达到0,那么乌龟实际上是向商店移动的。countdown的值在setup时保留为默认值0,这意味着一开始每只乌龟都会向商店移动。在每次访问商店之后回家时,countdown的值被设置为70。在go的每一次迭代中,所有倒计时大于零的海龟都会将其降低一

注意,我对代码进行了一些其他小的更改,其中一些是:

  • 我从setup程序中删除了set storeVisited 0。NetLogo中变量的默认值为0,因此无需在开始时将其设置为0
  • go结束时,您使用的是reset-ticks而不是tick
  • shop中,我用if (patch-here = target)取代了if (pcolor = blue)。这是因为,在前往target的途中,海龟可能会发现自己身上有一块蓝色的斑块,而这不是它的目标

最新更新