NetLogo - 如何为代理提供内存
NetLogo - How to give memory to agents
在这里我给你我的问题和我的代码。
问题:
每个智能体 i 附加到每个位置 m(每个 m 有固定数量的食物,但有些更差,有些更好)分数 U_im 会随着时间的推移而更新。最初,分数设置为零。每次选择玩家访问资源时,他都会以 epsilon 的概率随机选择一个位置,否则他会按照迄今为止注册的最高分的顺序依次选择位置。
对于访问的每个位置,得分更新为 U_im -> U_im - 如果发现位置被占用,则为 c(成本)
U_im -> U_im + u_mi 如果发现免费。
如何创建这个数组 u_mi? (这节省了我迄今为止访问过的最好的资源(=食物更多的资源)
编辑//:好的,我做到了!
如果有人需要这种代码,请随时与我联系:)
对于一天的体验来说,这是非常令人印象深刻的代码!
是的,作为 nomads_own 变量的收益记忆列表就是我的做法。但是您必须同时保留头寸和收益,否则您将无法对它们进行排序。如果内存开始变慢太多,您可能想要限制内存(例如,只有最后 5 个或最好的 5 个或类似内存),因为您基本上是在要求每只乌龟保留所有补丁的列表。
关于 'not doing anything' 的问题 - 如果没有任何可用位置,您的 while
循环可能会卡住。尝试这样做(无论如何这可能会更好,因为它只需要 select 一次):
to move-to-empty-one-of [locations] ;; nomads procedure
let candidates locations with [not any? nomads-here]
if any? candidates [ move-to one-of candidates ]
end
注意:未测试
在这里我给你我的问题和我的代码。
问题: 每个智能体 i 附加到每个位置 m(每个 m 有固定数量的食物,但有些更差,有些更好)分数 U_im 会随着时间的推移而更新。最初,分数设置为零。每次选择玩家访问资源时,他都会以 epsilon 的概率随机选择一个位置,否则他会按照迄今为止注册的最高分的顺序依次选择位置。 对于访问的每个位置,得分更新为 U_im -> U_im - 如果发现位置被占用,则为 c(成本) U_im -> U_im + u_mi 如果发现免费。
如何创建这个数组 u_mi? (这节省了我迄今为止访问过的最好的资源(=食物更多的资源)
编辑//:好的,我做到了!
如果有人需要这种代码,请随时与我联系:)
对于一天的体验来说,这是非常令人印象深刻的代码!
是的,作为 nomads_own 变量的收益记忆列表就是我的做法。但是您必须同时保留头寸和收益,否则您将无法对它们进行排序。如果内存开始变慢太多,您可能想要限制内存(例如,只有最后 5 个或最好的 5 个或类似内存),因为您基本上是在要求每只乌龟保留所有补丁的列表。
关于 'not doing anything' 的问题 - 如果没有任何可用位置,您的 while
循环可能会卡住。尝试这样做(无论如何这可能会更好,因为它只需要 select 一次):
to move-to-empty-one-of [locations] ;; nomads procedure
let candidates locations with [not any? nomads-here]
if any? candidates [ move-to one-of candidates ]
end
注意:未测试