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

行人模型中创建重复事件取消pedGoTo块并让智能体重入的方法

问题修正方案

核心错误原因

你直接使用未定义的ped变量,AnyLogic无法识别该变量的来源,必须明确获取当前在goToNearestExit块中的行人实例。

具体修正步骤

1. 配置重复触发事件

添加一个Event块,设置重复类型为Periodically,时间间隔设为5秒,在事件的动作代码中实现以下逻辑。

2. 遍历处理目标行人

通过goToNearestExit.getPeds()获取当前在该块中的所有行人集合,逐个执行取消移动、重新进入的操作:

// 获取所有处于goToNearestExit块中的行人
List<Person> targetPeds = goToNearestExit.getPeds();
// 遍历每个行人处理
for(Person ped : targetPeds) {
    // 取消当前的移动任务
    goToNearestExit.cancelMove(ped);
    // 释放行人并重新进入块,触发getNearestExit()重新计算
    goToNearestExit.release(ped);
    goToNearestExit.take(ped);
}

提示:如果你的行人代理是自定义类型,将代码中的Person替换为你实际的代理类名称。

3. 调整getNearestExit()函数

确保函数接收行人实例作为参数,这样能基于行人当前位置计算最近可用出口:

public TargetLine getNearestExit(Person ped) {
    TargetLine closestExit = null;
    double shortestDistance = Double.MAX_VALUE;
    
    // 遍历所有出口targetLine(替换为你实际的出口集合)
    for(TargetLine exit : exitTargets) {
        // 判断出口是否处于开启状态(根据你的模型逻辑调整判断条件)
        if(exit.isOpen) {
            double currentDistance = ped.getDistanceTo(exit);
            if(currentDistance < shortestDistance) {
                shortestDistance = currentDistance;
                closestExit = exit;
            }
        }
    }
    return closestExit;
}

同时在goToNearestExit块的targetLine属性中,设置为getNearestExit(ped),确保每次行人进入块时传入自身实例。

4. 边界情况处理

  • 该逻辑会自动跳过已离开goToNearestExit块的行人,无需额外判断。
  • cancelMove(ped)会立即终止当前移动路径,确保新计算的出口路径生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:52:39