You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anylogic中如何按固定调度而非超时触发Wait块结束放行

固定120分钟间隔发船逻辑实现方案

你之前两个方案失效的原因很明确:

  • Wait块自带的Enable exit on timeout是单实体维度的独立计时,每个实体进入块之后才开始算自己的等待超时时间,设计目的是限制单个实体的最长等待时长,根本没法对齐全局统一的发班间隔,不适用这个场景。
  • Schedule块本身是时间信号发生器,不属于流程链路里的实体流转块,本来就不能通过拖拽流程线和Wait块建立连接,没写触发逻辑的话Wait块会一直保持阻塞状态,船自然卡住走不了。

具体操作步骤

  1. 保留现有基础流程链路:船舶按指数分布生成到港→进入港口受限区域→进入Wait块,彻底关闭Wait块的Enable exit on timeout选项,Wait块仅作为完成登船流程的船舶暂存区,默认保持出口阻塞。
  2. 配置Schedule块参数:
    • 触发模式选择循环触发,首次触发时间设为模型启动后120分钟(即120 * minute()),重复触发间隔固定为120分钟,选择基于仿真时间计时,不需要绑定真实日历/时钟,完全匹配你不需要对齐具体时日、仅需固定间隔的要求。
  3. 编写触发逻辑打通两个模块:
    选中Schedule块,在组件的「触发时执行(On trigger)」代码编辑区写入以下逻辑:
    // 发班时间到,检查泊位是否有等待离港的船舶
    if (wait.size() > 0) {
        // 释放队列中第一艘完成登船的船舶离港
        wait.free(wait.get(0));
    }
    
    Wait块本身提供了主动释放实体的free()API,不需要做流程线连接,直接通过Schedule的触发动作调用这个API就能控制放船,这也是解决你“连不上两个块”问题的核心。

可选场景适配

  • 若要求到点必须发船,哪怕船舶未完成登船流程也要强制离港:直接保留上述逻辑即可,free()方法调用后会立刻释放实体,不会等待块内的附加流程执行完成。
  • 若要求发班点到港时无待发船舶,后续第一艘到港完成登船的船舶无需等下一个120分钟间隔、直接离港:新增一个布尔型变量pendingDepart,初始值设为false。修改Schedule触发逻辑:当Wait块无船时将pendingDepart设为true;再在Wait块的「实体进入时(On enter)」动作区加判断:如果pendingDepart为true,直接释放当前进入的实体,同时将pendingDepart重置为false。

内容的提问来源于stack exchange,提问作者Lorenzo Martello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:27:22