Anylogic:如何让代理在队列中等待直到它改变状态? (离散事件流程图)
Anylogic: How to keep an agent waiting in queue until it changes state? (Discrete Events flowchart)
我开始使用 Anylogic 进行模拟 class,为此我需要对以下行为进行建模:代理流进入 FIFO 队列,然后进入服务器 (我用延迟块建模),一次一个。代理有两个状态(称为 A 和 B),如果代理在状态 A 到达队列末尾,它必须等到它 returns 到状态 B 才能进入服务。
我认为在队列和延迟块之间具有一个代理容量的等待块可能会解决这种情况。但是我不知道如何让等待块在它改变状态后立即释放代理。
欢迎使用其他方法。我只需要在延迟块之前保留代理,只要它处于状态 A,但不再保留。提前致谢。
是的...我会在您的队列块之后使用容量为 1 的等待块。
现在,当您的代理进入状态时,您将在该状态 B 的进入操作上执行以下操作:
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。在您的代理状态代码中。
我开始使用 Anylogic 进行模拟 class,为此我需要对以下行为进行建模:代理流进入 FIFO 队列,然后进入服务器 (我用延迟块建模),一次一个。代理有两个状态(称为 A 和 B),如果代理在状态 A 到达队列末尾,它必须等到它 returns 到状态 B 才能进入服务。
我认为在队列和延迟块之间具有一个代理容量的等待块可能会解决这种情况。但是我不知道如何让等待块在它改变状态后立即释放代理。
欢迎使用其他方法。我只需要在延迟块之前保留代理,只要它处于状态 A,但不再保留。提前致谢。
是的...我会在您的队列块之后使用容量为 1 的等待块。
现在,当您的代理进入状态时,您将在该状态 B 的进入操作上执行以下操作:
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。在您的代理状态代码中。