我正在建立一个NetLogo模型,它需要与另一个模型(不是NetLogo)集成。因此,如果NetLogo模型被设置为连续运行,我想让它在每一个tick时,等待一个由链接模型创建的文件出现在父文件夹中。一旦这个文件出现,NetLogo就会读取它,并继续执行Go中指定的所有步骤。所以基本上,我希望NetLogo在等待文件时暂停,然后一旦文件出现,就继续。我试过使用 "while "函数,但没有成功。
例如,当我这样设置的时候
to go
while [file-exists? "biosim.asc"][
grow-grass
grow-herd
delete-biosim
tick]
在这里,NetLogo 读取 biosim 文件,在完成 grow-grass、grow-herd 等程序后,程序会删除 ascii 文件 biosim。理想情况下,我希望它能等待一个名为biosim的新文件出现在工作文件夹中,然后重复上述步骤。上面的代码没有达到我想要的效果。任何帮助将被感激。
谢谢,Rekha
如果您使用 while
循环,在文件没有的时候举行运行,然后把动作放在循环外。比如说
to go
while [not file-exists? "biosim.asc"] [wait 1]
grow-grass
grow-herd
delete-biosim
tick
end
你可以简单地用[]来代替[]。wait
但我怀疑那会相当低效,因为它会不断检查。而这个方法则是每隔1秒检查一次(当然你可以根据文件创建的频率来缩短或延长检查时间),一旦文件在那里,它就会转到其他代码上。
另一个选择取决于其他模型是用什么语言构建的。如果是类似java的R,你可以从该代码中控制NetLogo模型,并直接将模型耦合。