【问题标题】:Communication in multiple contacts network in AnylogicAnylogic中多个联系人网络中的通信
【发布时间】:2020-10-31 14:42:29
【问题描述】:

我在Main 代理环境中定义了一个Person 代理和一群“生活”的人。我想知道在任何逻辑中是否存在某种机制来定义多层网络并仅在特定层发送消息,即我想为个人代理定义一些关系,例如“家庭联系”,如果代理在同一个家庭中(参见图片,每个连接的组件都是一个家庭),如果代理在同一个地方工作,则为“工作场所连接”等。从帮助指南中我了解到可以创建多个custom connections links

我不清楚的是,当我在代理之间发送消息时如何引用特定关系,即 我将只从代理 X 向连接的代理 Y1、...、Y2 发送消息以获取该关系“家庭关系”忽略关系“工作场所关系”的相关代理

从 api 文档中,我只看到像 getConnections()(或 send())这样的方法来返回所有连接的代理,而不能指定连接链接对象(又名特定的网络层)。

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    您可以使用参数来定义代理层(如 Person.layer = "XXX"),然后对应该接收消息的人员进行过滤:

    for (Person p : populationOfPerson.stream().filter(predicate).collect(Collectors.toList())) { /// 发送消息到 p; }

    【讨论】:

    • 抱歉,但这似乎是一种解决方法,而不是适当的 Anylogic 解决方案。
    【解决方案2】:

    如果您使用指向家庭成员的链接,则可以使用指向代理对象的链接,例如将其称为 familyLink 并将您的所有家庭联系在一起。您将拥有另一个独立的 workersLink。

    您可以通过 familyLink.connectTo(agent); 连接您的代理;其中代理人是家庭成员。

    向您的所有家人发送消息,您可以这样做:

    familyLink.sendToAllConnected(msg);
    

    【讨论】:

    • 答案很清楚,但也许不能解决我的问题。我上传了一张示例图片以阐明我的意图,所有链接都是“家庭关系”,但我只想将来自特定代理的消息(例如“节点 0”)发送到连接的节点(仅内部连接的组件通信)。使用sendToAllConnected(msg),我如何将代理女巫作为参数传递给开始通信?我正在寻找类似 familyLink.sendToAllConnected(agent, msg) 的东西。也许我误解了链接连接机制?也许每个 Person 代理都应该有一个 familyLink 对象的引用?
    • 你做 agent.familyLink.sendToAllConnected(msg) 其中agebnt是发送消息的家庭成员...阅读更多关于代理链接的信息...我不知道如何详细解释
    • 是的,我没有意识到连接链接对象是代理的属性,非常感谢,你让我开心!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多