NetLogo - 跨链接或代理集(不在品种内)交换变量值
NetLogo - exchanging variable values across links or agentsets (not within breeds)
我正在构建一个 NetLogo 模型,该模型试图解释代理如何通过在 space 中移动时撞到其他代理来找到他们做出决定所需的信息。代理分为三种类型,每种类型都有自己的行为规则,并以不同的方式与环境交互。然而,这三种类型的代理都是同一个组织 [组织 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 连接到 Implementers。
(我已经尝试过创建链接 - 我不确定该机制是否会执行我想要的第三件事:)
3:定期检查链接在一起的代理以交叉检查变量值,以便 "information" 可以是 "exchanged"。当代理处于相同 space 并且可以使用 "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 的每个位置,直到您从该代理获得所需的所有新信息]
当我尝试让 my-links 做任何这些事情时 [以便同一组织中的代理人,但不同的 "functions, if you will, can have purposeful meetings rather than relying on being in the same space with each other to communicate], I'm told that the procedure is a "turtle only" 程序或 infoarray 是一个海龟专用变量。
非常感谢任何帮助或建议!
与其让链接做这些事情,不如问链接另一端的 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。)
希望这对您有所帮助,
查尔斯
我正在构建一个 NetLogo 模型,该模型试图解释代理如何通过在 space 中移动时撞到其他代理来找到他们做出决定所需的信息。代理分为三种类型,每种类型都有自己的行为规则,并以不同的方式与环境交互。然而,这三种类型的代理都是同一个组织 [组织 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 连接到 Implementers。 (我已经尝试过创建链接 - 我不确定该机制是否会执行我想要的第三件事:) 3:定期检查链接在一起的代理以交叉检查变量值,以便 "information" 可以是 "exchanged"。当代理处于相同 space 并且可以使用 "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 的每个位置,直到您从该代理获得所需的所有新信息]
当我尝试让 my-links 做任何这些事情时 [以便同一组织中的代理人,但不同的 "functions, if you will, can have purposeful meetings rather than relying on being in the same space with each other to communicate], I'm told that the procedure is a "turtle only" 程序或 infoarray 是一个海龟专用变量。
非常感谢任何帮助或建议!
与其让链接做这些事情,不如问链接另一端的 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。)
希望这对您有所帮助, 查尔斯