AnyLogic疏散模拟中公交拾取数量的条件规则设置方案
AnyLogic 公交接驳动态拾取逻辑配置方案
核心配置思路
不要使用固定的内置拾取规则,通过拾取块的自定义模式实现两种规则的动态切换,同时保留疏散人员和接驳车辆的类型匹配逻辑,不破坏原有分类匹配的约束。
具体操作步骤
- 定位接驳车辆停靠流程中的拾取(Pickup)块,将默认的固定拾取规则切换为*Custom(自定义)*模式,弃用原固定配置的
exact quantity(wait for)规则。 - 先完成类型匹配约束配置:在拾取块的Agent过滤条件栏,写入车辆与疏散人员的匹配判断,避免跨类型混装凑数,参考逻辑:
其中person -> person.personType == vehicle.supportedPersonTypepersonType是疏散人员Agent的类型字段,supportedPersonType是当前接驳公交的允许载运类型字段,保证拾取的人员都是和当前车辆匹配的对象。 - 配置动态拾取数量逻辑:在拾取块的需要拾取的Agent数量栏,写入条件判断,其中你的匹配类型等待区对象名为
targetWaitingZone,公交额定载客阈值为12:// 统计当前等待区内匹配当前车辆类型的人员数量 int matchCount = targetWaitingZone.size(p -> p.personType == vehicle.supportedPersonType); if (matchCount > 12){ return 12; // 等待人数超阈值时,按满客数等待拾取,等价于原exact quantity(wait for)规则 }else{ return matchCount; // 等待人数≤阈值时,返回全部可拾取的人数,等价于quantity(if available)规则 } - 配套设置拾取等待行为:在拾取块的等待逻辑配置中,选择“仅当返回的拾取数量等于等待区可用数量时,不等待直接拾取”,其余场景保持“等够指定拾取数量再拾取”的默认等待逻辑,刚好匹配上述分支的行为。
优化注意事项
- 不要额外在车辆出发逻辑中绑定“满额才出发”的独立判断,所有载客判断统一放在拾取块中完成,避免最后一批人员拾取完成后触发不了发车流程。
- 如果疏散人员是持续抵达等待区的,可以在人数≤12的分支里加一个短时间的防抖等待(通常10~20秒,根据你的疏散流节奏调整),避免零星抵达的少量人员触发公交空驶,平衡运输效率和最后一批人员的滞留问题。
- 因为统计匹配人数的时候是直接带类型过滤的,不需要为不同类型的疏散人员拆分独立的等待区,模型复杂度不会增加。
内容的提问来源于stack exchange,提问作者Glassmanet
相关产品推荐
相关产品推荐

