AnyLogic中如何根据Passenger代理参数设置差异化延迟时间?
解决AnyLogic中带孩子乘客的延迟时间设置问题
嘿,我来帮你搞定这个延迟模块的设置问题!你的思路完全没问题,只是可能在语法细节或者变量配置上没踩对节奏,我给你两种靠谱的实现方式:
方案一:直接在延迟模块的延迟时间里写表达式(最简洁)
不用折腾进入动作,直接在延迟模块的延迟时间属性框里填入下面的代码就行:
agent.WITH_CHILDREN ? triangular(1,5,15) : triangular(0,1,1.5)
这里的agent就是当前进入延迟模块的Passenger代理,三元运算符? :会自动判断:如果WITH_CHILDREN为true,就用第一个三角分布的时间,否则用第二个。这种方式最直接,不用额外定义变量,省心又高效。
方案二:修正进入动作的代码(如果偏好这种方式)
如果你还是想用进入动作来设置,需要注意两个关键细节:
- 先在主流程里定义一个double类型的变量
delayTime(记得在变量面板里添加,作用域设为当前流程内可用) - 修正进入动作的代码,确保语法正确且能正确获取代理对象:
// 先把当前agent转成Passenger类型,避免类型报错 Passenger passenger = (Passenger)agent; if(passenger.WITH_CHILDREN) { // 可以省略==true,代码更简洁 delayTime = triangular(1,5,15); } else { delayTime = triangular(0,1,1.5); }
然后在延迟模块的延迟时间属性里填入delayTime,这样模块就会使用你在进入动作里设置的时间值。
额外注意事项
- 确保Passenger代理里的
WITH_CHILDREN参数是public的(默认就是public,除非你手动改了访问权限),这样主流程才能正常访问到这个参数值 randomTrue(0.5)是在Passenger代理创建时生成的随机值,每个乘客的这个值是固定的,完全符合你的需求
内容的提问来源于stack exchange,提问作者withayk
相关产品推荐
相关产品推荐

