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

Netlogo 存储补丁变量以供单个代理将来使用,netlogo,Netlogo,在我的世界里,有几个代理在移动,并在移动时消耗资源。我希望每个代理记住他们访问的补丁以及他们访问补丁时发现的食物价值(补丁变量)。我还希望能够轻松地存储访问补丁时的时间参考,以便补丁的记忆值随时间衰减。我在试图找到一种方法将补丁变量存储在特定于海龟的agentset中时遇到了一些问题 我想我可以储存一个 现在我有: globals [year] bears-own [ memory-value memory-1 memory-2 memory-3 ] patches-own

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

我想我可以储存一个

现在我有:

globals [year]

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

patches-own
[
  food
]
在初始化过程中,年份设置为1,在创建代理时,我要求他们在此处设置memory-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代理集,以便它们都可以访问其他代理访问的补丁。我希望代理只能“记住”他们访问过的补丁。我也不确定我对时间部分的方法是否准确。我有一种感觉,我可能需要使用矩阵扩展,但我认为在深入研究未知之前,我会有一些见解。非常感谢您对解决此问题或提高问题清晰度的任何帮助

我会使用
扩展来解决这类问题。这是一个类似的摘录,但比您的问题更简单。每只海龟都会记录它访问的补丁以及访问该补丁的次数。存储在其中的变量称为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

你看过分机吗?每只海龟可以为食物量和时间的每个变量单独设置一个表,也可以将两个变量作为单个(列表)值放在一个表中。你用键作为(列表)补丁坐标对来设置表。嗨,Jen,谢谢你的建议!我现在正在研究这个问题,但我想知道如何才能创建一个程序,让每只海龟访问自己的列表。感谢您的帮助:)如果海龟有一个名为mytable的变量,它被设置为一个表,那么
table:get mytable[xval yval]
或类似的变量将检索给定补丁的表值。我会做一个答案,这个答案不会回答你的问题,但会给出类似的操作。嗨,Jen,如果我理解正确,这个过程是通过首先创建一个包含补丁坐标(键)的列表,然后为该键设置一个默认值=0,然后将该值更改为(0)+1。我觉得这就是我要做的。但是,我不知道如何一次添加多个补丁(例如,所有邻居),如何一次更新所有表值(当年份变化时),如何让我的海龟访问表值并将这些值添加到补丁的新值中。如果有新问题最好让我知道!不,没有初始列表。该表仅包含已访问的修补程序的键。
get或default
确保表中不存在的条目设置为0,而不是创建错误。我想你可能需要开始这样做,在问额外的问题之前先打印一些照片。你有很多事情要做。如果你试着这样做,你可以问一个关于你被卡住的那一点的具体问题。我已经创建了一个新问题,它问了一个我目前被卡住的更具体的问题: