PedSelectOutPut 路由行人不一致

PedSelectOutPut routing pedestrians inconsistently

我正在使用 Anylogic 行人库模拟地铁中的乘客换乘过程。

当乘客进入车辆时,系统会使用名为 lookForSeat 的函数从他们进入车辆的门附近(在给定距离内)的可用座位中为他们分配一个座位。如果没有更多空闲座位,他们的布尔参数 wantToSit 将设置为 false,他们将保持站立状态。

参数wantToSit是为乘客代理预定义的,默认值为randomtrue(0.8)。但即使我将它设置为默认值 = 1,我也会得到同样的错误。

然后,使用 PedSelectOutput 块将乘客分开:

现在,它工作得很好,但是当大部分座位已经被占用时,PedSelectOutput 块突然将 ped.wantToSit 的乘客引导到其座位点,这使得 null 并且出现 NullPointerException 错误。

附件是函数、PedSelectOutput 的设置和命令的日志。

正如所见,尽管 ped.wantToSit = false.

,但 PedSelectOutput 通过出口 1 发送乘客(由于调用“空”坐标而导致错误)

任何想法,出了什么问题?对我来说,这个功能看起来真的很正常——我一整天都在修改它,直到我意识到 PedSelectOutput 块中的某些东西出错了。

提前致谢!

Pic 1: pedSelectOutput block and the command with the log

Pic 2: the function lookForSeat assigning the seats from the seat Collection

这里的问题很微妙,也让我调试了好几个小时。您需要了解的是,只有在代理已经有了要退出的路径时,才会执行退出代码。即 select 输出和后续块已经被评估,并且只有在确定代理可以移动到下一个块时才会调用退出代码。但是代理将继续在执行退出代码之前确定的所选路径上。

看下面的小例子:

我有一个行人,其变量默认为真,select 输出检查此值

如果我 运行 模型所有行人都在顶部选项退出,正如预期的那样

如果我在 On Exit 代码中将变量更改为 false,我可能希望所有行人现在都将在第二个选项下退出

但他们并没有改变....

如果我将代码添加到输入代码中,那么它会..