访问netlogo表中的所有元素
我建立了一个模型,海龟在其中穿越一个环境,并建立一个表(使用表扩展名),该表表示它们访问每个特定位置的次数,其中可能有几千次(这些都是在该位置的“谁”上键入的) 这种方法相当有效,因为它可以让不经常走动的海龟比经常走动的海龟储存更小的结构 然而,我想实现一个过程,每这么多个周期减少一次访问计数,这样海龟表中的每一项都会减少一定量。我正在努力寻找一种方法,在不指定所有键的情况下访问表中的所有项 有人知道如何轻松做到这一点吗?还是说桌子的设计根本就不是这样访问netlogo表中的所有元素,netlogo,Netlogo,我建立了一个模型,海龟在其中穿越一个环境,并建立一个表(使用表扩展名),该表表示它们访问每个特定位置的次数,其中可能有几千次(这些都是在该位置的“谁”上键入的) 这种方法相当有效,因为它可以让不经常走动的海龟比经常走动的海龟储存更小的结构 然而,我想实现一个过程,每这么多个周期减少一次访问计数,这样海龟表中的每一项都会减少一定量。我正在努力寻找一种方法,在不指定所有键的情况下访问表中的所有项 有人知道如何轻松做到这一点吗?还是说桌子的设计根本就不是这样 非常感谢好的-就这样-通常情况下,一旦您指
非常感谢好的-就这样-通常情况下,一旦您指定了您的问题,您就可以找到解决方案 这可以通过从表中返回所有键,然后使用foreach遍历它们并逐个访问每个元素来实现
to decay
let memory table:keys location-visits
foreach memory
[
x -> let visits table:get location-visits x
table:put location-visits x (visits - 1)
]
end
我的真实版本也会检查以确保访问量不会降到零以下
在这个阶段,这似乎相对有效-但如果有更快的方法,我会很高兴-谢天谢地,我不是每个周期都运行这段代码
希望这对某人有用——我现在觉得自己很傻
干杯在
表
扩展上有一个未解决的问题,建议添加一个表:映射
过程,该过程将完全满足您的需要,这里:
在该期中,Bryan Head提出了一个NetLogo实现这样一个原语:
to-report table-map [ tbl fn ]
report table:from-list map [ entry ->
list (first entry) (runresult fn last entry)
] table:to-list tbl
end
在您的情况下,它的使用方式如下:
set location-visits table-map location-visits [ visits -> visits - 1 ]
这可能比您自己的解决方案快,也可能不快,但可能值得一试。主要的优点是,如果table:map
成为现实,那么您的代码只需更改一个字符(从-
到:
)就可以利用它