首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储补丁变量,以供各个代理将来使用

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

Stack Overflow用户
提问于 2019-07-08 09:44:46
回答 1查看 207关注 0票数 0

我的世界中有几个移动的代理,它们在移动时消耗资源。我希望每个智能体记住他们访问过的补丁和他们在访问补丁时找到的食物的值(一个补丁变量)。我还希望能够轻松地存储访问补丁时的时间参考,以便补丁的记忆值随时间衰减。我在尝试找到一种方法来存储特定于海龟的代理集中的补丁变量时遇到了一些问题。

我想象一下我可以存储一个

现在我有:

代码语言:javascript
复制
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过程中,调用以下过程:

代码语言:javascript
复制
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代理集,以便它们都可以访问其他代理访问的补丁。我希望代理只能“记住”他们有权访问的补丁。我也不确定我对时间部分的方法是否准确。我有一种感觉,我可能需要使用矩阵扩展,但我认为我应该在深入研究未知之前获得一些洞察力。在解决这个问题或提高问题清晰度方面的任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2019-07-09 02:03:19

我会使用table扩展来解决这类问题。这是一个摘录,它做一些类似的事情,但比你的问题更简单。每只海龟都会跟踪它访问的补丁以及访问该补丁的次数。其中存储的变量名为mapAware,每个海龟都有自己的映射。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56927471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档