AnyLogic ResourcePool故障率无视指数分布参数,实际值超预期2313倍
AnyLogic ResourcePool故障机制参数失效问题
环境
- AnyLogic版本:8 Personal Learning Edition 8.9.5
- Build:8.9.5.202506190538 arm64
问题详情
创建名为Workers的ResourcePool并启用故障/修复机制,预期每名工人每小时发生0.02次事故,但实际约为2.313次/小时/工人,无论参数如何调整,均为预期值的2313倍。
代码实现
private double _Workers_initialTimeToFailure_xjal( final com.anylogic.libraries.processmodeling.ResourcePool<Agent> self, Agent unit ) { double _value; _value = exponential( hour() / Math.max(accident_rate_per_hour, 1e-12) ); _value = MINUTE.convertTo( _value, SECOND ); return _value; } private double _Workers_timeBetweenFailures_xjal( final com.anylogic.libraries.processmodeling.ResourcePool<Agent> self, Agent unit ) { double _value; _value = exponential( hour() / Math.max(accident_rate_per_hour, 1e-12) ); _value = MINUTE.convertTo( _value, SECOND ); return _value; }
其中accident_rate_per_hour = 0.02,hour() = 60.0。
测试结果
尝试多种方案,结果一致:
| 测试项 | 指数分布参数 | 预期表现 | 实际结果 |
|---|---|---|---|
| 原始方案 | hour() / accident_rate_per_hour(3000) | ~0.32次事故/8小时 | 37次事故/8小时 |
| 固定大值 | 100000.0 | ~0次事故 | 0次事故 ✓ |
| 固定中值 | 80000.0 | ~0.02次事故 | 37次事故 |
| 手动指数分布 | -Math.log(uniform(0,1)) * 80000 | ~0.02次事故 | 0次事故 |
| 调整速率 | accident_rate_per_hour = 0.001 | 成比例降低 | 仍为37次事故 |
| 速率接近零 | accident_rate_per_hour = 0.0000001 | ~0次事故 | 仍为37次事故 |
调试输出
hour() = 60.00, Expected mean time between failures = 3000.00 accidents=37, hours=8.00, workers=2, target λ=0.020/h, effective λ≈2.313/h/worker
有效速率始终为2.313次/小时/工人,与目标速率或指数参数无关。
关键观察
- 参数完全失效:指数分布参数对故障频率无影响
- 固定倍率:实际速率始终为预期值的约2313倍
- 阈值特性:参数超过约90000时,故障数骤降为0
- 时间单位正确:
hour() = 60,时间计算准确
疑问
- AnyLogic 8.9.5的ResourcePool故障机制是否存在已知Bug?
- 是否有其他方式为资源故障设置指数分布参数?
- ResourcePool的GUI设置是否会覆盖这些函数?
- 在AnyLogic中实现随机设备故障是否有替代方案?
该现象表明故障机制存在Bug,或对AnyLogic的分布处理逻辑存在误解,恳请提供相关见解。已尝试多种方案,但问题仍未解决。
内容的提问来源于stack exchange,提问作者user31498618
相关产品推荐
相关产品推荐

