Java 连接到集合中最近的代理

Java 连接到集合中最近的代理,java,anylogic,agent-based-modeling,Java,Anylogic,Agent Based Modeling,所以我有几种不同的代理类型:个人、工厂、医院、家庭、医生。 现在,除了Person之外,所有这些代理都通过网络连接,而Person的初始人口规模为0 现在,当模型运行时,将以给定的速率生成人员代理。我想要完成的是,每个Person实例都确定工厂、医院或家庭的哪个实例是最近的,然后与特定代理建立连接 我将如何做到这一点 到目前为止,我已经能够让人的实例连接到最近的医院、最近的工厂或最近的家。我在个人状态图的输入操作框中编写了以下代码: Hospital nearestHospital = this

所以我有几种不同的代理类型:个人、工厂、医院、家庭、医生。 现在,除了Person之外,所有这些代理都通过网络连接,而Person的初始人口规模为0

现在,当模型运行时,将以给定的速率生成人员代理。我想要完成的是,每个Person实例都确定工厂、医院或家庭的哪个实例是最近的,然后与特定代理建立连接

我将如何做到这一点

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

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

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

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

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

Hospital nearestHospital=this.getNearestAgent(main.hospitals);
Home nearestHome=this.getNearestAgent(main.homes);
Factory nearestFactory=this.getNearestAgent(main.factories);
双距离医院=距离(最近的医院);
双距离到家=距离(最近的家);
双距离工厂=距离(最近的工厂);
hospitalLink.disconnectFromAll();
homeLink.disconnectFromAll();
factoryLink.disconnectFromAll();

如果谢谢你,菲利佩。但是,这不是我的意思。我想让个人代理人考虑医院、工厂和家庭同时连接到最近的一个,所以那个人只连接到医院、工厂和家中的一个。如果我想找出第二个最近的医院实例,我该如何修改?因此,我首先定义了最近的医院,现在我想知道第二个最近的代理。到目前为止,我的搜索还没有找到这个问题的明确解决方案。类似于以下列表hospitalList=sortAscending(hospitals,h->h.distanceTo(yourAgent));Hospital nearest=hospitalList.get(0);Hospital second nearest=hospitalList.get(1);
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);