Anylogic技术问题:Delay块满容时Hold队列,降至90时解除如何实现?
AnyLogic舞蹈俱乐部入口控制实现方案
前提模型结构
假设你的模型流程是:Source(生成顾客) → Queue(入口排队) → Delay(模拟俱乐部内停留) → Sink(顾客离开),其中Delay块代表俱乐部内部,需先将其Capacity(容量)设置为100。
实现方式一:直接利用Delay块的内置事件(最简方案)
- 双击Delay块,切换到「Events」标签页
- 在「On enter」事件(顾客进入俱乐部时触发)中添加代码:
// 检查当前俱乐部人数是否达到满员100,是则锁住入口队列 if (this.size() == 100) { entranceQueue.hold(); // entranceQueue替换为你实际的Queue块名称 } - 在「On exit」事件(顾客离开俱乐部时触发)中添加代码:
// 检查当前俱乐部人数是否降到90,是则解锁入口队列 if (this.size() == 90) { entranceQueue.release(); // 同样替换为你的Queue块名称 }
实现方式二:状态变量监听(适合扩展需求)
如果后续需要基于俱乐部人数添加更多逻辑,推荐用变量监听:
- 在主代理中添加整数型变量
clubOccupancy,用于实时记录俱乐部内人数 - 回到Delay块的「Events」标签页:
- 「On enter」事件写:
clubOccupancy++; - 「On exit」事件写:
clubOccupancy--;
- 「On enter」事件写:
- 选中
clubOccupancy变量,添加「On change」事件(变量值变化时触发),写入代码:if (clubOccupancy == 100) { entranceQueue.hold(); } else if (clubOccupancy == 90) { entranceQueue.release(); }
注意事项
- 必须确保代码中引用的Queue块名称和你模型里的实际名称完全一致,否则会报错
- 上述逻辑支持重复触发:满员锁门→人数降到90开门→再次满员锁门,循环生效
- 可添加「仪表盘」组件绑定
clubOccupancy变量,方便实时查看俱乐部人数,调试更直观
内容的提问来源于stack exchange,提问作者eytann
相关产品推荐
相关产品推荐

