重发一下之前误删的一篇~
目前大多数元胞自动机模型并没有考虑前车速度,大多数同向行驶的模型中车辆都是处在一个完全跟车的状态,无论前车是加速还是减速,后车驾驶者都只是根据自己的车速判断是减速跟驰还是变换车道来寻求寻求更合理的行驶状态。显然这与实际不符。
驾驶者是一个有自主意识的个体,每个个体都存在差异,即在驾驶过程中都有各自的偏好。对于不同驾驶员有不同的驾驶特性,驾驶员的驾驶特性是受其心理,生理,性格影响的及其复杂的驾驶行为偏好。对驾驶行为起到关键作用的有,反应时间,驾驶员对冒险驾驶行为的偏好,这两点都是引起交通事故的重要因素。驾驶员反应时间越长越易与前车发生碰撞;驾驶员对冒险行为的偏好越高,在驾驶时约越易采取偏激行为,引发交通事故。但值得注意的是,部分驾驶员对冒险驾驶行为的偏好是出于自身性格因素,但也有很大部分驾驶员对冒险驾驶行为的偏好是出于自身驾驶技术较高,也就是驾驶技术较高的驾驶员采取偏激驾驶行为的概率大于新手驾驶员,这是符合常识的。
因此,本模型引入驾驶员反应时间,冒险偏好参数,以及考虑前车速度来使元胞自动机在快速路模型的模拟中更加接近现实。其中,近似认为一个驾驶员其反应时间与冒险偏好参数之和为1。也就是说,用驾驶员反应时间来粗略代表其驾驶技术水平,而认为随着其驾驶水平提高,其对冒险驾驶行为的偏好相应增高。而对前车速度的考虑则通过定义驾驶需要空间和驾驶员预估空间来实现。其中,驾驶需要空间是指,车辆此时刻速度+车辆反应时间*车辆此时速度,即,车辆可以保持速度行为而不发生碰撞所需要的空间;驾驶员预估空间是指,车辆与前车距离+驾驶员冒险偏好参数*前车速度,即,驾驶员对未来车前距离的预估。
依据以上思路,对NaSch模型的加速规则进行更改:
当驾驶需要空间<驾驶员预估空间时,车辆进行减速,即,车辆速度在车辆现速度与驾驶员预估空间减去反应时间走过的距离之间取小。相应的,换道决策过程是,当车辆驾驶所需空间<驾驶员预估空间,而旁边车道的驾驶员预估空间大于本车道时,将以概率换道,这里的概率换道也是模拟驾驶员特性,反应其对速度的追求。
综上,考虑了反应时间后,后车对前方行驶空间要求相对NaSch模型变大,而考虑前车速度让后车在加减速判断时放大了车间距这个概念,而反应时间和驾驶员对前方空间的预估都和驾驶员特性有关,这和实际情况是符合的。而驾驶员对冒险偏好参数是初始化的时候就随机生成不变的,代表不同驾驶员的不同性格,这与实际相符。而反应时间和冒险偏好参数之和为1,是方便编程之举,但粗略来说,也是和实际大致符合的。
值得注意的是,本模型中依据采取先换道再跟驰的方法,而换道是有顺序的,跟驰无顺序,也就是说换道是一辆车换道结束之后,下一辆车再换道,这必然造成一辆车的换道行为将影响之后车辆的换道行为;而跟驰则不然,所有车辆执行完加减速及随机慢化后,同时位置更新,即,所有车辆在一个时间步内行进时无影响。车辆换道对其他车辆换道,跟驰产生影响是符合实际情况的,而在一个时间步对应现实时间比较小的情况下,车辆跟驰行为间无影响也是符合现实的。
除此以外,本模型中头车不受前车影响而减速,也不换道,这也是与实际相符的。
引入前车速度使本模型与NaSch有很大的区别,一是一个位置可能会出现两辆车,所以在位置更新时要防止碰撞而多做一个判断;另一个是一个时间步内可以有多辆车驶出车道。
最后,本模型车辆换道时没有考虑目标车道后车影响,但实际换道时肯定受到与后车距离以及后车速度的综合影响,但其影响明显小于前车影响,而为了编程方便并没有考虑。
贴代码哈。
主函数
%% 考虑驾驶员特性和前车速度的单向3车道模型
clc;
clear;
%% 参数设置
lane_length = 100; %车道长度
car_rate = 0.1; %车辆占有率
v_max = 5; %最大车速
time_max = 1000; %仿真步长
time_span = 0.1; %仿真图片输出间隔
p_slowdown = 0.3; %随机慢化概率
p_changelane = 0.8; %满足换道条件换道概率
%% 随机生成初始车辆信息
[space,car,car_number] = initialize(car_rate,lane_length,v_max);
%% 显示初始仿真图
figure('doublebuffer','on');%开启双缓存
space = -1*space;
H = imshow(space,[]);
title('考虑驾驶员特性及前车速度的单向3车道模型','color','red');
space