代理无法退出时释放资源

时间:2018-05-27 18:01:50

标签: java simulation anylogic

我正在使用装配块来模拟产品的装配过程。此程序集块将已组装的产品推送到大小为1的队列中。有时,当程序集块完成其进程时,此队列已满,因此程序集将等待,直到队列释放为止。在此期间,资源仍然由程序集块占用并显示为忙碌。

我想显示资源的空闲时间,因此我希望程序集块完成程序集,将产品保留在其位置并释放资源,这将不会启动另一个程序集,直到其工作区再次空闲。

有没有办法解决这种问题?

1 个答案:

答案 0 :(得分:0)

以下是使用以下结构的方法:在输入构成产品的每个零件类型之前有一个等待块...在汇编程序之后和队列之前还有一个辅助队列提到它的大小为1 ...我将假设你只有1个资源可用,否则我认为拥有一个大小为1的队列是没有意义的,但你可以扩展它以使用更多的资源,如果你需要。等待块和辅助队列块具有最大容量:

model structure

现在创建一个名为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的队列中没有产品以及是否有足够的部件组装产品时才开始组装过程。

您将使用startAssembly();

在3个不同的地方调用此功能
  1. 在汇编程序blokc的退出中
  2. 在等待块的输入中
  3. 在wait1块的输入中