AnyLogic中如何分别统计普通与优先级患者的队列停留时间分布
AnyLogic分队列统计患者停留时间解决方案
方法一:单个TimeMeasure组件+分组标记
- 给患者智能体添加一个区分变量:比如加个布尔型变量
isPriorityPatient,生成普通患者时设为false,优先级患者设为true - 队列前只放一个
TimeMeasureStart,所有患者都走这个组件 - 队列后只放一个
TimeMeasureEnd,所有患者走这个组件 - 打开
TimeMeasureEnd的属性面板,在「数据收集」模块里,把「分组依据」选择患者的isPriorityPatient变量 - 运行模型后,TimeMeasure会自动拆分出两组数据,你能直接看到两类患者的停留时间分布(直方图、均值、中位数等)
方法二:自定义变量+独立直方图统计
- 给患者智能体加一个
double类型的变量queueEnterTime - 在患者进入队列的On Enter动作里,写入:
queueEnterTime = time();(记录进入队列的时间) - 在患者离开队列前往楼层的On Exit动作里,计算停留时间:
double waitTime = time() - queueEnterTime; - 拖两个
Histogram组件到画布,分别命名为histNormal和histPriority - 在离开队列的动作里加判断逻辑:
if(isPriorityPatient){ histPriority.add(waitTime); }else{ histNormal.add(waitTime); } - 运行后两个直方图会分别统计对应患者的停留时间分布
关于你之前报错的原因
用两组TimeMeasureStart+TimeMeasureEnd时,必然有部分患者没走对应的Start组件(比如普通患者误走了优先级的Start,或者反过来),AnyLogic要求每个End必须匹配同一个Start进入的智能体,所以触发了「未通过对应TimeMeasureStart」的报错。而两组Start配一组End的话,End无法区分时间来自哪个Start,自然没法实现分组统计。
内容的提问来源于stack exchange,提问作者KTH
相关产品推荐
相关产品推荐

