【发布时间】:2018-11-06 09:02:18
【问题描述】:
我正在使用组装块来模拟产品的组装过程。该组装块将组装好的产品推入大小为 1 的队列。有时,当组装块完成其进程时,该队列已满,因此组装等待直到队列空闲。在此期间,资源仍被组装块占用并显示为忙碌。
我想显示资源的空闲时间,因此我希望组装块完成组装,将产品留在原处并释放资源,直到其工作场所再次空闲时才会开始另一个组装。
有没有办法得到这样的行为?
【问题讨论】:
标签: java simulation anylogic
我正在使用组装块来模拟产品的组装过程。该组装块将组装好的产品推入大小为 1 的队列。有时,当组装块完成其进程时,该队列已满,因此组装等待直到队列空闲。在此期间,资源仍被组装块占用并显示为忙碌。
我想显示资源的空闲时间,因此我希望组装块完成组装,将产品留在原处并释放资源,直到其工作场所再次空闲时才会开始另一个组装。
有没有办法得到这样的行为?
【问题讨论】:
标签: java simulation anylogic
这是使用以下结构的方法,其中您在输入将构成您的产品的每种零件类型之前都有一个等待块......您还有一个辅助队列,位于组装机之后和您的队列之前提到哪个大小为 1...我假设您只有 1 个可用资源,否则我认为拥有大小为 1 的队列是没有意义的,但如果需要,您可以将其扩展为使用更多资源.等待块和辅助队列块具有最大容量:
现在创建一个名为 startAssembly 的函数,它将执行以下操作:
if(auxiliaryQueue.size()==0 && wait.size()>=assembler.quantity1 && wait1.size()>=assembler.quantity2 && resourcePool.idle()>0){
for(int i=0;i<assembler.quantity1;i++)
wait.free(wait.get(i));
for(int i=0;i<assembler.quantity2;i++)
wait1.free(wait1.get(i));
}
此函数仅在资源空闲、大小为 1 的队列中没有产品且有足够的零件来组装产品时才开始组装过程。
您将在 3 个不同的地方使用 startAssembly(); 调用此函数
【讨论】:
wait9.free(wait9.get(0));。当我删除这部分时,它可以工作,但它将所有代理直接推送到装配块。我猜wait9.get(0) 有问题。