我对从命令行运行Netlogo有点生疏,以前从未使用过基准测试功能。这似乎很有希望。=)
我完全处于起步阶段,因为看起来NetLogo 6.0可能与5.*略有不同。
我正在尝试让基准测试套件运行:https://github.com/NetLogo/NetLogo/wiki/Benchmarking
现在,我从 http://ccl.northwestern.edu/netlogo/models/models/test/benchmarks/下载了一些文件
并在我的 NetLogo 6.0 目录中创建了 2 个目录
网络徽标 6.0/模型/测试
和
网络徽标 6.0/模型/基准测试
并将 http://ccl.northwestern.edu/netlogo/models/models/test/benchmarks/中的文件放入我的基准目录中。
在网站上,它说运行./sbt
然后run-main org.nlogo.headless.HeadlessBenchmarker Bureaucrats
但是,我是n00bish,没有命令./sbt设置。我看到这是一个通用的扩展安装程序命令在线的东西,但不确定如何处理它......不好意思。所以我现在的问题是,我下一步该怎么做才能启动并运行它?
从文档方面来看,我认为可能需要澄清的是,/models/test/benchmarks/
中应该有一个名为"Bureaucrats Benchmark.nlogo"
的文件,我没有意识到驱动程序将" Benchmark.nlogo"
附加到提供的名称中。如果文件被调用,那么向org.nlogo.headless.HeadlessBenchmarker提供<name>
可能会很有用"<name> Benchmark.nlogo"
我还没有达到它,但是我们有什么办法可以调用基准目录中的所有基准测试吗?文档中提到了它,但我没有看到任何命令。
让我知道您的想法,任何帮助将不胜感激!
编辑:从 git 下载存储库后,正如布莱恩建议的那样,我运行了 ./sbt 并收到以下错误。
[error] (run-main-0) java.lang.ClassNotFoundException: org.nlogo.headless.HeadlessBenchmarker java.lang.ClassNotFoundException: org.nlogo.headless.HeadlessBenchmarker at java.lang.ClassLoader.findClass(ClassLoader.java:530) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) [trace] Stack 跟踪抑制:运行最后一个根/编译:运行主的完整输出。 java.lang.RuntimeException: Nonzero 退出代码: 1 at scala.sys.package$.error(package.scala:27) [trace] 堆栈跟踪 抑制:运行最后一个根/编译:运行主为完整输出。[错误] (root/compile:runMain)非零退出代码:1 [错误] 总时间:2 秒, 完成 Apr 10, 2017 2:16:21 PM
./sbt
包含在NetLogo存储库中。就是这个文件。如果需要,运行它将安装 sbt(和 scala)本身。运行 NetLogo 存储库时,请确保您位于该存储库的根目录中。
编辑:
等等,澄清一下,您是想对自己的模型还是NetLogo本身进行基准测试?
如果NetLogo本身(这就是 https://github.com/NetLogo/NetLogo/wiki/Benchmarking 所说的),你需要从github签出NetLogo存储库:https://github.com/NetLogo/NetLogo。您可能想要这样做的唯一原因是,如果您打算为核心NetLogo代码做出贡献,或者正在开发扩展或其他内容。
对于仅仅对自己的模型进行基准测试,您不想做任何这些事情。通常,最好只在 NetLogo 程序中进行基准测试,而不是在命令行中进行基准测试。最简单的基准测试方法是执行以下操作:
setup reset-timer repeat 1000 [ go ] print timer
这将告诉您模型执行 1000 个即时报价需要多长时间。因此,运行几次,修改模型,然后再运行几次,这将使您了解更改如何影响性能。
有关更深入的基准测试和分析,请使用探查器扩展。这将分解您的程序,告诉您每个过程需要多长时间等等。
我已经使用当前正确的命令更新了 wiki 页面。(我run-main
改为headless/runMain
。
有没有办法调用基准目录中的所有基准
?
我认为如果您不传递基准名称,它就可以做到...?值得一试。(如果您弄清楚了,请更新维基页面。