Netlogo 过渡,向后兼容
Netlogo transition, backwards compatibility
想将 100-150 个本地 Netlogo 4.1.3 程序升级(如果是这样的话)到 Netlogo 6,最好通过 Perl 或其他脚本语言批量升级,然后是(必要的) ) 人工检查并完成。
令我沮丧的是 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 代码将 all 个 Netlogo 文件放在同一文件夹中,并删除 "CC-WINDOW" 行。它还在每个 "Button" 块的末尾添加一个 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。欢迎提出改进建议。
想将 100-150 个本地 Netlogo 4.1.3 程序升级(如果是这样的话)到 Netlogo 6,最好通过 Perl 或其他脚本语言批量升级,然后是(必要的) ) 人工检查并完成。
令我沮丧的是 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 代码将 all 个 Netlogo 文件放在同一文件夹中,并删除 "CC-WINDOW" 行。它还在每个 "Button" 块的末尾添加一个 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。欢迎提出改进建议。