《元胞自动机matlab环境下对交通流问题的仿真 数学建模》由会员分享,可在线阅读,更多相关《元胞自动机matlab环境下对交通流问题的仿真 数学建模(3页珍藏版)》请在金锄头文库上搜索。
1、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+
2、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 420set(gcf,doublebuffer,on); %241title(cellular-automation to traffic modeling,color,b);%初始化化存储元胞上车辆状态的矩阵S(1:nc,nl) = 0;Q(1:
3、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:ntA=B(2:2:2*nc,:);%确定前 n-2 个车辆的状态S(:,:) = 0;S(A(:,1:end-2)=0%加速的车S(A(:,1:end-2)=0%停车的车S(A(:,1:end-2)=0%减速行驶的车%确定最后 2 两个元胞的状态Q(:,:) = 0;Q(A(:,end-1)=0Q(A(:,end-1)=0Q(A(:,end-1)=1Q(:,end) = 1;%获得所有元胞
4、上车辆的状态Acc = S Q ;%换路规则if(nc1A(2,g)=0;ad=ad+1;elseif( Acc(2,g)=3A(2,g)=1;ad=ad+1;%均速行驶车辆如另一条路有 3 空位则换路elseif( Acc(1,g)=1A(2,g)=0; ad =ad+1;elseif( Acc(2,g)=1A(2,g)=1;ad=ad+1;endend%换路后重新设置元胞上的车辆状态S(:,1:end) = 0;S(A(:,1:end-2)=0%寻找加速的车S(A(:,1:end-2)=0%寻找停车的车S(A(:,1:end-2)=0%寻找减速行驶的车%确定最后 2 两个元胞的状态Q(:,
5、1:end) = 0;Q(A(:,end-1)=0%Q(A(:,end-1)=0Q(A(:,end-1)=1Q(:,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,3) Acc(:,1:end-2)=2) = 0;%计算平均速度、换道频率、车流密度等参数%获得运行中的车辆数目 NmatN = Anl/2)av(c) = V/N;c = c+1;end%在车道入口处随机引入新的车辆A = round(fp/rand(nc,1)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