Anylogic:等待块的 While(true) 函数

Anylogic: While(true) Function for Wait Block

您好,我正在尝试模拟一个装配站,因此我想用一个等待块来协调我的 material 的发布。我的流程包括以下步骤:

3 个不同的路径:源 --> 捕获传输器 ---> 移动 ---> 等待块 ---> 释放 ---> 汇编器(见截图)

Model

当所有代理都到达他们的等待块时,我想在他们的等待块中释放我的代理。我现在面临的问题是,所有 3 个特工都在不同的时间到达。例如,代理一在 waitblock1 中 10 分钟后到达,代理 2 和 3 在块 2 和 3 中 5 分钟后到达。因此代理 1 应该检查其他代理是否到达他们的块,然后被释放。此外,Agent 2 和 3 应该作用相同,以便同时释放所有 3 个 agent。

因此我在等待块 1 中添加了一个 while(true) 循环来证明等待块 2 和 3 中是否有代理,然后在当前等待块中释放代理。根据我的逻辑,我会将此代码也添加到等待块 2 和 3,以便最终释放所有代理

代码在“waitblock”的“on Enter”字段中:

while(true) {if(wait1.size()>0 &wait2.size()>0)wait.free(agent);}

如果我 运行 模型我得到以下错误代码:“无法访问的代码”。老实说,我是使用 Java 的新手,但我会说代码应该是正确的?也许我比较等待块和释放代理的方法是错误的。无论如何,如果有人能提供帮助,我会很高兴:)

提前致谢

将条件放入 while() 或添加 break 语句

while(wait1.size()>0 &wait2.size()>0)
   ; 
wait.free(agent);

否则循环永远不会结束,无法访问之后的代码

这不是你的做法,你不能使用 while(true) 除非你 运行 在一个独立的线程中

and运算符也写成&&而不是&

所以在每个块的输入上做一个函数,在那个函数上你或多或少会做以下事情:

if(wait1.size()>0 && wait2.size()>0 && wait.size()>0){
     wait.free(wait.get(0));
     wait1.free(wait1.get(0));
     wait2.free(wait2.get(0));
}