连接到集合中最近的代理

时间:2018-02-01 13:20:42

标签: java anylogic agent-based-modeling

所以我有几种不同的代理人类型:人,工厂,医院,家庭,医生。 现在,除Person之外的所有这些代理都通过网络连接,而Person的初始填充大小= 0。

现在,当模型运行时,将以给定的速率生成Person代理。我想要完成的是Person的每个实例确定Factory,Hospital或Home的哪个实例是最近的,然后建立与该特定代理的连接。

我将如何做到这一点?

到目前为止,我已经能够将Person的实例连接到最近的医院,最近的工厂或最近的家庭。我在Person的状态图的输入操作框中编写了以下代码:

Hospital nearestHospital = this.getNearestAgent(main.Hospital); this.connectTo(nearestHospital);

但我一直无法让Person的实例同时确定最近的Hospital,Factory,Home实例。

1 个答案:

答案 0 :(得分:1)

在您的Person代理中,您必须创建3个代理链接,如下图所示:您将在代理选项板中找到它们。

Person Agent

之后,您必须为医院,家庭和工厂独立创建连接。 (因为他们是不同的代理人)

Hospital nearestHospital = this.getNearestAgent(main.hospitals);
Home nearestHome = this.getNearestAgent(main.homes);
Factory nearestFactory = this.getNearestAgent(main.factories);
double distanceToHospital=distanceTo(nearestHospital);
double distanceToHome=distanceTo(nearestHome);
double distanceToFactory=distanceTo(nearestFactory);

hospitalLink.disconnectFromAll();
homeLink.disconnectFromAll();
factoryLink.disconnectFromAll();

if(distanceToHospital<distanceToHome && distanceToHospital<distanceToFactory)
   hospitalLink.connectTo(neareastHospital);
else if(distanceToHome < distanceToFactory)
   homeLink.connectTo(neareastHome);
else
   factoryLink.connectTo(nearestFactory);

这就是它必须要完成的方式......你以后用它做什么......我不知道