2017-04-06 202 views
1

我從命令行運行Netlogo時有點生疏,從未使用過基準測試功能。看起來很有希望。 =)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個目錄

NetLogo 6.0 /型號/測試

and

的NetLogo 6.0 /模型/基準

,並把從http://ccl.northwestern.edu/netlogo/models/models/test/benchmarks/文件放到我的基準目錄。

在網站上,它說運行./sbt,然後run-main org.nlogo.headless.HeadlessBenchmarker Bureaucrats但是,我是n00bish,沒有命令./sbt setup。我看到這是一個普通的擴展安裝程序命令在線,但不知道該怎麼辦...對不起。所以我現在的問題是,接下來我要做些什麼才能讓它啓動並運行?

從文檔方面來看,我認爲可能需要清理一下,/models/test/benchmarks/中應該有一個文件,名爲"Bureaucrats Benchmark.nlogo"我沒有意識到驅動程序將" Benchmark.nlogo"添加到提供的名稱中。如果文件被稱爲"<name> Benchmark.nlogo"

我沒有得到它但它可能是說提供<name>到org.nlogo.headless.HeadlessBenchmarker有用的,但有什麼辦法讓我們打電話給所有的基準測試在基準目錄中?文檔中提到了它,但我沒有看到任何命令。

讓我知道你的想法和任何幫助表示讚賞!

編輯:從git下載repo後,正如Bryan建議的那樣,我運行了./sbt並得到了以下錯誤。

[錯誤](運行主-0)拋出java.lang.ClassNotFoundException: org.nlogo.headless.HeadlessBenchmarker 拋出java.lang.ClassNotFoundException: org.nlogo.headless.HeadlessBenchmarker在 java.lang中.ClassLoader.findClass(ClassLoader.java:530) java.lang.ClassLoader.loadClass(ClassLoader.java:424)[trace] Stack trace suppress:運行最後一個root/compile:runMain獲取完整輸出。 java.lang.RuntimeException:非零退出代碼:1 at scala.sys.package $ .error(package.scala:27)[trace]堆棧跟蹤 已抑制:運行最後一個根/編譯:runMain輸出全部內容。[錯誤] (根/編譯:runMain)非零的退出代碼:1 [錯誤]總時間:2秒, 完成2017年4月10日下午2時16分21秒

回答

2

./sbt被包括在存儲庫中的NetLogo 。這是this文件。如果需要,運行它將自行安裝sbt(和scala)。確保您在運行時位於NetLogo存儲庫的根目錄中。

編輯:

等待,澄清,你想基準自己的模型或自身的NetLogo?

如果NetLogo本身(這是什麼https://github.com/NetLogo/NetLogo/wiki/Benchmarking在談論什麼),你需要從github:https://github.com/NetLogo/NetLogo簽出NetLogo存儲庫。你可能想要這樣做的唯一原因是如果你打算爲核心NetLogo代碼做貢獻或者正在開發一個擴展或其他東西。

只需對自己的模型進行基準測試,您就不想做任何這樣的事情。通常情況下,最好在NetLogo程序中進行基準測試,而不要在命令行進行基準測試。標杆的最簡單的方法是做這樣的事情:

setup reset-timer repeat 1000 [ go ] print timer 

它會告訴你需要多長時間你的模型做1000只蜱。所以,運行幾次,修改你的模型,然後再運行幾次,這會讓你瞭解你的改變如何影響性能。

有關更多深入的基準測試和性能分析,請使用profiler擴展。這會打破你的程序,告訴你每個程序需要多長時間等等。

+1

我正在計劃基準化一些基本原理,與Netlogo方面的一些替代實現進行比較。例如,半徑內拉出一個正方形並通過它進行過濾。現在有更多的算法可以計算pi * r^2和Netlogo的4r^2結果。我認爲通過使用您提供的代碼(設置一個計時器)可能不足以滿足JVM的要求 - 通常,您將有一個預熱階段並丟棄最初的幾個結果。我不應該這樣做嗎?如果是這樣,我不想小心我如何設計基準來測試性能。思考? – mattsap

+0

我確實想看看低級別的實現和一些高級概念。我給出了半徑範圍內的示例,但我也將使用A *與IDA *進行比較,以便在網格中搜索一些示例。 – mattsap

+0

在我看來,使用基準框架是一個好主意,因爲你陳述的原因。正確的基準測試是很難的,我們的基準測試代碼比'timer'更好。可悲的是,我們的基準框架早於JMH的存在;理想情況下,它將被重寫爲基於JMH的。 –

2

我用當前正確的命令更新了wiki頁面。 (我改變run-mainheadless/runMain

有沒有什麼辦法讓我們打電話給在基準目錄中的所有基準?

我認爲這樣做,如果你不通過基準名稱......?值得一試。 (如果你想出來,請更新維基頁面。)

+0

我接受了@ bryan的回答,因爲他指向了./sbt。我授予你獎金,因爲你提供了命令來讓基準工作。我會玩弄事情並在需要的地方更新。謝謝! – mattsap

+0

還有一件事,你能解釋爲什麼結果: 「[info] 1/2(mean = 4.156,stddev = 0.000) [info] 4/340(mean = 4.040,stddev = 0.096)」。在每一行中,這是所有運行的累積平均值和標準差,而不僅僅是最近10秒? – mattsap

+0

是的,積累。該邏輯位於https://github.com/NetLogo/NetLogo/blob/hexy/netlogo-headless/src/main/workspace/Benchmarker.scala。 「當我們98%的人相信我們在事實真相的0.3%之內時,停下來」 –