我有一个非常简单的模型,它有一个服务块,需要两个资源池的资源集,每个资源池一个。
除此之外,两个资源池之一有请求选择条件。两个资源池的容量都是 1.
variable
的初始值为假。
当我运行模型,代理到达时,由于条件的原因,他们不会被处理。现在,如果我在运行时将条件从 false 更改为 true,则代理仍然停留在服务块的队列中。这就像在代理到达时评估条件,一旦条件更新就不会再次检查,更糟糕的是,在条件从 false 变为 true 之后,资源被保留并且不会被稍后出现的代理使用。
这是设计使然吗?如何解决?
谢谢。
这是在 AnyLogic 中使用资源时最烦人的事情之一,所以解决方案是巧妙地使用函数
service.recalculateResourceChoiceConditions()
在你的例子中,当变量值改变时,你需要立即运行这个方法。
当你有很多代理时,这样做很慢,所以你只需要尽可能高效地做
它类似于 AnyLogic 中任何需要条件的东西,例如条件触发的事件或条件触发的转换。永远无法保证您会触发该条件,因此您始终必须手动采取行动。
如果不是这样,AnyLogic 总是超级慢,所以我想是的,这是设计使然
如果您需要使用 ResourcePool 条件,可以将其外包给一个函数并在 before 甚至占用之前检查该函数。如果不能满足,则将代理放入队列(或等待)并让他们定期手动重新检查。
我刚收到 AnyLogic 的回音。 他们确认这是一个错误。