我的世界中有几个移动的代理,它们在移动时消耗资源。我希望每个智能体记住他们访问过的补丁和他们在访问补丁时找到的食物的值(一个补丁变量)。我还希望能够轻松地存储访问补丁时的时间参考,以便补丁的记忆值随时间衰减。我在尝试找到一种方法来存储特定于海龟的代理集中的补丁变量时遇到了一些问题。
我想象一下我可以存储一个
现在我有:
globals [year]
bears-own
[
memory-value
memory-1
memory-2
memory-3
]
patches-own
[
food
]在初始化期间,year被设置为1,当创建代理时,我要求它们在此处设置memory-1 patch-1。在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代理集,以便它们都可以访问其他代理访问的补丁。我希望代理只能“记住”他们有权访问的补丁。我也不确定我对时间部分的方法是否准确。我有一种感觉,我可能需要使用矩阵扩展,但我认为我应该在深入研究未知之前获得一些洞察力。在解决这个问题或提高问题清晰度方面的任何帮助都是非常感谢的!
发布于 2019-07-09 02:03:19
我会使用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
]
endhttps://stackoverflow.com/questions/56927471
复制相似问题