2017-02-24 60 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版本,直到它们兼容。不完全优雅,但对于我测试的大多数例子来说,这已经足够好了! –