【问题标题】:Histogram of how often actions are played播放动作频率的直方图
【发布时间】:2016-09-09 09:52:18
【问题描述】:

我使用 Roth-Erev 强化学习算法创建了一个模型,以便每一轮代理从一组动作 A 中选择他们的动作 a。这些动作计算它们在整个游戏中的执行频率。

我现在想创建一个以 y 轴为频率、以 x 轴为动作的直方图。我还想用参数标记每个动作,但我知道这是不可能的。

仅使用histogram count [n-played] of actions 不会单独绘制每个动作。我认为plotxy 最接近但不适合直方图。是否有任何内置解决方案或者我必须在 Netlogo 之外可视化数据?

【问题讨论】:

  • 您是要显示当前时间步中的操作频率、迄今为止所有时间的总计,还是其他?还有,有多少个动作?
  • 我想显示总频率。有 27 个动作。

标签: netlogo


【解决方案1】:

您将无法标记列,但您不仅限于使用histogram 命令生成条形图。每个绘图笔都有一个mode,可以是“线”、“条”或“点”。通过使用“条形”模式,您可以使用plotplotxy 命令生成条形图:

这里是方便剪切和粘贴的代码:

plot-pen-reset
foreach map [ [ n-played ] of ? ] sort actions plot

请注意,这使用“简洁的任务语法”将plot 传递给foreach。如果您愿意,可以写[ plot ? ]

【讨论】:

  • 非常感谢,这真的很有帮助。 :-) 不过我有点不精确。每个动作都存在于一个品种的每个代理,所以我的 27 个动作被复制了 5 次。您的代码示例绘制了这 135 个动作中的每一个,但我想总结 n-played 的相同动作。为此,我给了他们一个 ID,列出了这些 ID,然后改用 foreach map [ sum [n-played] of actions with [ id = ?] ] action-id [plot ?]。不幸的是,这会产生MAP expected input to be a list but got the number 0 instead.,尽管 action-id 是设置过程中的第二件事并且工作正常。
  • 该消息表明action-id 不是一个列表。要使您的代码正常工作,您需要传递一个唯一的action-ids 列表。如果您还没有,您可以使用sort remove-duplicates [ id ] of actions 生成一个。
猜你喜欢
  • 2015-10-11
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
相关资源
最近更新 更多