2017-02-24 92 views
1

'想升級(如果這樣的話)100到150本土的Netlogo 4.1.3程序到Netlogo 6,最好是通過Perl或其他腳本語言批量分發,然後是(必要的)手工檢查和完成。Netlogo過渡,向後兼容

令我沮喪的是,Netlogo 6不會打開Netlogo 4文件,所以我通過在Netlogo 5中打開它們來升級其中的一些文件,保存並在Netlogo 6中重新打開並保存。不是一個特別優雅的方式。

有何建議?

回答

3

它看起來像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)) 
+0

這非常明確,它絕對給出了線索​​如何繼續。所示的警告也說明了一切。你如何知道Netlogo 4和6之間的文件格式差異以及我如何才能知道這些知識? –

+0

我使用文本編輯器(Notepad ++)打開了模型庫中存在於第4版和第6版中的示例,並對它們進行了比較,以瞭解Netlogo 6版本的文件中存在哪些組件,但在版本4中缺少這些組件文件。然後,我只是擺弄Netlogo 4版本,直到它們兼容。不完全優雅,但對於我測試的大多數例子來說,這已經足夠好了! –