2016-08-02 21 views
2

在netlogo運行結束時,我想輸出520個特定於運行的變量。我已經使用文件寫入來做到這一點。但是,當我這樣做時,創建的輸出文件不完整。例如,如果我執行1,008次運行,則僅將734.xxx運行的結果寫入文件。下面是對文件的寫命令代碼:Netlogo文件寫入/文件打印/文件類型輸出不完整的文件

file-open 
    "Part01Results.txt" 
    file-write actualcombo 
    file-write parmcombo 
    file-write xqa1 
    file-write xqa2 
    file-write xqa3 
    file-write yqa1 
    file-write yqa2 
    file-write yqa3 
    file-write zqa1 
    file-write zqa2 
    file-write zqa3 
    file-write aqa1 
    file-write aqa2 
    file-write aqa3 
    file-write bqa1 
    file-write bqa2 
    file-write bqa3 
    file-write cqa1 
    file-write cqa2 
    file-write cqa3 
    file-write ptotBP 
    file-write ptotNBP 
    file-write ptotNone 
    file-write ptotDout 
    file-write ototBP 
    file-write ototNBP 
    file-write ototNone 
    file-write ototDout 
    file-write utotBP 
    file-write utotNBP 
    file-write utotNone 
    file-write utotDout 
    file-write pmidit3 
    file-write pmidit2 
    file-write pmidit1 
    file-write pmidit0 
    file-write omidit3 
    file-write omidit2 
    file-write omidit1 
    file-write omidit0 
    file-write umidit3 
    file-write umidit2 
    file-write umidit1 
    file-write umidit0 
    file-write pcounterBP 
    file-write pcounterNBP 
    file-write pcounterNone 
    file-write pcounterDout 
    file-write ocounterBP 
    file-write ocounterNBP 
    file-write ocounterNone 
    file-write ocounterDout 
    file-write ucounterBP 
    file-write ucounterNBP 
    file-write ucounterNone 
    file-write ucounterDout 
    file-write pc440tot 
    file-write pc430tot 
    file-write pc420tot 
    file-write pc410tot 
    file-write ppm440MeanHgt 
    file-write ppm440LowHgt 
    file-write ppm440HiHgt 
    file-write ppm430MeanHgt 
    file-write ppm430LowHgt 
    file-write ppm430HiHgt 
    file-write ppm420MeanHgt 
    file-write ppm420LowHgt 
    file-write ppm420HiHgt 
    file-write ppm410MeanHgt 
    file-write ppm410LowHgt 
    file-write ppm410HiHgt 
    file-write ppm340MeanHgt 
    file-write ppm340LowHgt 
    file-write ppm340HiHgt 
    file-write ppm330MeanHgt 
    file-write ppm330LowHgt 
    file-write ppm330HiHgt 
    file-write ppm320MeanHgt 
    file-write ppm320LowHgt 
    file-write ppm320HiHgt 
    file-write ppm310MeanHgt 
    file-write ppm310LowHgt 
    file-write ppm310HiHgt 
    file-write ppm240MeanHgt 
    file-write ppm240LowHgt 
    file-write ppm240HiHgt 
    file-write ppm230MeanHgt 
    file-write ppm230LowHgt 
    file-write ppm230HiHgt 
    file-write ppm220MeanHgt 
    file-write ppm220LowHgt 
    file-write ppm220HiHgt 
    file-write ppm210MeanHgt 
    file-write ppm210LowHgt 
    file-write ppm210HiHgt 
    file-write ppm140MeanHgt 
    file-write ppm140LowHgt 
    file-write ppm140HiHgt 
    file-write ppm130MeanHgt 
    file-write ppm130LowHgt 
    file-write ppm130HiHgt 
    file-write ppm120MeanHgt 
    file-write ppm120LowHgt 
    file-write ppm120HiHgt 
    file-write ppm110MeanHgt 
    file-write ppm110LowHgt 
    file-write ppm110HiHgt 
    file-write opm440MeanHgt 
    file-write opm440LowHgt 
    file-write opm440HiHgt 
    file-write opm430MeanHgt 
    file-write opm430LowHgt 
    file-write opm430HiHgt 
    file-write opm420MeanHgt 
    file-write opm420LowHgt 
    file-write opm420HiHgt 
    file-write opm410MeanHgt 
    file-write opm410LowHgt 
    file-write opm410HiHgt 
    file-write opm340MeanHgt 
    file-write opm340LowHgt 
    file-write opm340HiHgt 
    file-write opm330MeanHgt 
    file-write opm330LowHgt 
    file-write opm330HiHgt 
    file-write opm320MeanHgt 
    file-write opm320LowHgt 
    file-write opm320HiHgt 
    file-write opm310MeanHgt 
    file-write opm310LowHgt 
    file-write opm310HiHgt 
    file-write opm240MeanHgt 
    file-write opm240LowHgt 
    file-write opm240HiHgt 
    file-write opm230MeanHgt 
    file-write opm230LowHgt 
    file-write opm230HiHgt 
    file-write opm220MeanHgt 
    file-write opm220LowHgt 
    file-write opm220HiHgt 
    file-write opm210MeanHgt 
    file-write opm210LowHgt 
    file-write opm210HiHgt 
    file-write opm140MeanHgt 
    file-write opm140LowHgt 
    file-write opm140HiHgt 
    file-write opm130MeanHgt 
    file-write opm130LowHgt 
    file-write opm130HiHgt 
    file-write opm120MeanHgt 
    file-write opm120LowHgt 
    file-write opm120HiHgt 
    file-write opm110MeanHgt 
    file-write opm110LowHgt 
    file-write opm110HiHgt 
    file-write upm440MeanHgt 
    file-write upm440LowHgt 
    file-write upm440HiHgt 
    file-write upm430MeanHgt 
    file-write upm430LowHgt 
    file-write upm430HiHgt 
    file-write upm420MeanHgt 
    file-write upm420LowHgt 
    file-write upm420HiHgt 
    file-write upm410MeanHgt 
    file-write upm410LowHgt 
    file-write upm410HiHgt 
    file-write upm340MeanHgt 
    file-write upm340LowHgt 
    file-write upm340HiHgt 
    file-close 

這裏有一些我已經做過的事情:

1)我監視內存的使用情況在我的機器上同時運行作業。我沒有注意到記憶力似乎不足的情況。但是,我考慮增加Netlogo對內存的訪問,並且已經找到了這樣做的方法。但是,如果沒有清楚的知道那是問題的話,我寧願不用這些深層次的命令。因此,我首先做了幾件事。

2)一半的變量浮在-1和1之間。我將精度降低到小數點右邊的5位數。

3)我試圖寫變量的子集到不同的文件(用一個匹配鍵),而不是寫一個520個變量的文件。較小的文件仍然存在問題。但即使是我的小文件也有超過80個字符的行。這是問題嗎?要使所有文件的每行少於80個字符,我需要至少18個文件。這是可以實現的,但我寧願知道這是我實施此響應之前的問題。

4)我在文件的各個位置丟棄了「文件刷新」(以防我看到內存不可見的問題)。

5)我在整個文件中刪除了'文件寫入'\ n「'命令(萬一行太長)。

6)如果我使用錯誤的「file- *」命令,我將所有內容切換到文件打印。

7)我五重檢查文件是否實際上是正確的長度,我對統計軟件包的讀數有缺陷。但是,因爲我只是將文件寫入命令列表阻止並複製到包中,並刪除了「文件寫入」語言,所以這不是文件錯誤的基礎。該文件實際上被截斷。

8)在每個文件寫入命令之後,在每個文件寫入命令後面輸入一個單獨的行,以防變量互相寫入(它們是在我截斷浮動之前)。

我試圖運行模型1,008次,每次設置不同的全局參數。目標是能夠在有效的全局參數空間中進行採樣。但是,我不能使用行爲空間,因爲全局參數不是獨立的,將它們當作獨立對象產生可能性的接近,其中只有很小一部分是實際有效的組合。因此,使用行爲空間至少會浪費大量時間和計算週期;更有可能的是,由於有效運行的低發生率,使用行爲空間將使得不可能進行研究。因此,我已經確定了全局參數的有效組合,並試圖運行它們的一些子集,獲得輸出,然後分析結果。因此,我需要一些方法來輸出總結結果的520個變量。

我很感激任何人都可以提供的幫助。

回答

3

我通常在每次寫入文件後調用file-close。我無法爲您提供一個很好的技術原因,爲什麼它會起作用,而且我知道這不是一個特別令人滿意的解決方案,但在出現I/O問題的少數情況下,通常可以解決它。爲了保存自己的副本的麻煩/粘貼file-close 519倍,看你能不能產生所有這些名單,並做了

foreach list-with-var-names [ 
    file-open "results.txt" 
    file-write ? 
    file-close 
] 

FWIW,登錄的NetLogo學生的工作時,我已經寫了10MB +文件與file-write,所以寫每一個變量520行絕對不應該是一個問題。

+0

感謝Arthur Hjorth!這工作。我很感激。缺點是每次運行都是1.15秒,但現在每次運行都是3.94秒。運行時間的三倍以上將每天的運行次數從大約74k減少到大約21k。這是必然的,因爲它使我需要完成的一系列運行不需要6個月,但超過18個月 - 僅僅因爲我必須在每次運行中打開和關閉文件520次。因此,我很欣賞這個解決方案,我真的這樣做,沒有它我什麼都不能做。我現在會使用它。但是,我仍然在尋找一種耗時較少的解決方案。 – SLuke