美好的一天,
我们正在尝试创建一些东西,我们可以直观地在Netlogo中同时运行两个模拟。它将分为两半, 世界的前半部分将模拟跑步,另一半将模拟另一个具有不同变量的跑步。
可能吗?
我只想让我当前的程序在屏幕的一半上运行。
答案 0 :(得分:2)
我的建议是使用LevelSpace(基于Seth Tisue在其他答案中链接的Controlling API)。 LevelSpace是一个NetLogo扩展,允许您从NetLogo内部打开NetLogo模型。
基本上你想要做的就是编写一个NetLogo模型,从模型文件中打开两个GUI模型,并根据需要设置每个模型中的变量。然后,您将在两个子模型中的'父'模型调用'go'中执行go过程,使它们串联运行。
LevelSpace的优点在于您可以根据需要打开任意数量的模型,而无需使用Java编写代码。您只需要使用扩展及其原语。
披露:我们仍在努力。它很稳定,但语言(原语)会随着时间的推移而改变。完全披露:我是LevelSpace扩展的作者之一,所以我有偏见。但它肯定会在这里做你想要的。
编辑:只是为了展示LevelSpace相对简单,这是完成所需操作所需的全部代码。下载扩展程序,解压缩,将ls
文件夹放在extensions
文件夹中。将此代码放在一个单独的模型中,在其界面上创建一个设置和一个go(重复)按钮,就是这样。:
extensions [ls]
to setup
ls:reset ; resets the levelspace extension
repeat 2 [ls:load-gui-model "</path/to/your/model.nlogo>"] ; load two of your models
ls:ask ls:models "setup" ; call 'setup' in all your models
end
to go
ls:ask ls:models "go"
end
如果您只想设置模型而不关闭模型并关闭窗口,只需执行
to re-setup
ls:ask ls:models "setup"
end
并使用按钮或在命令中心写入re-setup
程序。
答案 1 :(得分:1)
如果仔细查看图像,您会发现它实际上是一个world
(在NetLogo意义上的单词 - 一种特定类型的输出窗口),它在视觉上与灰色墙隔开在中间。您可以通过查看窗口的顶部栏看到这一点 - 正常的平移控件和刻度计仅位于左角,3D按钮仅位于右侧角。也就是说,这是用巧妙的编码而不是NetLogo功能构建的。
假设您已将中间色块变为灰色(例如ask patches with [pxcor = 0][set pcolor grey]
),则左手模拟的代码将控制代理移动,因此它们具有xcor&lt; -0.5和右边将使用xcor&gt; 0.5
由于您使用不同的参数值运行相同的模型,因此您可能希望代理程序属于同一品种。它们可以具有左侧或右侧的属性,并使用代理集来构造左侧龟或右侧龟。但是你可能也想考虑有不同的品种。
以下是一些如何在NetLogo语言中完全实现效果的建议:
update-view
按钮,调用代码来显示/隐藏海龟和根据选择器上的选择(可能是红色,蓝色和两者)来调整色块。所有选项2-4的优势在于它们可以运行2种以上的场景(例如红色,蓝色和黄色龟)。
答案 2 :(得分:1)
好的,既然你继续问同样的问题,我已经把我的评论中的一点实际上给了你答案。
无论你有哪些海龟从其他海龟中选择(例如寻找配偶),他们只能选择墙边的海龟。一种方法是设置补丁集,例如set left-side patches with [pxcor < 0]
,然后像let partner-to-be one-of turtles-on left-side
一样进行搜索。
如果您只想将它们限制在一边(如右图所示),那么您需要xcor&gt; 0(左侧xcor <0)。使用abs
功能。每当一个人移动时你还需要检查位置,以确保它保持在一边。
答案 3 :(得分:0)
您可以使用NetLogo的Controlling API编写一个嵌入两个NetLogo模型的Java程序(或Scala或Clojure或任何您想要的JVM语言)。