VISSIM与停车场建模——如何实现车辆的100%停车

传统的借助PARKINGLOT实现停车的主要问题在于,当所有的停车位饱和后,车辆不会排队等候而是直接离开。本文借助COM实现了VISSIM中车辆100%停车仿真,即车辆在车位饱和情况下会在外部排队,等内部有空闲车位再进入。对于收费站、物流链等场景十分适用。PS:VISSIM停车场仿真并不友好,有那功夫自己手撸几行代码早撸出来了。如无展示等刚需,慎入。
最近一直在忙申校的事情,美其名曰做学术,因而也很久没碰VISSIM了。这几天遇到一个大量级的停车场仿真项目,说要用VISSIM来做,我当时的内心是崩溃的。我一直不愿用VISSIM来做停车场仿真,是因为他的确不太合适。此间有两大难题,在很多年前就困扰着我,第一,车辆顺入倒出的轨迹怎么做;第二,停车率100%怎么实现。第一个问题还好,无非是画的时候麻烦一些,第二个问题就不是画不画的问题了,不写感应接口,基本无望实现。
VISSIM中是有专门的ParkingLot可以设置的,我们来看一下手册怎么说的:
一个停车空间只会在下列条件下才分配给车辆,停车场是开放的(开放时间),车辆的停放时间(根据路径决策分配的)必须少于允许的最大停车时间,并且有足够的停车空间。如果不满足其中任何一个标准,车辆将继续在路径上行驶而不能停车。
放一段视频,演示的是一个4车位停车场的车辆出入过程:
可以看出,如果没地方停车了,车辆不会等候,而是直接溜了溜了。。这如果拿来模拟收费站,那就成不缴费直接溜出去了。而且,很多时候,停车本身就需要排队等候,如果没车位都溜,那我们做车库出入口评价的时候,再大流量也做不出排队长度了。
因而,解决此问题便十分关键了。
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
在VISSIM中设置一个停车场主要有两步,第一步,就是设置停车位,点击右侧的小按钮就可以设置了。设置时务必注意,停车位的长度一定要大于车辆的长度(一个停车位要比车辆长超过0.5米才适合车辆停车)!比如如果你是拿来停公交车的,至少要12.5米的长度才行。
停车位的另外一个有意思的参数就是设置attraction,这个值越大,车辆越喜欢选择这个车位。一般而言,我们会把距离入口近的停车位的attraction设大,这样与就近停车的实际习惯相符合。这也是我即使对parkinglot恨之入骨,也不得不选用他的一个原因——至少他解决了停车场内最优寻车位的问题。
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
还有就是在画LINK的时候,为了保证车辆的顺入倒出流线(具体如何顺入倒出可以看上面的视频),需要做出如下图的骚操作。其实光这个倒车流线如何绘制就够重新写一篇文章了——神乎其神的零距离拐点,玄学气息十足的连接器曲线形状,以及连接器尽头的二次撞墙杀。
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
设置完车位后,下一步就是设置停车路线了(ParkingRoutes),这与传统的StaticRoutes是不一样的。我们在设置ParkingRoutes之前,需要先设置一个StaticRoutes,然后将ParkingRoutes的起终点至于其中。如下图所示:
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
在ParkingRoutes中,我们同样可以设置两个参数,一个是停车比例,一个是停车时间。这个停车比例,我之前一直天真的以为设置为100就是100%停车了,然而发现完全没卵用啊。。。。Anyway,把这些东西设置完后,车子反正是可以跑,可以停的了。效果就和上面的视频一样,和100%停车没啥子关系。
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
又看了几遍手册后,我明白了一个道理,那就是,ParkingRoutes的决策点是这里的罪魁祸首。一辆车行驶到ParkingRoutes的决策起点时,系统会读取停车场内现有的空余车位数,假如没有空余车位,则决策点就不会给该车分配停车路径,车辆也就无法停车,只能溜了。想明白了这个道理,解决方法也就有了,那就是,我在ParkingRoutes的决策起点前再设置一个感应信号,我将所有车拦截在我的感应信号前,并通过感应器来实时判断是否有空闲车位,只有在有空闲车位时,我才将我的信号变绿。这样,我就保证了我放出去的车必然是有空闲车位的,这些车到达ParkingRoutes的决策起点时,系统就必然会给他分配一个停车路径了。
而我在实践时,又引发了新的问题,我如何控制每次放出去的车辆数与我的空闲车位数等同呢?因为我的检测器设置在泊位处,车辆被放进去后,无法立刻到达泊位,因此在车辆驶入到到达泊位的这个时间段内,我的感应系统一直是显示有空余泊位的,而在这个时间段内如果一直放绿灯,进入停车场内的车辆必然会大于实际可用的泊位数了。
为了解决这个问题,我只好又在入口处加了一个限制条件,我把所有进入系统的车辆ID收集起来,通过累计进入的与累计停靠的车辆ID的差集计算出进入但还未停靠的车辆数。进入但未停靠的车也相当于占用了车位数,所以已用车位实际应等于进入但未停靠的车数+现已占用的车位数,只有当这个和值小于总车位数时,我才会将我的感应信号变绿,把车放进来。
思路说完了,上步骤。先设置感应器,入口一个,停车位每个一个。
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
然后设信号灯,信号灯要设置在ParkingRoutes的决策起点之前。即车辆一定要先经过信号灯,再经过ParkingRoutes的决策起点。
VISSIM与停车场建模——如何实现车辆的100%停车-有驾
然后上代码。用PYTHON调用COM接口来实现感应:
最后看一下我们的效果:
可见此时车辆都乖乖的在外面等候,只有在有车位的时候才会进入停车了,完美实现了100%停车的问题。
0

全部评论 (0)

暂无评论