如何在AnyLogic中分别计算两组人群的整体平均等待时间?
在AnyLogic中分别计算两组人群的整体平均等待时间
步骤1:给人群添加区分标识
- 在代表用户的Agent(比如
Person类)里加一个区分参数:要么用布尔型的isMale,要么用枚举型的gender(枚举值设为MALE、FEMALE)。 - 在生成Agent的
Source模块里,按业务逻辑给这个参数赋值,确保男女两组被准确标记。
步骤2:追踪单个人的等待时长
- 当Agent到达入口、开始等待时(比如进入
Queue组件前),把当前时间存到Agent的waitStartTime变量里(类型选double,存时间戳)。 - 当Agent结束等待(比如离开
Queue、开始接受服务),计算等待时长:waitTime = time() - waitStartTime,把结果存在Agent的waitTime变量中。
步骤3:分两组统计平均等待时间
有两种实用方法可选:
方法一:用内置统计组件(推荐)
- 添加两个
Statistics Collector组件,分别命名为maleWaitStats和femaleWaitStats。 - 配置每个统计器:
- 数据类型选
Agent,关联你的Person类。 - 过滤条件:男性统计器填
agent.isMale == true,女性统计器填agent.isMale == false(用枚举的话就是agent.gender == Gender.FEMALE)。 - 要收集的值选
agent.waitTime,统计类型设为Average。
- 数据类型选
- 之后直接调用
maleWaitStats.getAverage()、femaleWaitStats.getAverage()就能拿到两组的平均等待时间,还能绑定到仪表盘、文本框实时展示。
方法二:手动维护统计变量
- 在主环境(Main)里加四个变量:
totalMaleWaitTime(double,初始0):累计男性总等待时长maleCount(int,初始0):男性总人数totalFemaleWaitTime(double,初始0)femaleCount(int,初始0)
- 当Agent结束等待、算出
waitTime后,加判断逻辑:if(isMale){ totalMaleWaitTime += waitTime; maleCount++; } else { totalFemaleWaitTime += waitTime; femaleCount++; } - 计算平均时要处理除数为0的情况:
- 男性平均:
maleCount > 0 ? totalMaleWaitTime / maleCount : 0 - 女性平均:
femaleCount > 0 ? totalFemaleWaitTime / femaleCount : 0
- 男性平均:
步骤4:验证逻辑
- 运行模型时,用
trace()函数打印每个Agent的性别和等待时长,确认数据追踪没问题。 - 对比两种统计方法的结果,确保一致。
内容的提问来源于stack exchange,提问作者ana
相关产品推荐
相关产品推荐

