我正在构建一个NetLogo模型,试图解释代理如何通过在其他代理移动空间时碰撞其他代理来查找所需的信息。有三种类型的代理,每种类型都有自己的行为规则,并以不同的方式与其环境进行交互。但是,这三种代理商都属于同一组织[组织A]。
下面的代码显示了品种名称和我正在使用的变量种类。
breed [Implementers Implementer];; Member of Organization A
breed [IMDeployeds IMDeployed];; Member of Organization A
breed [IMremotes IMremote];; Member of Organization A
... [other breeds]
Turtles-own [exchangeinfo holdinfo inforelevant infoarray
taskcomplexity done];; is an info exchange going to happen, does the
turtle have info, is info relevant, and then an array
extensions [array]
globals [complete routinemeeting]
我想做三件事: 1& 2创建一种机制,将IMRemotes连接到IMDeployeds,将IMDeployeds连接到实施者。 (我已经尝试过创建链接 - 我不确定该机制是否能完成我想做的第三件事:) 3:定期检查链接在一起的代理以交叉检查变量值,以便“交换”“信息”。当代理人在同一个空间并且可以使用“turtles-here”的时候,我有以下代码:
ask Implementers [
ifelse any? other Implementers [have-info-same-team] [change-location]
ifelse any? IMDeployeds-here [have-info-same-team] [change-location]
end
to have-info-same-team
ifelse any? turtles-here with [holdinfo > 0] [checkarray9] [change-
location]
end
to checkarray9
ifelse any? other turtles-here with [array:item infoarray 9 > 0]
[array:set infoarray 9 1 set holdinfo 1 checkarray8][checkarray8]
end
[等等,检查阵列中从9到0的每个位置,直到您从该代理获得所需的所有新信息为止]
当我试图让我的链接做任何这些事情[以便同一组织中的代理人,但不同的“功能,如果你愿意的话,可以有目的的会议,而不是依赖于彼此相同的空间进行沟通],我被告知该程序是一个“仅乌龟”程序,或者信息阵列只是一个乌龟变量。
非常感谢任何帮助或建议!
答案 0 :(得分:1)
您不想要求链接执行这些操作,而是要在链接的另一端询问 turtles 。我不知道你是否创建了有向链接或无向链接,但是
ask turtle-set [other-end] of my-out-links [do something]
或
ask my-out-links [ask other-end [do something]]
将在这个乌龟的链接的另一端询问海龟的问题。 (请注意,[other-end] of my-out-links
会生成一个海龟列表而不是一个海龟集,因此使用turtle-set
将列表转换为海龟集。my-out-links
似乎适用于有向和无向链接。见http://ccl.northwestern.edu/netlogo/docs/dictionary.html#my-out-links。)
希望这有帮助, 查尔斯