如何在AnyLogic中基于Person Agent的age属性控制到达率?
基于Person的age属性控制到达率的解决方案
- 替换多Source为单一Source:放弃原有的三个设施各对应一个Source的方式,改用单个Source生成所有Person,后续通过分流逻辑将Person导向对应设施的流程,这样能统一管控不同年龄层的到达率。
- 自定义到达率函数:在Source的「到达率」设置中,使用自定义函数替代固定数值。创建返回
double类型的函数getArrivalRateByAge(),根据age属性返回对应到达率:
若age为连续值,可调整为区间判断,例如double getArrivalRateByAge() { if (agent.age == 65) { return 5.0; // 每分钟5人 } else if (agent.age == 20) { return 1.0; // 每分钟1人 } // 可扩展更多年龄区间的逻辑 return 0.0; // 默认到达率 }if (agent.age >= 60 && agent.age <= 70) return 5.0; - 为Person赋值age属性:在Source的「On exit」动作中,给生成的Person设置age属性。如果需要按概率生成不同年龄的Person,可使用随机逻辑:
double prob = random(); if (prob < 0.2) { agent.age = 20; } else if (prob < 0.6) { agent.age = 65; } // 补充其他年龄层的概率分配规则 - 按facilityChoice分流:在Source后添加
SelectOutput模块,根据Person的facilityChoice属性,将其分流到对应设施的MoveTo模块入口,对接原有的Queue→Delay→Sink流程。 - 验证到达率:通过仪表盘(Dashboard)添加统计组件,监控不同age的Person每分钟到达数量,确认是否符合设定的到达率要求。
内容的提问来源于stack exchange,提问作者Morshed Dolon
相关产品推荐
相关产品推荐

