PedSelectOutPut 路由行人不一致
PedSelectOutPut routing pedestrians inconsistently
我正在使用 Anylogic 行人库模拟地铁中的乘客换乘过程。
当乘客进入车辆时,系统会使用名为 lookForSeat 的函数从他们进入车辆的门附近(在给定距离内)的可用座位中为他们分配一个座位。如果没有更多空闲座位,他们的布尔参数 wantToSit 将设置为 false,他们将保持站立状态。
参数wantToSit是为乘客代理预定义的,默认值为randomtrue(0.8)。但即使我将它设置为默认值 = 1,我也会得到同样的错误。
然后,使用 PedSelectOutput 块将乘客分开:
- 条件 1: if ped.WantToSit = true --> 他们被发送到他们的
分配的座位坐标(默认为PointNode 'seatPoint',null)
- 条件 2: true(因此,ped.WantToSit = false)--> 他们留在
车辆中的站立区域,在这种情况下不需要指定 seatPoint。
现在,它工作得很好,但是当大部分座位已经被占用时,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,我可能希望所有行人现在都将在第二个选项下退出
但他们并没有改变....
如果我将代码添加到输入代码中,那么它会..
我正在使用 Anylogic 行人库模拟地铁中的乘客换乘过程。
当乘客进入车辆时,系统会使用名为 lookForSeat 的函数从他们进入车辆的门附近(在给定距离内)的可用座位中为他们分配一个座位。如果没有更多空闲座位,他们的布尔参数 wantToSit 将设置为 false,他们将保持站立状态。
参数wantToSit是为乘客代理预定义的,默认值为randomtrue(0.8)。但即使我将它设置为默认值 = 1,我也会得到同样的错误。
然后,使用 PedSelectOutput 块将乘客分开:
- 条件 1: if ped.WantToSit = true --> 他们被发送到他们的 分配的座位坐标(默认为PointNode 'seatPoint',null)
- 条件 2: true(因此,ped.WantToSit = false)--> 他们留在 车辆中的站立区域,在这种情况下不需要指定 seatPoint。
现在,它工作得很好,但是当大部分座位已经被占用时,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,我可能希望所有行人现在都将在第二个选项下退出
但他们并没有改变....
如果我将代码添加到输入代码中,那么它会..