You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic:按钮删除Assembler队列中Agent失败,求解决方案

AnyLogic中Assembler队列Agent无法删除的解决方案

我在AnyLogic模型里想通过按钮删除Assembler中的Agent,目前代码能删掉Assembler的delay部分Agent,但队列里的删不掉。按钮动作字段用了以下代码,点击后队列Agent仍存在,求解决办法。

模型截图

现有代码

while(Lager_Oberteile.size() > 0) {
      Agent agent = Lager_Oberteile.removeFirst();
}
while(Lager_Plättchen.size() > 0) {
      Agent agent = Lager_Plättchen.removeFirst();
}

if (Klebestation.queueSize(1) > 0) {
     Agent agent = Klebestation.queueGet(1, 0);
     Klebestation.remove(agent);  
}    
if (Klebestation.queueSize(2) > 0) {
     Agent agent = Klebestation.queueGet(2, 0);
     Klebestation.remove(agent);       
} 

if (Klebestation.delaySize() == 1) {
     Agent agent = Klebestation.delayGet(0);
     Klebestation.remove(agent);
}

offene_Aufträge = 0;
Stopp1.unblock();
Stopp2.unblock();

问题分析与解决方案

你当前针对Assembler(Klebestation)队列的代码仅删除了每个队列的第一个Agent,如果队列中有多个Agent,剩余的会保留下来。另外,AnyLogic的Assembler组件提供了更直接的队列清空方法,无需手动逐个移除。

修正后的代码如下:

// 直接清空两个仓库的所有Agent(替代原循环)
Lager_Oberteile.clear();
Lager_Plättchen.clear();

// 清空Assembler的两个队列(循环删除所有元素,或用queueClear更简洁)
// 方法1:循环删除
while(Klebestation.queueSize(1) > 0) {
    Klebestation.remove(Klebestation.queueGet(1, 0));
}
while(Klebestation.queueSize(2) > 0) {
    Klebestation.remove(Klebestation.queueGet(2, 0));
}

// 方法2:用内置的queueClear方法(更简洁)
// Klebestation.queueClear(1);
// Klebestation.queueClear(2);

// 清空delay中的所有Agent(兼容多个Agent的情况)
while(Klebestation.delaySize() > 0) {
    Klebestation.remove(Klebestation.delayGet(0));
}

offene_Aufträge = 0;
Stopp1.unblock();
Stopp2.unblock();

关键说明

  • 使用clear()方法可以直接清空普通Agent集合(如Lager_Oberteile这类队列),比循环移除更高效
  • Assembler的队列需要用queueClear(队列编号)或循环逐个删除,确保所有Agent都被移除
  • delay部分改用循环判断delaySize() > 0,避免仅处理单个Agent的情况

内容的提问来源于stack exchange,提问作者Nico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:45:35