如何在AnyLogic中基于Agent类型调整到达间隔率?
解决AnyLogic中基于Agent类型调整到达间隔率的问题
修正Option List枚举值的引用方式
AnyLogic的Option List类型参数,枚举值需要通过参数名来访问,直接写type2会导致识别失败。将表达式修改为:agent.Type == Type.type2 ? triangular(1,2,3) : 50这里的
Type是你创建的Option List参数名,确保和实际参数名一致。确认到达间隔设置的时机
若你在Source模块的「到达间隔时间」中直接使用agent.Type,此时Agent尚未完成初始化,无法正确获取Type值。可以换两种方式处理:- 先在Source的「On exit」动作中给Agent的
Type赋值,同时创建全局函数来计算对应间隔:
然后将Source的到达间隔设置为double getArrivalInterval(Type agentType) { return agentType == Type.type2 ? triangular(1,2,3) : 50; }getArrivalInterval(要生成的类型),比如根据概率分配类型时:getArrivalInterval(uniform(0,1) < 0.3 ? Type.type2 : Type.type7) - 直接在到达间隔中用概率逻辑判断类型,同时在Source的「On exit」中同步赋值Agent的
Type。
- 先在Source的「On exit」动作中给Agent的
检查Agent的Type参数初始化
确保Agent的Type参数在生成时被正确赋值,比如在Agent的「On initialize」动作中设置默认值,或者在Source生成Agent时明确指定。如果Type未赋值,表达式会始终触发else分支返回50。验证表达式语法
确认三元运算符格式正确,triangular(1,2,3)的参数符合要求(第一个值≤第二个≤第三个),你的参数是合法的,这部分无需调整。
内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib
相关产品推荐
相关产品推荐

