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

Anylogic如何关联Wait块与船舶离港调度表实现提前2分钟停检

船舶客运仿真Wait块与离港调度关联实现方案

核心是在原有放行判断规则基础上,增加离港前2分钟的截流校验,同时补全放行逻辑的触发时机,避免仅靠Wait块进入动作触发导致的漏放、晚放问题。

前置配置:添加截流状态标记

在流程所在的顶层Agent(通常是Main)中新增布尔型自定义变量:

  • 变量名:isBoardingClosed
  • 默认值:false
  • 用途:标记当前航次是否已停止向码头放行乘客

第一步:配置离港调度表schDepartureBoat1的关联动作

调度表按每2小时生成离港时点,给每个离港时点绑定两个偏移触发动作:

  1. 离港时点前2小时(即船舶完成靠泊、正式开放登船的时点):
    将isBoardingClosed赋值为false,执行一次放行检查
  2. 离港时点前2分钟(即截流停止放行的时点):
    将isBoardingClosed赋值为true,此时不再触发Wait块释放,停止所有往码头的乘客放行

如果使用的仿真工具不支持调度表直接配置偏移时间动作,可以在调度表的触发事件中,先获取当前航次的计划离港时间,通过两个延时事件分别对应登船开始、截流两个时点执行上述动作,效果一致。

第二步:抽离并补全放行判断逻辑

不要仅在waitForBoat1的On enter动作中写判断——如果乘客先进入Wait块等待,后续船舶才靠泊,没有触发动作的话Wait块内的乘客会被持续卡住。
将放行判断抽为独立自定义函数(命名为checkBoardingRelease即可),函数代码如下:

// 三个条件同时满足方可放行
if(
  cllBoatDock1.size() > 0 // 码头有船舶靠泊
  && !isBoardingClosed // 未到离港前2分钟的截流时点
  && (cllPedOnDock1.size() + cllPedOnBoat1.size()) < 1750 // 总载客数未达额定上限
) {
  waitForBoat1.freeAll();
}

将这个函数挂载到所有会改变放行条件的节点动作上,确保条件满足时能及时触发释放:

  • waitForBoat1的On enter动作:直接调用checkBoardingRelease()
  • 泊位集合cllBoatDock1的On enter动作(即船舶完成靠泊进入泊位时):调用checkBoardingRelease()
  • 登船流程块的On exit动作(即乘客完成登船,船上空余载客位变化时):调用checkBoardingRelease()
  • 调度表中登船开始时点的动作:重置isBoardingClosed为false后,调用checkBoardingRelease()

逻辑验证

配置完成后,放行规则会自动覆盖所有约束要求:

  • 船未靠泊、载客数满额时不会放行
  • 离港前2分钟自动锁死放行通道,哪怕船还在泊位、还有空余载客位,也不会再放乘客从等候区出发,完全匹配步行耗时和安全规程要求
  • 不会出现乘客在Wait块内等待但条件满足时未被释放的卡滞问题

内容的提问来源于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.27 22:39:19