【问题标题】:How to efficiently create data on one variable all agents have如何有效地为所有代理都拥有的一个变量创建数据
【发布时间】:2020-09-14 11:20:02
【问题描述】:

我正在使用 NetLogo 模型来研究 EV 充电行为。所有 (500) 位代理都会监控他们的 my-charging-demand 每个滴答声,我想了解当我更改有效的政策干预(在这种情况下为电费)时这种紧急行为会发生什么。我试图展示充电特性的变化,例如充电持续时间、充电功率等。

及时在代理的my-charging-demand 上创建数据的最佳方法是什么?

现在我正在使用以下代码将他们的所有数据绘制在一个图表中:

ask adopters 
 [ create-temporary-plot-pen (word-who)
   set-plot-pen-color color
   plotxy ticks my-charging-demand
 ]

它可以工作,但不幸的是,它也使模型变得异常缓慢,因为每次滴答都要更新 500 支笔。该模型需要 105120 个刻度才能完成一整年/运行,因为模型中的每个刻度代表 5 分钟。因此,速度确实很重要:-)

有没有一种更有效的方法来跟踪/创建所有代理所拥有的一个变量的数据?

【问题讨论】:

    标签: netlogo agent


    【解决方案1】:

    如果我正确理解了这一点,您希望每个代理在所有时间都记住其变量 my-charging-demand 的值。如果是这样,最简单的方法(但我不知道它是否更有效)是将列表作为海龟变量。因此,修改您的 turtles-own 以添加另一个变量:

    adopters-own
    [ ....
      my-charging-demand
      my-charging-demand-series
    ]
    

    只要有计算需求的代码,就将结果添加到列表中

    ask adopters
    [ ...
      set my-charging-demand ...
      set my-charging-demand lput my-charging-demand my-charging-demand-series
      ...
    ]
    

    我无法想象有 500 行的情节是可读的。情节应该做一些事情,比如我的充电需求的平均值或我的充电需求大于某个阈值的海龟的比例。

    【讨论】:

    • 谢谢@JenB!好点子。该图绝对不可读,基本上只是一个填充图。我使用这种方法是因为我想不出一种方法来为乌龟自己的变量创建超过 100.000 个刻度的数据,但是列表现在完全有意义:-) 你认为这会花费更少的(处理)时间吗?绘图方法?
    • 老实说,我不知道列表与绘图的效率。我认为这是一个尝试并看到问题。我也会对答案感兴趣。
    • 这是一个简短的测试@JenB 基本情况(一个图中有 500 支笔):4:00 分钟导致 1226 个滴答 基本情况(没有上述情节):4:00 分钟领先到 3682 滴答 使用您的输入调整模型(代理更新自己的列表):4:00 分钟导致 3673 滴答。因此,到目前为止,它是一种更快的方法来跟踪代理自己的变量。现在我只需要找出如何将所有海龟拥有的列表导出到一个 CSV 文件中,但我想这应该不会太难。
    • 很高兴它提供了帮助并感谢您提供的性能信息。如果您在导出时遇到问题,请回来提出新问题
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2019-02-02
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多