simulation - Anylogic:如何让代理在队列中等待直到它改变状态?(离散事件流程图)
问题描述
我开始将 Anylogic 用于模拟类,为此我需要对以下行为进行建模:有一个代理流进入 FIFO 队列,然后进入服务器(我用延迟块建模),一次一个。代理有两种状态(称为 A 和 B),如果代理在状态 A 中到达队列的末尾,它必须等到它返回到状态 B 才能进入服务。
我认为在队列和延迟块之间有一个可容纳一个代理的等待块可能会解决这种情况。但我不知道如何让等待块在代理更改状态后立即释放代理。
欢迎使用其他方法。我只需要在延迟块之前保留代理,只要它处于状态 A,但不再需要。提前致谢。
解决方案
是的...在您的队列块之后,容量为 1 的等待块是我会做的。
现在,当您的代理进入状态时,在该 stateB 的进入操作上,您执行以下操作:
if(currentBlock().equals(main.waitBlock) && main.service.size()==0){
main.waitBlock.free(this);
}
您还需要在等待块的“on enter”中执行此操作:
if(agent.inState(agent.stateB) && service.size()==0){
self.free(agent);
}
另外,以防万一,在 main 中添加 0 的代理类型,以便能够使用 main。在您的代理状态代码中。