【发布时间】:2018-11-08 10:12:24
【问题描述】:
让我描述一下上面的情况:
- 在每个源块注入 20 种药剂。
- 等待块有最大容量。
- 汇编器使用每个源中的 1 个,延迟为 1s。
- 队列有最大容量
- QueueSize1 是一个大小为 1 的队列
- 延迟为 15 秒
- ResourcePool 的容量为 1
函数 startAssembly():
if(queue.size()==0 && wait.size()>=1 && resourcePool.idle()>=1){
wait.free(wait.get(0));
}
System.out.println("Queue: " + queue.size());
System.out.println("Wait: " + wait.size());
System.out.println("Idle: " + resourcePool.idle());
函数 startAssembly();被称为:
- onEntry 等待
- onExit 汇编器
- 队列退出
我想要发生什么: 通过队列 (FIFO) 连接两个流程的装配线建模。进程 1(汇编程序)比进程 2(延迟)更快。因此 queueSize1 填满,并且在进程 1 完成第二部分后,它不能再工作了。通常工作人员会显示为busy(),因为代理程序不能离开汇编程序。我希望它在发生这种情况时使用函数、等待和队列显示为 idle()。
会发生什么:
一个代理通过汇编程序,之后没有其他代理能够通过等待块。通过收集 resourcePool.idle() 我注意到即使在代理退出组装块之后也没有可用资源。我还在 if 部分尝试了类似assembler.delaySize()==0 的构造,但也有一些奇怪的行为。用 delaySize-part 替换空闲部分有点工作,但它也会将 2 或 3 个代理传递到汇编程序块中。所以“生产线”包含的工件多于应有的数量。
问题: 这是汇编程序块的正常行为吗?是否有可能避免这种情况并获得正确的空闲()量?有没有其他可能的方法来模拟我的“生产线”?
【问题讨论】:
标签: java simulation anylogic