【发布时间】:2018-01-17 02:16:30
【问题描述】:
在 AnyLogic 中...我正在构建一个模型,其中一旦代理 B 向 A 发送消息,代理 A(住在 Main)将移动到代理 B(住在另一个代理 C,例如家中)。 我在设置 Agent B 的“初始位置”时遇到了麻烦。 我怎样才能指出他特定的“家”(特工 C)?
我尝试过: “在指定点”:X = this.getLongitude() ... “在节点中”:这个
但没有运气。 有任何想法吗?这有意义吗?
【问题讨论】:
在 AnyLogic 中...我正在构建一个模型,其中一旦代理 B 向 A 发送消息,代理 A(住在 Main)将移动到代理 B(住在另一个代理 C,例如家中)。 我在设置 Agent B 的“初始位置”时遇到了麻烦。 我怎样才能指出他特定的“家”(特工 C)?
我尝试过: “在指定点”:X = this.getLongitude() ... “在节点中”:这个
但没有运气。 有任何想法吗?这有意义吗?
【问题讨论】:
它可以通过多种方式实现。最常见的是基于流程图:代理将流程图留在Main 到Exit 块。在Exit 块的退出操作中,调用:
agentC.enter.take( agent );
AgentC 类型应该有 Enter 块。在块的属性中,指定进入代理的初始位置。 Enter 可以被认为是从另一个空间进入的代理的“大门”(如Main)。
【讨论】:
Gregory 谈到了一种可能的通信和移动“架构”,但是,在更一般的代理移动和嵌入级别上回答:
如果您的代理类型是 AgentA、AgentB 和 AgentC,并且按照您所说的嵌入(AgentBs 在他们的“家”AgentC 中的人口),那么每个 AgentB 实例将自动拥有一个链接(到上层代理的链接)到嵌入 AgentC,称为 agentC。
所以,当AgentA 收到来自AgentB 的消息时,你可以这样做
moveTo(sender.agentC)
或
jumpTo(sender.agentC.getX(), sender.agentC.getY())
(sender 是一个特殊关键字,指的是“收到消息”代码块中的发送代理。jumpTo 会立即移动到某个地方,而不是以代理的任何速度移动。不幸的是,moveTo 允许您指定另一个代理作为目标,但jumpTo 必须使用坐标或节点。)
请参阅以下帮助部分:
【讨论】: