NetLogo,关于否定(绝对补码)和 HubNet 以及 hubnet-send-override 的问题

标签 netlogo complement hubnet

我正在编写一个 Hubnet 应用程序,我希望每个客户端的 View 取决于我可以看到的客户端变量海龟中的海龟。特别是,我想隐藏所有不在客户的乌龟中的乌龟,我可以从她那里看到。

通过选中 Hubnet 控制中心中的“客户端上的镜像 2D View ”框并添加以下代码,我已设法使其正常工作

ask turtles[hubnet-send-override [user-id] of self turtles "hidden?" [true]]
ask turtles[hubnet-send-override [user-id] of self [turtlesicansee] of self "hidden?" [false]]

虽然目前看来可行,但我对代码有两个问题:

1) 如果我可以在第二行中取turtlescansee 的补码(并将 false 切换为 true),那么第一行是多余的。有没有办法做到这一点,有效地说我想隐藏所有不在turtlesicansee中的海龟?

2)我不确定第二个陈述中的量化。我想告诉每一位海龟(客户),她唯一能看到的海龟是她的turtlesicansee 中的海龟。这就是我得到的吗?让我困惑的部分原因是我要求海龟发送覆盖消息,但我真的不明白为什么消息来自哪只海龟很重要(但我还没有弄清楚如何在没有询问海龟命令)

无论如何,有人可以帮我吗?

最佳答案

关于第一行的补充和必要性(告诉每个客户隐藏所有海龟)

首先,我假设... 1)模型中的每只乌龟都与一个 hubnet 客户端(学生)相关联 2)模型中没有其他海龟或其他种类的海龟。 3)主体集“turtlesicansee”是一个随时间变化的海龟变量

鉴于这些假设,获得turtlescansee 的补集的一种方法是

let onesicantsee turtles with [ not member? self turtlesicansee ] 

这将创建一个带有turtlesicansee 补集的临时变量。

因此,您可以通过以下方式执行两个命令,从而减少冗余:

ask turtles[
  let onesicantsee turtles with [ not member? self turtlesicansee ]
  hubnet-send-override user-id   turtlesicansee   "hidden?" [false] 
  hubnet-send-override user-id   onesicantsee     "hidden?" [true]
]

但是,在客户端上设置覆盖(至少在我的理解/心理模型中)并不昂贵。它实际上并不会导致某些事情发生,它会在下一次显示更新时设置“过滤器”。所以,你的原始代码并没有那么糟糕。您需要操纵所有海龟的过滤器行为,并且您的方法实际上可能比我在这里编写的方法更快。

关于此处 HubNet 命令的“逻辑”问题,以及您的“令我困惑的部分内容......”注释。我同意,这很奇怪。 “hubnet-send-override”命令可以在ask-turtles block 之外发出。但在这种情况下(并且在大多数情况下),您需要通过使用每只海龟(学生)的用户 ID 和它们的turtlesicansee 变量来个性化“过滤器”。因此,在askturtles中执行命令会依次为每个学生设置这些变量的范围。 [这有道理吗?]

关于NetLogo,关于否定(绝对补码)和 HubNet 以及 hubnet-send-override 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577557/

相关文章:

netlogo - 用 Netlogo 程序添加特性

math - 负数的 1 和 2 补码

sql - 寻找补充日期范围?

set - Coq 证明补体是内卷的

slider - NetLogo HubNet slider 值

plot - 在同一个图表上创建多个绘图?

Netlogo 存储多轮结果

java - 尝试嵌入 NetLogo 时出现预期命令错误