【问题标题】:how to report turtles state one tick before the simulation ends in Netlogo?如何在 Netlogo 中模拟结束前报告海龟状态一个刻度?
【发布时间】:2017-03-20 11:39:58
【问题描述】:

我在 Netlogo 中创建了一个种群模型,当我所有的海龟都死亡或达到 300 次蜱的数量时,模拟停止。我需要在模拟结束前一个刻度报告(或写入文件)我的海龟(海龟自己的变量)的平均状态。如果所有模拟都运行到 300 个滴答声,这将很容易,但在大多数情况下,模拟会在此之前结束(所有海龟都死了)。我怎样才能做到这一点?海龟的死亡取决于它们的“寿命”耗尽或死亡的随机概率,所以我无法预测何时会发生这种情况,我需要知道最后一只海龟是否因为它们的寿命耗尽而死亡或由于对乌龟起作用的可能性。谢谢!

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    你玩过 BehaviorSpace 吗?它适用于平均值和总和等。您可以轻松地进行 BehaviorSpace 实验,将您设置的任何报告器导出到 .csv 电子表格或表格中,无论您想要在模拟结束时还是在每次滴答时报告。举个简单的例子,如果我想知道我的海龟的平均 x 坐标,我可以使用 to-report 设置报告器:

    to-report mean-xcor
      let xlist ( [xcor] of turtles )
      report mean xlist
    end
    

    然后,我可以使用行为空间(工具 > 行为空间)到 set up an experiment,它会在每个滴答声或仅在运行结束时写入所有海龟的 xcor。该工具还允许您设置模拟的多个参数化并将结果与​​不同的处理进行比较 - 它真的很方便!您可以对报告的内容进行创意,以使输出符合您的需要。对于您的具体情况,您只需确保在每次滴答时都记录您的实验。

    您也可以手动执行此操作,如果您愿意,可以进行更多控制。您可以在设置过程中使用以下内容创建文件和标题:

    to setup-turtle-reporting
      file-open "turtle_details_out.csv"
      file-type (word "tick, who, xcor, ycor \n")
      file-close
    end
    

    这会在您的模型文件夹中设置一个 .csv 文件,其中包含列标题、who、xcor 和 ycor。然后,在每个滴答声中,您可以让海龟将适当的变量写入同一个文件:

    to turtle-report
      file-open "turtle_details_out.csv"
      ask turtles [
        file-type (word ticks ", " who ", " xcor ", " ycor "\n" )
      ]
      file-close  
    end
    

    此选项在某些方面为您提供了更多控制权,但更复杂。当您完成不同的模拟时,您还必须使用file-delete 或手动删除/重命名文件,因为file-type 将附加到现有文件而不是覆盖它。

    【讨论】:

    • 谢谢!是的,我确实使用了行为空间,但我有一个 2x2x5x10x10 的组合(不考虑复制),所以我想避免保存整个运行并只保存一个刻度。但你的建议可能是我要走的路,因为我找不到解决这个问题的其他方法;)
    • 很公平!在这种情况下,也许可以设置一些东西,以便在每次滴答开始时,所有海龟都将它们的变量存储在临时全局列表/变量中。然后,如果在同一个刻度内海龟的数量为零,则将该列表导出到文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2022-01-08
    相关资源
    最近更新 更多