模拟先到先得的代理分配

Simulating first come first serve agent distribution

我目前有患者类型的代理在检查室可用时占用检查室,然后,为了模仿先到先得的系统,不同的医疗保健从业者会看到患者,我使用了一个 SelectOutputIn 和 4 个 SelectOutputOut 块,对应于可以看到病人的 4 位不同的从业者。每个 SelectOutputOut 块都有相同的概率对应于它们的资源类型。当所有从业者都很忙时,问题就出现了,似乎只把病人送到 Physio 路径并使它超载。这是因为它实际上是订单中的最后一个块吗?如何在所有从业者都很忙的情况下随机分配患者?

[][1

正确。如果所有概率都为零,AnyLogic 似乎会选择最后一个选项。为了解决你的问题,我们需要添加一个所有从业者都忙的条件。因此,您将有 3 种可能的结果,如下所示:

Surgeons.idle() + Fellows.idle() + Residents.idle() + Physios.idle() == 0 ? 0.25 : Surgeons.idle() > 0 ? 0.25 : 0

第一个0.25和第二个0.25的区别在于,第一种情况下,所有端口都会有0.25的概率。而在第二种情况下,4 个中的 3 个,或 4 个中的 2 个,甚至 4 个中的 1 个将有 0.25 的概率,具体取决于可用资源的数量。 AnyLogic 标准化概率。所以如果两个端口有 0.25 的概率,那么就像说它是 50/50 的机会。

最后,如果代码看起来太长,您可以用函数替换第一部分以获得cleaner/shorter代码。

函数体可以是:

return Surgeons.idle() + Fellows.idle() + Residents.idle() + Physios.idle();

假设您将函数命名为function,您可以将概率域中的代码简化如下:

function() == 0 ? 0.25 : Surgeons.idle() > 0 ? 0.25 : 0