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
相关产品推荐
相关产品推荐

