Anylogic:队列超时和条件

Anylogic: Queue timeout & condition

在默认设置中,可以在队列中设置一个时间,在该时间之后代理通过 outTimeOut 离开队列。但是,只能在相应字段中输入固定时间,例如12小时。有没有可能link这12个小时有条件?就我而言,如果还满足特定条件,则代理只能在 12 小时后通过 outTimeOut 离开队列。在我的例子中,如果变量 varIN == 1.

收集每个代理的队列统计时间。创建一个名为 entryTime 的参数。当他们进入区块时,设置 agent.entryTime=time();

您可以创建一个事件,每 1 秒循环一次队列,并从队列中移除满足您条件的代理(通过使用 remove(Agent agent) 函数)。这意味着如果 (time()-agent.entryTime>12)&&(agent.varIN==1),您将删除该代理。

循环将如下所示:

for (int i=0; i< yourQueue.size(); i++) {
    YourAgentType currentAgent = ((YourAgentType)yourQueue.get(i));

   if ((time()-currentAgent.entryTime>12)&&(currentAgent.varIN==1)){
     yourQueue.remove(currentAgent);
}
}

您可以使用函数(返回双精度值)来定义和计算您喜欢的最复杂的逻辑。如果您提供 Agent 类型的参数(或流经块的特定代理类型),它甚至可以说明您的代理特征。

在队列块超时时,调用该函数即可。