连接到集合中最近的代理
Connect to nearest agent in collection
所以我有几种不同的代理类型:Person、Factory、Hospital、Home、Doctor。
现在,除了 Person 之外,所有这些代理都通过网络连接,而 Person 的初始种群大小 = 0.
现在,当模型运行时,Person 代理将以给定的速率生成。我想要完成的是,Person 的每个实例都确定 Factory、Hospital 或 Home 的哪个实例最近,然后与该特定代理建立连接。
我该如何完成?
到目前为止,我已经能够让 Person 实例连接到最近的医院、最近的工厂或最近的家。我在Person的状态图中的entry action box中写了下面的代码:
Hospital nearestHospital = this.getNearestAgent(main.Hospital); this.connectTo(nearestHospital);
但是一直无法让Person的实例同时判断最近的Hospital、Factory、Home实例。
在您的 Person 代理中,您必须创建 3 个 link 代理,如下图所示:您将在代理面板中找到它们。
之后,您必须分别为医院、家庭和工厂创建连接。 (因为他们是不同的代理人)
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);
这就是它必须完成的方式......你以后用它做什么......我不知道
所以我有几种不同的代理类型:Person、Factory、Hospital、Home、Doctor。 现在,除了 Person 之外,所有这些代理都通过网络连接,而 Person 的初始种群大小 = 0.
现在,当模型运行时,Person 代理将以给定的速率生成。我想要完成的是,Person 的每个实例都确定 Factory、Hospital 或 Home 的哪个实例最近,然后与该特定代理建立连接。
我该如何完成?
到目前为止,我已经能够让 Person 实例连接到最近的医院、最近的工厂或最近的家。我在Person的状态图中的entry action box中写了下面的代码:
Hospital nearestHospital = this.getNearestAgent(main.Hospital); this.connectTo(nearestHospital);
但是一直无法让Person的实例同时判断最近的Hospital、Factory、Home实例。
在您的 Person 代理中,您必须创建 3 个 link 代理,如下图所示:您将在代理面板中找到它们。
之后,您必须分别为医院、家庭和工厂创建连接。 (因为他们是不同的代理人)
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);
这就是它必须完成的方式......你以后用它做什么......我不知道