'想升級(如果這樣的話)100到150本土的Netlogo 4.1.3程序到Netlogo 6,最好是通過Perl或其他腳本語言批量分發,然後是(必要的)手工檢查和完成。Netlogo過渡,向後兼容
令我沮喪的是,Netlogo 6不會打開Netlogo 4文件,所以我通過在Netlogo 5中打開它們來升級其中的一些文件,保存並在Netlogo 6中重新打開並保存。不是一個特別優雅的方式。
有何建議?
'想升級(如果這樣的話)100到150本土的Netlogo 4.1.3程序到Netlogo 6,最好是通過Perl或其他腳本語言批量分發,然後是(必要的)手工檢查和完成。Netlogo過渡,向後兼容
令我沮喪的是,Netlogo 6不會打開Netlogo 4文件,所以我通過在Netlogo 5中打開它們來升級其中的一些文件,保存並在Netlogo 6中重新打開並保存。不是一個特別優雅的方式。
有何建議?
它看起來像Netlogo 6不會讀4.1.3文件的原因是,它預計12節,而4.1.3文件有10或11.據我所知,部分被分解字符串「@#$#@#$#@」。另外,較舊的.nlogo文件具有版本6不能理解的「CC-WINDOW」的參數。最後,Netlogo 6中的按鈕還需要用值1或0進行參數化,以確定該按鈕是否被禁用,直到滴答開始或不開始。
以下python 3代碼需要全部 Netlogo文件放在同一個文件夾中,並剪掉「CC-WINDOW」行。它還在每個「按鈕」塊的末尾添加1。當代碼讀取文件時,它會統計「@#$#@#$#@」中斷的次數。如果在文件末尾少於11個,則會附加足夠的「@#$#@#$#@」中斷以使總數爲11.
如果要運行此代碼,您要更新到舊文件夾中的舊文件。將帶有以下代碼的.py文件放入同一文件夾中,並在運行時爲6.0兼容版本創建新文件(請注意,它不會只有更新4.1.3文件,但任意該文件夾中的netlogo文件)。這不適用於每個文件 - 例如,一個文件沒有正確更新,因爲原始模型的「GRAPHICS-WINDOW」未正確參數化。也就是說,這段代碼適用於我測試過的大多數4.1.3模型庫模型。另外,我只知道它允許您打開Netlogo 6中的文件,但我不知道在此之後要做什麼,以確保模型實際上按照您的預期運行。
希望有幫助!如果我在某些方面不清楚,請告訴我。
import os
with open("files_updated.txt", "w") as files:
for filename in os.listdir("."):
if filename.endswith(".nlogo") and not filename.startswith("6"):
files.write(filename + '\n')
opened = open(filename, "r")
n = 0
printat = -1
cut_count = 0
count_breakers = 0
new_file_name = ("6_"+filename.strip(".txt") + ".nlogo")
print(new_file_name)
with open(new_file_name, "w") as out:
for line in opened:
n += 1
if line == "@#$#@#$#@\n":
count_breakers += 1
if line == "CC-WINDOW\n":
cut_count = 8
cut_count -= 1
if cut_count < 0:
out.write(line)
if line == "BUTTON\n" :
printat = n + 14
if printat == n:
out.write("1\n")
if count_breakers < 11:
out.write("@#$#@#$#@\n" * (11 - count_breakers))
這是simple conversion script。隨意提出改進建議。
這非常明確,它絕對給出了線索如何繼續。所示的警告也說明了一切。你如何知道Netlogo 4和6之間的文件格式差異以及我如何才能知道這些知識? –
我使用文本編輯器(Notepad ++)打開了模型庫中存在於第4版和第6版中的示例,並對它們進行了比較,以瞭解Netlogo 6版本的文件中存在哪些組件,但在版本4中缺少這些組件文件。然後,我只是擺弄Netlogo 4版本,直到它們兼容。不完全優雅,但對於我測試的大多數例子來說,這已經足夠好了! –