Netlogo过渡,向后兼容
'想升级(如果这样的话)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))
这非常明确,它绝对给出了线索如何继续。所示的警告也说明了一切。你如何知道Netlogo 4和6之间的文件格式差异以及我如何才能知道这些知识? –
我使用文本编辑器(Notepad ++)打开了模型库中存在于第4版和第6版中的示例,并对它们进行了比较,以了解Netlogo 6版本的文件中存在哪些组件,但在版本4中缺少这些组件文件。然后,我只是摆弄Netlogo 4版本,直到它们兼容。不完全优雅,但对于我测试的大多数例子来说,这已经足够好了! –