1 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果您能澄清為什么要嘗試以這種方式生成數(shù)據(jù),我或其他人可能能夠提供更好的建議。
沒有單一的 NetLogo 命令或 NetLogo API 方法來生成該表,您必須使用BehaviorSpace 來獲取它。以下是一些選項(xiàng),按從最簡單到最難的粗略順序列出。
選項(xiàng)1
如果可能的話,我建議只從命令行運(yùn)行BehaviorSpace 實(shí)驗(yàn)來生成表。這將為您提供與您正在尋找的完全相同的輸出。如有必要,您可以從 Java 程序中的命令行運(yùn)行 NetLogo headless,只需查找從 Java 調(diào)用外部程序的資源,也許可以使用ProcessBuilder
.
如果您在 Java 中運(yùn)行,以便以無法在程序中執(zhí)行的方式設(shè)置和更改BehaviorSpace 實(shí)驗(yàn)的參數(shù),則可以改為在 Java 中生成實(shí)驗(yàn) XML 文件,以在命令行中傳遞給 NetLogo。
選項(xiàng)2
您可以使用模型中的 CSV 擴(kuò)展重新創(chuàng)建表的內(nèi)容,并添加更多命令來生成數(shù)據(jù)。這不會(huì)創(chuàng)建完全相同的表,但它會(huì)以計(jì)算機(jī)和人類可讀的格式輸出數(shù)據(jù)。
在純 NetLogo 代碼中,您需要如下所示的內(nèi)容。setup
請(qǐng)注意,您可以通過在運(yùn)行之前或go
在 Java 代碼中運(yùn)行其他預(yù)實(shí)驗(yàn)命令來控制更多行為(例如文件名或所需變量) 。您還可以使用控制 API 從 Java 運(yùn)行特定于 CSV 的文件代碼,并保持模型不變,但您需要編寫自己的原語 NetLogo 代碼版本csv:to-row
。
globals [
? ;; your model globals here
? output-variables
]
to setup
? clear-all
? ;;; your model setup code here
? file-open "my-output.csv"
? ; the given variables should be valid reporters for the NetLogo model
? set output-variables [ "ticks" "current-price" "number-of-residences" "count-years-simulated" "solar-PV-cost" "%-lows" "k" ]
? file-print csv:to-row output-variables
? reset-ticks
end
to go
? ;;; the rest of your model code here
? file-print csv:to-row map [ v -> runresult v ] output-variables
? file-flush
? tick
end
選項(xiàng)3
如果您確實(shí)需要準(zhǔn)確地重現(xiàn)BehaviorSpace 表導(dǎo)出,您可以嘗試直接從Java 運(yùn)行BehaviorSpace 實(shí)驗(yàn)。正如您所看到的,它與類綁定在一起LabProtocol
,這意味著您必須通過BehaviorSpace設(shè)置和運(yùn)行模型,而不是像在您的代碼中那樣逐步使用工作區(qū)。示例代碼。
一個(gè)很好的例子就是objectMain.scala
,它從預(yù)期的命令行參數(shù)中提取一些實(shí)驗(yàn)設(shè)置,然后將它們與方法一起使用來lab.run()
運(yùn)行BehaviorSpace實(shí)驗(yàn)并生成輸出。這是 Scala 代碼而不是 Java,但希望翻譯起來不會(huì)太難。您同樣必須設(shè)置一個(gè)org.nlogo.nvm.LabInterface.Settings
實(shí)例并將其傳遞給 aHeadlessWorkspace.newLab.run()
才能使事情順利進(jìn)行。
添加回答
舉報(bào)