交通流

来源:互联网 发布:js保存cookie到本地 编辑:程序博客网 时间:2024/04/19 03:30

涵义:交通流理论是运用物理和数学的定律来描述交通特性的一门边缘学科.它的应用能更好地解析交通现象及其本质,使道路发挥最大功效。

作为交通工程学的基础理论,多年来交通流理论广泛应用于交通运输工程的许多研究领域:如交通规划、交通控制道路与交通工程设施设计等方面。
参数:定量描述交通流可用 3个参数:
①交通流量,又称交通量,表示交通流在单位时间内通过道路指定断面的
车辆数量,单位是辆/小时或辆/日;
②交通流速度,简称流速,表示交通流流动的快慢,单位是米/秒或公里/小时;
③交通流密度,表示交通流的疏密程度,即道路单位长度上含有车辆的数量,单位是辆/公里。
3个参数之间的关系是:交通流量为交通流速度和交通流密度的乘积。道路上车辆很少时,驾驶员可选择较高速度,这时交通流速度较大,但因交通流密度小,所以交通流量也比较小。随着路上的车辆增多,交通流密度增大,车辆的行驶速度虽受到前后车辆的约束而有所下降,流速降低,但交通流量还是增加,直到某一种条件下,流速和密度的乘积达到最大值,即交通流量为最大时为止。这时的流速称为最佳速度,密度称为最佳密度。如果路上车辆再增加,密度继续增大,流速继续下降,尽管密度较大,但因流速较小,所以流量反而下降,直到密度为最大值(这时称之为拥堵密度),造成道路阻塞,车辆无法行驶,流速等于零,交通流量也等于零为止(如图所示[交通流量、交通流速度、交通流密度关系图])。

元胞自动机

元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成精态系统的演化。由冯诺依曼在20世纪50年代发明。
其分为
NS模型

该模型用一个一维点阵代表一条单车道,即将所研究的单车道分成n个长度为L的小路段(元胞),点阵中每个位置代表一个元胞,每个位置或空闲或容纳一辆车。元胞长度L为道路阻塞时的平均车头间距;车辆速度的范围为0~Vmax;时间步长可以认为是驾驶员的反应时间,通常取1秒;每个位置有Vmax+1种状态。

变化规则
1.加速规则:如果v(t)<=Vmax,则v(t+1)=min(Vmax,v+1)
2.减速规则:如果v(t)>gap,则v(t+1)=gap
3.随机减速:在概率p下,v(t+1)=max(v(t+1)-1,0)
4.车辆运动:x(t+1)=x(t)+v(t+1)

Gap是本车与前车之间的空格数;x表示车辆的位置

多车道元胞自动机

除了单车道的变化规则,对于多车道还应该有车道变换规则

车道变换规则(假设左车道为快车道,右车道为慢车道)
1.如果Vmax>gapgap_left>=gap,则变换到左车道
2.如果Vmax<gap-vVmax<gap_right-v,则变换到右车道
3.如果v_back<=gap_back(保证后车不会与本车发生碰撞),在满足上述条件下车辆以概率p进行变道,并规定以下限制条件:

     如果v_right>gap_left,则v_right=gap_left(禁止右车道的车辆超过左车道的车辆)

以下是来自https://wenku.baidu.com/view/992d27d1551810a6f524865a.html 的一段matlab代码
function [ v d p ] = multi_driveway( nl,nc,fp,dt,nt )%  在某一特定车流密度下的(车流密度由fp决定)单、双车道仿真模型%  nc:车道数目(1或2),nl:车道长度——输入参数%  v:平均速度,d:换道次数(1000次)p:车流密度——输出参数%  dt:仿真步长时间,nt:仿真步长数目——输入参数%  fp:车道入口处新进入车辆的概率——输入参数%  test:%  nl = 400;fp = 0.5;%  nc = 2;dt=0.01;nt=500;   %构造元胞矩阵   B=ones(2*nc+1,nl+2);   %奇数行为不可行车道   B(1:2:(2*nc+1),:)=1.2;   %初始化仿真元胞状态(1为无车,0为有车)   bb=B(2:2:2*nc,:);bb(bb~=0)=1;B(2:2:2*nc,:)=bb;B(2:2:2*nc,end)=0;   %显示初始交通流图   figure(1);   H=imshow(B,[]);   set(gcf,'position',[241 132 560 420]) ;%241 132 560 420   set(gcf,'doublebuffer','on');  %241   title('cellular-automation to traffic modeling','color','b');   %初始化化存储元胞上车辆状态的矩阵   S(1:nc,nl) = 0;   Q(1:nc,1:2) = 0;   Acc(1:nc,1:(nl+2))=0;   %初始化换道频率、平均速度、车流密度相关变量   ad = 0;   av(1:nt) = 0;   ap(1:nt) = 0;   c = 1;   for n = 1:nt      A=B(2:2:2*nc,:);      %确定前n-2个车辆的状态      S(:,:) = 0;      S(A(:,1:end-2)==0&A(:,2:end-1)==1&A(:,3:end)==1)=2;%加速的车      S(A(:,1:end-2)==0&A(:,2:end-1)==0)=3;%停车的车      S(A(:,1:end-2)==0&A(:,2:end-1)==1&A(:,3:end)==0)=1;%减速行驶的车      %确定最后2两个元胞的状态      Q(:,:) = 0;      Q(A(:,end-1)==0&A(:,end)==0) = 1;      Q(A(:,end-1)==0&A(:,end)==1) = 2;      Q(A(:,end-1)==1&A(:,end)==0) = 2;      Q(:,end) = 1;      %获得所有元胞上车辆的状态      Acc = [ S Q ];      %换路规则      if(nc>1&&n>nl/2)          %遍历每一个元胞          for g = 1:length(Acc(1,:))              %停车状态车辆如另一条路有2空位则换路              if( Acc(1,g)==3&&Acc(2,g)==0&&Acc(2,g+1)==0)                  A(1,g)=1;                  A(2,g)=0;                  ad=ad+1;              elseif( Acc(2,g)==3&&Acc(1,g)==0&&Acc(1,g+1)==0 )                  A(1,g)=0;                  A(2,g)=1;                  ad=ad+1;              %均速行驶车辆如另一条路有3空位则换路              elseif( Acc(1,g)==1&&Acc(2,g)==0&&Acc(2,g+1)==0&&Acc(2,g+1)==0 )                  A(1,g)=1;                  A(2,g)=0;                   ad =ad+1;              elseif( Acc(2,g)==1&&Acc(1,g)==0&&Acc(1,g+1)==0&&Acc(1,g+1)==0 )                  A(1,g)=0;                  A(2,g)=1;                  ad=ad+1;              end          end          %换路后重新设置元胞上的车辆状态          S(:,1:end) = 0;          S(A(:,1:end-2)==0&A(:,2:end-1)==1&A(:,3:end)==1)=2;%寻找加速的车          S(A(:,1:end-2)==0&A(:,2:end-1)==0)=3;%寻找停车的车          S(A(:,1:end-2)==0&A(:,2:end-1)==1&A(:,3:end)==0)=1;%寻找减速行驶的车          %确定最后2两个元胞的状态          Q(:,1:end) = 0;          Q(A(:,end-1)==0&A(:,end)==0) = 1;%          Q(A(:,end-1)==0&A(:,end)==1) = 2;          Q(A(:,end-1)==1&A(:,end)==0) = 2;          Q(:,end) = 1;          %获得所有元胞状态          Acc = [ S Q ];      end      %根据当前状态改变元胞位置      %匀速运行车辆向前走1格      A( Acc(:,1:end)==1 ) = 1;      A( [ zeros(nc,1) Acc(:,1:end-1)]==1 ) = 0;      %高速运行车辆向前走2格      A( Acc(:,1:end)==2) = 1;      A( [ zeros(nc,2) Acc(:,1:end-2)]==2) = 0;      %计算平均速度、换道频率、车流密度等参数      %获得运行中的车辆数目N      matN = A<1;      N = sum(sum(matN));      %获得运行中的车辆速度之和V      E = S((S==1)|(S==2));      V = sum(E);      %计算此时刻的车流密度并保存      ap(n) = N/( nc*(nl+2) );      %计算此时刻的平均速率并保存      if(N~=0&&n>nl/2)          av(c) = V/N;          c = c+1;      end      %在车道入口处随机引入新的车辆      A = [ round(fp*rand(nc,1))&A(1:nc,1) A(:,2:end)];      A(A~=0)=1;      %将新的车辆加入元胞矩阵中      B(2:2:2*nc,:)=A;      %显示交通流图      set(H,'CData',B);      %仿真步长      pause(dt);   end   %仿真结束,计算结果   d = ad;   p = mean(ap);   v = sum(av)/c;end





1 0