AnyLogic行人库:跨楼层扶梯重叠节点触发PedGoTo不可达目标错误
AnyLogic行人模型"Unreachable target"故障解决(无需改动布局)
问题场景
使用AnyLogic行人库开发研究用仿真模型时,遇到如下问题:
- PedSource与PedWait设置在同一节点,该节点与跨楼层扶梯块重叠
- 智能体生成后在PedWait等待,触发PedGoTo移动时出现
Unreachable target错误 - 错误仅在启动移动时触发,生成或等待阶段无异常;移开扶梯块则错误消失,但因研究需求必须保留原有布局
错误代码示例
Exception during discrete event execution: root.pedGoTo18.pedGoToTarget: Unreachable target: (1060.00, 441.33) on level 'name: B3' for pedestrian 'id: 289' located at: (1211.05, 438.03) on level 'name: B3'! java.lang.RuntimeException: root.pedGoTo18.pedGoToTarget: Unreachable target: (1060.00, 441.33) on level 'name: B3' for pedestrian 'id: 289' located at: (1211.05, 438.03) on level 'name: B3'! at com.anylogic.engine.Engine.error(Unknown Source) at com.anylogic.engine.Agent.error(Unknown Source) at com.anylogic.engine.Utilities.error(Unknown Source) at com.anylogic.libraries.pedestrian.PedBlock_xjal.error(Unknown Source) at com.anylogic.libraries.pedestrian.PedGoTo_xjal.d(Unknown Source) at com.anylogic.libraries.pedestrian.PedGoTo_xjal.c(Unknown Source)
已尝试操作
- 微调智能体生成位置与目标位置以避开障碍物
- 排查环境中无意设置的障碍物
- 验证错误仅在节点与扶梯重叠的特定场景触发
- 排除部分错误点但问题仍大量存在
- 使用最新版AnyLogic 8.9.4
无需改动布局的解决方案
1. 调整PedWait的释放位置
打开PedWait块的属性面板,找到释放位置(Release Position):
- 将选项从
At wait point改为Near wait point - 设置0.5-1米的偏移距离,让智能体离开重叠区域后再启动移动
2. 手动重置智能体位置
在PedGoTo触发前(比如按钮点击事件或PedWait的On release事件)添加代码,强制将智能体位置偏移到节点的非重叠区域:
pedestrian.setPosition(pedWait1.getPosition().x + 0.3, pedWait1.getPosition().y, pedestrian.getLevel());
3. 修改碰撞优先级
- 打开扶梯块属性面板,找到**碰撞(Collision)**设置,将优先级设为0(调低)
- 找到PedWait所在节点的碰撞设置,将优先级设为10(调高)
- 让路径规划器优先识别节点的可通行状态,避免扶梯重叠区域干扰
4. 调整PedGoTo的路径规划设置
打开PedGoTo块属性面板的**路径规划(Pathfinding)**选项:
- 勾选
忽略局部障碍物(Ignore local obstacles),或缩小局部障碍物检测范围 - 注意:此设置可能影响路径精度,需测试是否符合研究需求
5. 自定义PedGoTo的路径起点
在PedGoTo的Target设置中选择Custom,编写代码指定偏移后的起点:
new Point(pedWait1.getPosition().x + 0.5, pedWait1.getPosition().y, pedestrian.getLevel())
内容的提问来源于stack exchange,提问作者Lemon Beer
相关产品推荐
相关产品推荐

