Anylogic 中多联系人网络中的通信
Communication in multiple contacts network in Anylogic
我已经在 Main
代理环境中定义了一个 Person
代理和一群“生活”的人。我想知道在 anylogic 中是否有某种机制来定义多层网络并仅在特定层发送消息,即如果代理在同一个家庭中,我想为个人代理定义一些关系,如“家庭联系”(见图片,每个连接的组件都是一个家庭),如果代理在同一个地方工作,则为“工作场所连接”等。从帮助指南中我了解到可以创建多个 custom connections links.
我不清楚的是当我在代理之间发送消息时如何引用特定的关系,即我只会从代理 X 向连接的代理 Y1 发送消息,...,关系“家庭关系”的 Y2 忽略关系“工作场所关系”的相关代理。
从 api 文档中,我只看到 getConnections()
(或 send()
)到 return 所有已连接代理的方法,无法指定连接链接对象(又名特定网络层)。
您可以使用参数来定义代理层(如 Person.layer = "XXX"),然后对应该接收消息的人员进行筛选:
for (Person p : populationOfPerson.stream().filter(predicate).collect(Collectors.toList())) {
/// 发送消息给 p;
}
如果您对家庭成员使用 link,您可以对代理对象使用 link,例如将其称为 familyLink 并将您的所有家庭连接在一起。您将拥有另一个独立的工人Link。
您通过 familyLink.connectTo(agent) 连接您的代理;其中代理人是家庭成员。
要向所有家人发送消息,您可以执行以下操作:
familyLink.sendToAllConnected(msg);
我已经在 Main
代理环境中定义了一个 Person
代理和一群“生活”的人。我想知道在 anylogic 中是否有某种机制来定义多层网络并仅在特定层发送消息,即如果代理在同一个家庭中,我想为个人代理定义一些关系,如“家庭联系”(见图片,每个连接的组件都是一个家庭),如果代理在同一个地方工作,则为“工作场所连接”等。从帮助指南中我了解到可以创建多个 custom connections links.
我不清楚的是当我在代理之间发送消息时如何引用特定的关系,即我只会从代理 X 向连接的代理 Y1 发送消息,...,关系“家庭关系”的 Y2 忽略关系“工作场所关系”的相关代理。
从 api 文档中,我只看到 getConnections()
(或 send()
)到 return 所有已连接代理的方法,无法指定连接链接对象(又名特定网络层)。
您可以使用参数来定义代理层(如 Person.layer = "XXX"),然后对应该接收消息的人员进行筛选:
for (Person p : populationOfPerson.stream().filter(predicate).collect(Collectors.toList())) { /// 发送消息给 p; }
如果您对家庭成员使用 link,您可以对代理对象使用 link,例如将其称为 familyLink 并将您的所有家庭连接在一起。您将拥有另一个独立的工人Link。
您通过 familyLink.connectTo(agent) 连接您的代理;其中代理人是家庭成员。
要向所有家人发送消息,您可以执行以下操作:
familyLink.sendToAllConnected(msg);