存储补丁变量以供各个代理将来使用

时间:2019-07-08 01:44:46

标签: netlogo

我的世界中有几个代理商,他们四处走动并在移动时消耗资源。我希望每个代理都记住他们访问的补丁以及他们访问补丁时发现的食物价值(补丁变量)。我也希望能够轻松地存储访问补丁的时间参考,以使记住的补丁值随时间衰减。我在尝试寻找一种在特定于乌龟的代理集中存储补丁变量的方法时遇到了问题。

我想我可以存储

现在我有:

globals [year]

bears-own
[
  memory-value
  memory-1
  memory-2
  memory-3
]

patches-own
[
  food
]

在初始化期间,年份设置为1,并且在创建代理时,我要求他们在此处设置memory-1 patch。经过1000次滴答后,年值更新为2,再经过1000次滴答后,年值更改为3。在go过程中,以下过程称为:

to set-memory
  if year = 1
  [
    set memory-1 (patch-set memory-1 patches in-radius 5)
    ask memory-1 [set memory-value food]
  ]
    if year = 2
  [
    set memory-2 (patch-set memory-2 patches in-radius 5)
    ask memory-2 [set memory-value food]
    if ticks = 1001 [ask memory-1 [set memory-value (food * (exp (- year)))]]
  ]
end

我相信此代码对所有代理使用相同的memory-1,memory-2和memory-3代理集,以便它们都可以访问其他代理访问的补丁。我希望代理只能“记住”他们可以访问的补丁。我也不确定我对颞部的处理是否正确。我有一种感觉,我可能需要使用矩阵扩展,但我想在深入研究未知数之前会有所了解。感谢您在解决此问题或提高问题清晰度方面的任何帮助!

1 个答案:

答案 0 :(得分:1)

对于这类问题,我将使用table扩展名。这是一个提取物,功能类似,但是比您的问题更简单。每只海龟都会跟踪其访问的补丁以及对该补丁的访问次数。存储在其中的变量称为mapAware,每个乌龟都有自己的地图。

extensions [table]

turtles-own [mapAware]

to setup
  ...
  ask turtles
  [ set mapAware table:make
  ]
  ...
end

go
  ...
  update-awareness
  ...
end

to update-awareness
  ask turtles
  [ let thisPatch (list pxcor pycor)    ; key for table
    let oldVisits table:get-or-default mapAware thisPatch 0
    table:put mapAware thisPatch oldVisits + 1
  ]
end