Source生成代理数量过多:小时级到达速率配置后产出速率异常问题
Source速率不符合预期问题排查方案
第一步:校验Source组件基础配置
- 首先打开Source的属性面板,确认到达类型选择的是「速率」(而非「间隔时间」),速率单位确实设置为「小时」:这是最常见的错误原因,若单位默认是「秒」,你传入的
triangular(1,5,2)会被识别为每秒生成1-5个代理,平均2个/秒,和你观测到的每秒3个左右的波动结果完全吻合。 - 若不想修改Source默认单位,可直接调整代码做单位换算:
sourceShoppers.set_rate(triangular(1, 5, 2) / 3600.0);,把每小时的速率转换为每秒的速率值。
第二步:检查速率设置代码的生效逻辑
- 确认
set_rate的调用时机:不要在模型初始化完成前调用该方法,避免配置被组件默认值覆盖;同时排查是否有其他事件、函数重复调用该方法修改了速率值,可在代码同位置加打印验证:double targetRate = triangular(1, 5, 2); traceln("当前设置速率:" + targetRate + ",模型时间:" + time()); sourceShoppers.set_rate(targetRate); - 确认你调用的是速率对应的方法:若误调用
set_intervalTime()设置间隔时间,也会出现速率完全不符合预期的问题。
第三步:排除运行观测误差
- 不要直接通过墙钟时间数生成的代理数量:若你开启了模型加速运行,墙钟的1秒可能对应模型时间的数小时,很容易造成误判。可添加统计逻辑验证实际模型时间内的到达量:
- 新增整型变量
arrivalCount = 0 - 在Source的「On exit」动作中添加
arrivalCount++; - 新增周期为1小时的定时事件,事件动作中添加:
traceln("过去1小时到达代理数:" + arrivalCount); arrivalCount = 0;
- 新增整型变量
第四步:验证分布逻辑是否符合预期
- 你当前的写法只会在调用
set_rate时生成一次随机速率并固定,若你希望速率随时间持续按照三角分布波动,需要定期(比如每小时)重新调用该方法更新速率值,否则速率会长期固定在首次生成的随机数上,长期统计才会趋近于平均值。
内容的提问来源于stack exchange,提问作者SevenArmy
相关产品推荐
相关产品推荐

