如何在 Netlogo 中模拟结束前报告海龟状态一个滴答声?

how to report turtles state one tick before the simulation ends in Netlogo?

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

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

设置报告器
to-report mean-xcor
  let xlist ( [xcor] of turtles )
  report mean xlist
end

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

您也可以手动执行此操作,如果您愿意,可以稍微控制一下。您可以在设置过程中使用类似以下内容创建文件和 header:

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

这会在您的模型文件夹中设置一个 .csv 文件,其中包含列 headers tick、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 或手动 delete/rename 文件,因为 file-type 将附加到现有文件而不是覆盖它。