如何在AnyLogic容量>1的Delay块中引用工位ID并提取连续智能体间隔时间
在AnyLogic中处理容量n>1的Delay块的两个关键问题
一、在容量n>1的Delay块中引用工位ID
- 给Delay块添加自定义参数:在Delay块的「Parameters」面板里新增参数,比如命名为
stationId,类型根据你的工位ID类型选择(String/int均可),配置时将对应工位的ID值传入该参数。 - 内部逻辑直接调用:在Delay块的「On enter」「On exit」事件,或者延迟时间的表达式中,直接使用
stationId即可。如果工位是通过资源池分配的,可在智能体进入Delay前,把分配到的资源ID赋值给智能体的自定义属性(比如agent.assignedStationId),之后在Delay块内调用agent.assignedStationId获取工位ID。
二、提取同一工位上连续智能体的时间间隔
- 为每个工位绑定专属时间变量:如果工位是自定义对象,给对象添加
lastAgentExitTime变量(类型double,初始值0);如果是资源池中的资源,给Resource类添加该变量。 - 在Delay块的「On exit」事件中编写计算逻辑:
double currentExitTime = time(); // 计算与上一个智能体的时间间隔 double interval = currentExitTime - lastAgentExitTime; // 可将间隔赋值给智能体属性用于后续分析 agent.previousAgentInterval = interval; // 更新变量为当前时间,供下一个智能体使用 lastAgentExitTime = currentExitTime; - 注意事项:必须保证每个工位的
lastAgentExitTime独立,不能使用全局变量,否则会出现不同工位的数据串用问题。如果Delay块对应多个工位,要确保在智能体进入时绑定到具体工位的变量,比如通过智能体的assignedStation属性关联到对应工位的lastAgentExitTime。
内容的提问来源于stack exchange,提问作者Issouf
相关产品推荐
相关产品推荐

