我如何遍历人口以获得离我最近的代理人并动态检查代理人的距离?
How I can iterate through a population to get the nearest agent of mine and check agent's distance dynamically?
我正在尝试做一个流行病传播模型,其中所有代理人都在连续移动 space。所有代理都有一定的 "fieldOfVision" 区域。如果在这个 "fieldOfVision" 的 "susceptible" 特工中,另一个 "exposed" 的特工来了并停留了 5 分钟或更长时间,那么那个易受影响的特工也会变成 "exposed"。如果那个 "exposed" 代理来了并停留少于 5 分钟,那么 "susceptible" 代理将保持 "susceptible" 状态。
我代理的状态图如下:
最初 6 个代理将 "exposed" 通过从 main 发送一些消息。由于代理也是行人类型的代理,在时间为零时,没有代理接收消息。因此,我必须在模型启动 3 分钟后从 main 发送消息,以便有人接收消息。效果很好。
从"susceptible"状态的第一个转换动作如下。我将转换超时设置为 3.1 分钟,因为在 3 分钟时将有一些第一次暴露的代理。
如果"fieldOfVision"附近或范围内没有人,则"noExposedNearby"转换将执行如下。
如果 "fieldOfVision" 中有人 "exposed" 那么 "foundExposedNearby" 转换将如下执行,并再次经历相同的循环,直到那个暴露的人不在 "fieldOfVision"
如果暴露的人从 "fieldOfVision" 三角形离开,则 "exposedNearbyLeft" 过渡
将执行如下并计算最终时间。
exposedNearbyLeft transition]5
然后 "probablyExposed" 状态将计算 "exposed" 特工靠近 "susceptible" 特工的总暴露时间,并检查它是否超过 5。如果它超过 5 那么它会
经历 "enoughExposure" 过渡,否则它将经历 "notEnoughExposure" 并再次回到易感状态。
问题是,在 7 分钟后的运行期间,我收到此错误。看来,我的代码在一段时间后无法获得 pedX 和 pedY 的值。我的问题是如何继续该循环并寻找最近的暴露代理和状态图的易感代理在彼此 "fieldOfVision" 内的持续时间?有什么建议吗?
阅读起来很长post。如果您已经走到这一步,首先感谢您的耐心等待。此外,如果您能分享一些关于如何获取代理的动态距离以检查某人是否新暴露的想法,我将不胜感激。非常感谢您的反馈。
实际发生的是 thisPed 为 null,这可能会发生,因为在某些时候,在 checkExposedNearby 转换期间没有发现处于暴露状态的代理。
根据所提供的信息,我没有看到其他选项。
正如 Felipe 所说,这是因为 thisPed
在您的代码中为 null。
简单检查一下,不要执行这段代码,如下:
if (myPed != null) {
your code doing stuff with myPed...;
}
当 myPed 为空时,您可以添加一个 else
部分来执行某些操作,但这取决于您的模型(即,如果这实际上永远不会发生,则抛出错误...)
我正在尝试做一个流行病传播模型,其中所有代理人都在连续移动 space。所有代理都有一定的 "fieldOfVision" 区域。如果在这个 "fieldOfVision" 的 "susceptible" 特工中,另一个 "exposed" 的特工来了并停留了 5 分钟或更长时间,那么那个易受影响的特工也会变成 "exposed"。如果那个 "exposed" 代理来了并停留少于 5 分钟,那么 "susceptible" 代理将保持 "susceptible" 状态。
我代理的状态图如下:
最初 6 个代理将 "exposed" 通过从 main 发送一些消息。由于代理也是行人类型的代理,在时间为零时,没有代理接收消息。因此,我必须在模型启动 3 分钟后从 main 发送消息,以便有人接收消息。效果很好。
从"susceptible"状态的第一个转换动作如下。我将转换超时设置为 3.1 分钟,因为在 3 分钟时将有一些第一次暴露的代理。
如果"fieldOfVision"附近或范围内没有人,则"noExposedNearby"转换将执行如下。
如果 "fieldOfVision" 中有人 "exposed" 那么 "foundExposedNearby" 转换将如下执行,并再次经历相同的循环,直到那个暴露的人不在 "fieldOfVision"
如果暴露的人从 "fieldOfVision" 三角形离开,则 "exposedNearbyLeft" 过渡 将执行如下并计算最终时间。
exposedNearbyLeft transition]5
然后 "probablyExposed" 状态将计算 "exposed" 特工靠近 "susceptible" 特工的总暴露时间,并检查它是否超过 5。如果它超过 5 那么它会 经历 "enoughExposure" 过渡,否则它将经历 "notEnoughExposure" 并再次回到易感状态。
问题是,在 7 分钟后的运行期间,我收到此错误。看来,我的代码在一段时间后无法获得 pedX 和 pedY 的值。我的问题是如何继续该循环并寻找最近的暴露代理和状态图的易感代理在彼此 "fieldOfVision" 内的持续时间?有什么建议吗?
阅读起来很长post。如果您已经走到这一步,首先感谢您的耐心等待。此外,如果您能分享一些关于如何获取代理的动态距离以检查某人是否新暴露的想法,我将不胜感激。非常感谢您的反馈。
实际发生的是 thisPed 为 null,这可能会发生,因为在某些时候,在 checkExposedNearby 转换期间没有发现处于暴露状态的代理。
根据所提供的信息,我没有看到其他选项。
正如 Felipe 所说,这是因为 thisPed
在您的代码中为 null。
简单检查一下,不要执行这段代码,如下:
if (myPed != null) {
your code doing stuff with myPed...;
}
当 myPed 为空时,您可以添加一个 else
部分来执行某些操作,但这取决于您的模型(即,如果这实际上永远不会发生,则抛出错误...)