式中:——时间间隔;
——仅考虑跟驰约束的加速度;
——分别为当前时刻的速度和车辆距停车线的距离。
(2)计算车辆在上述和状态下的安全减速停车距离:
(4)
式中:——可根据经验取该车辆最大减速度的0.8~0.9倍。
(3)如果,则可暂时不考虑交又口的约束影响,下一时刻仍以跟驰方式行驶;否则,该车将以减速停车。
关键代码为:
double space;
space=g_TwoPointDistance(m_fMidPoint,pPreCar->m_fMidPoint)-m_fLength; //间距
if(space<=m_fMinSafeDis) //停车
{m_fSpeed=0;}
else{m_fSpeed=proadNet->m_CarSpeed1; }
3. 排队消散模型
停车排队车辆在获得流向通行权后将进入排队消散过程,以往的排队消散过程包括加速度模型和低速溜车模型两部分。但是本系统是关于交通波的仿真系统,传统的模型不适用。结合交通波的特性,采用车头间距来建立排除消散模型。
(5)
式中:——相邻车辆间距;
——车辆的速度;
——时间间隔。
当车头间距大于期望距离时,车辆就以初速度起动,判断条件如下:
(6)
式中:——车辆间的期望间距;
——跟随车的速度。
3仿真模型的实现
3.1仿真初始参数的设置
在开始仿真之前,通过菜单或工具栏选项对交叉口的基本参数、车辆的初始参数和交通流的三个状态参数进行设置。例如,可以设置交叉口的位置、仿真系统中三种状态(自由流状态、红灯停车状态、绿灯车辆起动状态)的各参数以及仿真周期时长等,把它们的赋值传到参数相对应的变量中。
3.2动态模型仿真的实现
动态模型的仿真是整个仿真过程的主体,对于它的实现是本系统的关键。本系统经过固定的时间间隔对动态对象进行更新,通过仿真系统不仅可以形象地观察到停车波和起动波的产生过程,还可以记录两种交通波的行驶速度和交叉口中车辆的总持续时间、消散时间、延误车辆总数等。因此,对此模型进行仿真演示就显得尤为重要。
本仿真设置两种仿真模式,一种是自动仿真模式,由用户在程序开始时设置好仿真的所有参数,主要是仿真总时间、红灯和绿灯时间等。仿真开始后,系统按照初始设置状态运行,无需人工参与,当仿真系统中起动波赶上停车波时,整个仿真过程就自动结束;另一种是人工控制仿真模式,由用户在运行过程中控制红灯和绿灯的状态,用户可以需要随时改变信号灯的状态,以便观察停车波和起动波的产生,具有非常好的灵活性,不过由于存在任意性,所以在仿真过程中,可能会起动波赶不上停车波的情况,故人工仿真也存在一定的局限性。
3.2.1信号灯状态的控制方式[7]
在仿真过程中,由于车辆是根据信号灯的颜色状态来决定行驶行为,所以在信号灯类中应定义一个结构体,用来记录信号灯的状态。此结构体包括两个成员变量,即信号灯的颜色和持续时长。在自动仿真模式中,可以按二相位的控制方案来设置,设置好周期长、红灯时长和绿灯时长,通过这个控制方案可以判断信号灯在一个周期内每一时刻的状态,随着时间段的不同信号灯的颜色也会随之变化;在人工控制仿真模式中,由人工调整各信号灯的颜色和持续时长,具有良好的灵活性。
3.2.2车辆状态的确定
确定车辆的状态应根据该车辆上一时刻的位置、所在路口的类型和具体车道来判断。若该车位置是在交叉口前,则应该判断该车转向及所在引道路权,以及与该引道冲突车流的具体位置,并根据车辆应采取的加速度、速度计算下一时刻的位置。本仿真采用固定时间间隔对系统中所有车辆进行更新,根据信号灯的状态来确定车辆的加、减速状态。
3.3程序仿真流程
系统仿真流程[8]如下:
(1)通过程序中的菜单栏或工具栏设定各种参数(包括交叉口参数、交通量数据、仿真的各种时长、产生车辆的初始化参数等),传递到程序中相应的变量中,实现对整个仿真系统中参数的初始化。
(2)在给定的交通需求情况下,按照一定的随机分布使车辆在轨迹的起点一辆一辆地进入路网,然后通过定时器对每一时段内每一辆车在路网上行驶的情况进行更新,包括车辆的位置更新和信号灯的颜色更新等,直至车辆到达其目的地后从路网上消失和仿真时长到仿真结束。
(3)停车波的观察。红灯亮时,当车辆减速到交叉口停车线处时,从停车线处产生一根红色的线条(代表停车波),它的运行速度相当于停车波的速度,这样就可以用一根红色的线条的运行来演示停车波的产生过程,当红色的线碰到后继车时,相应的车辆就停止前进。具体仿真界面见图2。
(4)起动波的观察。当绿灯亮时,当停车线处第一辆车起动时,从停车线处产生一根绿色的线条,代表起动波,它的运行速度相当于起动波的速度,这样就可以用一根绿色的线条的运行来形象演示起动波的产生过程。具体仿真界面见图2。