Anylogic 资源池请求队列未清除

问题描述 投票:0回答:4

我有一个非常简单的模型,它有一个服务块,需要两个资源池的资源集,每个资源池一个。

除此之外,两个资源池之一有请求选择条件。两个资源池的容量都是 1.

variable
的初始值为假。

当我运行模型,代理到达时,由于条件的原因,他们不会被处理。现在,如果我在运行时将条件从 false 更改为 true,则代理仍然停留在服务块的队列中。这就像在代理到达时评估条件,一旦条件更新就不会再次检查,更糟糕的是,在条件从 false 变为 true 之后,资源被保留并且不会被稍后出现的代理使用。

这是设计使然吗?如何解决?

谢谢。

anylogic
4个回答
2
投票

这是在 AnyLogic 中使用资源时最烦人的事情之一,所以解决方案是巧妙地使用函数

service.recalculateResourceChoiceConditions()

在你的例子中,当变量值改变时,你需要立即运行这个方法。

当你有很多代理时,这样做很慢,所以你只需要尽可能高效地做

它类似于 AnyLogic 中任何需要条件的东西,例如条件触发的事件或条件触发的转换。永远无法保证您会触发该条件,因此您始终必须手动采取行动。

如果不是这样,AnyLogic 总是超级慢,所以我想是的,这是设计使然


0
投票

这是因为条件只检查一次。代理人再问就没有情报,这是你作为建模者的责任。

因此,在

Seize
块(“自定义资源选择”)中指定条件通常更优雅。在这里,代理 will 注意到资源单元是否可用并且您不会以无限队列结束:


0
投票

如果您需要使用 ResourcePool 条件,可以将其外包给一个函数并在 before 甚至占用之前检查该函数。如果不能满足,则将代理放入队列(或等待)并让他们定期手动重新检查。


0
投票

我刚收到 AnyLogic 的回音。 他们确认这是一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.