交通流中的NaSch模型及MATLAB代码元胞自动机完整
交通流中地NaSch模型及MATLAB代码元胞自动机

元胞自动机 NaSch模型及其MATLAB代码作业要求根据前面的介绍,对NaSch模型编程并进行数值模拟:●模型参数取值:Lroad=1000,p=0.3,Vmax=5。
●边界条件:周期性边界。
●数据统计:扔掉前50000个时间步,对后50000个时间步进行统计,需给出的结果。
●基本图(流量-密度关系):需整个密度范围内的。
●时空图(横坐标为空间,纵坐标为时间,密度和文献中时空图保持一致, 画500个时间步即可)。
●指出NaSch模型的创新之处,找出NaSch模型的不足,并给出自己的改进思路。
●流量计算方法:密度=车辆数/路长;流量flux=density×V_ave。
在道路的某处设置虚拟探测计算统计时间T内通过的车辆数N;流量flux=N/T。
●在计算过程中可都使用无量纲的变量。
1、NaSch模型的介绍作为对184号规则的推广,Nagel和Schreckberg在1992年提出了一个模拟车辆交通的元胞自动机模型,即NaSch模型(也有人称它为NaSch模型)。
●时间、空间和车辆速度都被整数离散化。
● 道路被划分为等距离的离散的格子,即元胞。
● 每个元胞或者是空的,或者被一辆车所占据。
● 车辆的速度可以在(0~Vmax )之间取值。
2、NaSch 模型运行规则在时刻t 到时刻t+1的过程中按照下面的规则进行更新:(1)加速:),1min(max v v v n n +→规则(1)反映了司机倾向于以尽可能大的速度行驶的特点。
(2)减速:),min(n n n d v v →规则(2)确保车辆不会与前车发生碰撞。
(3)随机慢化: 以随机概率p 进行慢化,令:)0,1-min(n n v v → 规则(3)引入随机慢化来体现驾驶员的行为差异,这样既可以反映随机加速行为,又可以反映减速过程中的过度反应行为。
这一规则也是堵塞自发产生的至关重要因素。
(4)位置更新:n n n v x v +→ ,车辆按照更新后的速度向前运动。
交通流元胞自动机源代码

用Matlab实现元胞自动机(网上收集、转载)技术2010-03-13 13:04:28 阅读121 评论0 字号:大中小订阅.file:life.m%% 初始化m = 50;X = zeros(m,m);X(25,25) = 1;n = [m 1:m-1];e = [2:m 1];s = [2:m 1];w = [m 1:m-1];% 绘制初始图形[i,j] = find(X);figure(gcf);plothandle = plot(i,j,'.', ...'Color','blue', ...'MarkerSize',12);axis([0 m+1 0 m+1]);%% 演化for k = 1:50%邻居数N = X(n,:) + X(s,:) + X(:,e) + X(:,w) + ...X(n,e) + X(n,w) + X(s,e) + X(s,w);%概率阵RAND = rand(m);%换代X = X | (N.*RAND>0.99);%绘图[i,j] = find(X);set(plothandle,'xdata',i,'ydata',j)drawnowpause(0.2)kendfile 2:function sierpinski(n);% 使用元胞自动机生成sierpinski直角垫片% Example:% sierpinski(256);% %算法见:孙博文,《分形算法与程序设计:用Visual C++实现》if nargin==0;n=256;endX=ones(n);X(1,n-1)=0;H=imshow(X,[]);set(gcf,'doublebuffer','on');k=1;while k<n;X(k+1,1:end-1)=xor(X(k,1:end-1),X(k,2:end));X(k+1,n)=1;set(H,'CData',X);pause(0.1);k=k+1;endfile 3:function CA_sim_cloud;% 使用元胞自动机模拟地球卫星的云图%% reference:% Piazza, E.; Cuccoli, F.;% Cellular Automata Simulation of Clouds in Satellite Images,% Geoscience and Remote Sensing Symposium, 2001. IGARSS '01. % IEEE 2001 International Volume 4, 9-13 July 2001 Page(s):% 1722 - 1724 vol.4 Digital Object Identifier 10.1109/IGARSS.% 2001.977050time=888; % 程序执行步数M=240;N=320;S=round(rand(M,N)*15);p=[1,2,1,6,6,1,2,1];p=sum(tril(meshgrid(p)),2)/20;rand('state',0);SS=S;R=rand(M,N);G=R;B=R;C=cat(3,R,G,B);fig=figure;set(fig,'DoubleBuffer','on');mov = avifile('example2.avi');cc=imshow(C,[]);set(gcf,'Position',[13 355 157 194])x1=(1:3)+round(M/2);y1=(1:3)+round(N/3);x2=(1:3)+round(M/3);y2=(1:3)+round(N/2);x3=(1:3)+round(M/1.5);y3=(1:3)+round(N/2);q=0;qq=15/4;while q<time;SS=zeros(M,N);for k=1:15;r=rand(M,N); % 生成几率rK=zeros(M+2,N+2);T=(S-k>=0); % 粒子数矩阵K(2:end-1,2:end-1)=T;SS=K(1:end-2,1:end-2).*(r<p(1))+...K(1:end-2,2:end-1).*(r<p(2) & r>=p(1))+...K(1:end-2,3:end).*(r<p(3) & r>=p(2))+...K(2:end-1,1:end-2).*(r<p(4) & r>=p(3))+...K(2:end-1,3:end).*(r<p(5) & r>=p(4))+...K(3:end,1:end-2).*(r<p(6) & r>=p(5))+...K(3:end,2:end-1).*(r<p(7) & r>=p(6))+...K(3:end,3:end).*(r>=p(7))+SS;endS=SS; %SS是粒子扩散后的分布S(S>15)=15;S(x1,y1)=15;S(x2,y2)=15;S(x3,y3)=15; % 粒子源赋值G=(S<=7.5);B=(S>qq);R=(S>qq & S<=7.5);C=double(cat(3,R,G,B));set(cc,'CData',C);q=q+1;pause(0.2);title(['q=',num2str(q)]);Nu(q)=sum(S(1:end));F = getframe(gca);mov = addframe(mov,F);endmov = close(mov);figure;plot(Nu)file 4:题目: 六边形的元胞自动机上的单粒子运动摘要: 本程序在六边形的元胞自动机上模拟单粒子运动,算法是基于FHP规则.元胞自动机模拟地球卫星的云图关键词: 六边形, 元胞自动机, FHP规则figure('Position',[15 30 997 658],'NumberTitle','off');set(gcf,'name',' 六边形的元胞自动机上的单粒子运动');% Author's email: zjliu2001@% Reference:% U. Frisch, B. Hasslacher, Y. Pomeau, Lattice-gas% automata for the Navier-Stokes rquation, Phys. Rev.% Lett. 1986,56: 1505-1508set(gcf,'DoubleBuffer','on');axis square;box on;set(gca,'XColor','r','YColor','r');set(gca,'Position',[-0.01 0.11 0.775 0.815]);L=17.5*0.1/sqrt(3);axis([0,L,0,1]); hold on;for p=0:.1:0.9;plot([0,(1-p)/sqrt(3)],[p,1],'k');endfor p=0:0.1/sqrt(3):1;plot([p,min(p+1/sqrt(3),17.5*0.1/sqrt(3))],[0,min(1,(L-p)*sqrt(3))],'k');endfor p=0:0.1/sqrt(3):1;plot([0,p],[p*sqrt(3),0],'k');endfor p=0:9;plot([L-[0.05+p/10]/sqrt(3),L],[1,1-[0.05+p/10]],'k');endfor p=0:0.05:1;plot([0,L],[p,p],'k');endpo=plot(0.8/sqrt(3),0.5,'r.','markersize',24);pz=0.8/sqrt(3)+0.5i; % the position of read pointA=pi/3*2; % the movement direction of read pointgc=gca;a1=axes('Position',[0.7,0.5,0.25,0.3]);axis square;hold on;axis([0,1,0,1]);plot([0.5+0.5i,(1+i)/2+0.4*exp(i*pi/3*2)]);plot([0.5+0.5i,(1+i)/2+0.4*exp(i*pi/3)]);plot([0.3,0.7],[0.5,0.5]);text(0.2,0.8,'Y','fontsize',14);text(0.73,0.8,'X','fontsize',14);text(0.2,0.4,'Z','fontsize',14);axes(gc);dt=0.1/sqrt(3); k=0;ses=['while k;',...'pz=pz+dt*exp(i*A);',...'if imag(pz)>0.99 | imag(pz)<0.01;',...' A=-A;',...'end;',...'if real(pz)>0.99 | real(pz)<0.01;',...' A=-A-pi;',...'end;',...'set(po,''XData'',real(pz),''YData'',imag(pz));',...'pause(0.2);',...'end;'];po1=uicontrol(gcf,'style','push',...'unit','normalized','position',[0.74,0.87,0.1,0.08],...'string','start','fontsize',18,'callback',[]);set(po1,'callback',['k=~k;if k==1;',...'set(po1,''string'',''stop'');',...'else set(po1,''string'',''start'');',...'end;',ses]);file 5:% DLA%%%%%来源:萝卜驿站/ clc;clear;close all;S=ones(40,100);% state matrixS(end,:)=0; % initial sttaeSs=zeros(size(S)+[1,0]); % top line is origin of particle Ss(2:end,:)=S; % showing matrixN=size(S,2);II=imagesc(Ss);axis equal;colormap(gray)set(gcf,'DoubleBuffer','on');while sum(1-S(1,:))<0.5;y=1;x=round(rand*[N-1]+1); % random positionD=0;while D<0.5; % random travelr=rand;if abs(x-1)<0.1;SL=1;elseSL=S(y,x-1);endif abs(x-N)<0.1;SR=1;elseSR=S(y,x+1);endif SL+SR+S(y+1,x)<2.5; % check the neighbor: left, right, under D=1;S(y,x)=0; % stop in the positionendif r<=1/3; % travel randomlyx=x-1;elseif r<=2/3;x=x+1;elsey=y+1;endSs(2:end,:)=S;if x<0.5|x>N+0.5;D=1; % out of the rangeelseSs(y,x)=0; % to show the moving particleendset(II,'CData',Ss); % to showpause(0.1);endendfile 6:function sands(N);% 砂堆规则% 参考书目:% 物理系统的元胞自动机模拟% 作者:(英国)肖帕德等著、祝玉学等译close allfigure;set(gcf,'Doublebuffer','on');D=ones(N);D1=D;[X,Y]=meshgrid(1:N);Z=2*X-Y;p=fix(9.5*N/21);D(Z>p & Z<9+p)=0;D(fix(end/2)+1:end,:)=1;D=min(D,flipud(D).*D1);D=min(D,fliplr(D).*D1);D(end,fix(end/4.13):end-fix(end/4.13))=0; D(end-1,fix(end/4.12):end-fix(end/4.12))=0; D(end-2,fix(end/4.1):end-fix(end/4.1))=0; % imshow(D,[])% 以上是生成装砂的瓶子B=ones(N);B(Z>9+p)=0;B(fix(end/2)+1:end,:)=1;B(:,fix(end/2)+1:end)=1;B=min(B,fliplr(B));B(1:3,:)=1;% figure;set(gcf,'Doublebuffer','on');% imshow(B,[])% mov = avifile('example2900.avi');kk=3800;for k=1:kk;[B,Nu]=duisha(D,B);Bk=min(D,B);imshow(Bk,[])Ha(k)=Nu;% F = getframe(gca);% mov = addframe(mov,F);end% mov = close(mov);figure;plot(Ha)function [Y,Nu]=duisha(D,B);Dq=10*(1-D);Bg=1-B+Dq;% 研究砂子下落S=zeros(size(B));S1=S;S2=S;S(2:end,:)=Bg(2:end,:)-Bg(1:end-1,:);S1(S==-1)=1;S2(1:end-1,:)=S1(2:end,:);Bg(S1==1)=~Bg(S1==1);Bg(S2==1)=~Bg(S2==1);% 研究砂子倾倒clear Sclear S1clear S2S=zeros(size(B));S1=S;S2=S;S(1:end-1,2:end-1)=Bg(1:end-1,2:end-1)+Bg(2:end,2:end-1)-Bg(2:end,1:end-2); S1(S==2)=1;S2(2:end,1:end-2)=S1(1:end-1,2:end-1);Bg(S1==1)=0;Bg(S2==1)=1;clear Sclear S1clear S2S=zeros(size(B));S1=S;S2=S;S(1:end-1,2:end-1)=Bg(1:end-1,2:end-1)+Bg(2:end,2:end-1)-Bg(2:end,3:end); S1(S==2)=1;S2(2:end,3:end)=S1(1:end-1,2:end-1);Bg(S1==1)=0;Bg(S2==1)=1;Y=(1-Bg).*D;Nu=prod(size(find(Y==0)));file 7:function CA_sim_cloud;% 使用元胞自动机模拟地球卫星的云图%% reference:% Piazza, E.; Cuccoli, F.;% Cellular Automata Simulation of Clouds in Satellite Images,% Geoscience and Remote Sensing Symposium, 2001. IGARSS '01.% IEEE 2001 International Volume 4, 9-13 July 2001 Page(s):% 1722 - 1724 vol.4 Digital Object Identifier 10.1109/IGARSS.% 2001.977050time=500; % 程序执行步数M=240;S=zeros(M,N);p=[1,2,1,6,6,1,2,1];p=sum(tril(meshgrid(p)),2)/20;rand('state',0);SS=S;R=1-S;G=S;B=S;C=cat(3,R,G,B);figure;cc=imshow(C,[]);x=round(M/2);y=(1:3)+round(N/3);q=0;while q<time;SS=zeros(M,N);for k=1:15;r=rand(M,N); % 生成几率rK=zeros(M+2,N+2);T=(S-k>=0); % 粒子数矩阵K(2:end-1,2:end-1)=T;SS=K(1:end-2,1:end-2).*(r<p(1))+...K(1:end-2,2:end-1).*(r<p(2) & r>=p(1))+...K(1:end-2,3:end).*(r<p(3) & r>=p(2))+...K(2:end-1,1:end-2).*(r<p(4) & r>=p(3))+...K(2:end-1,3:end).*(r<p(5) & r>=p(4))+...K(3:end,1:end-2).*(r<p(6) & r>=p(5))+...K(3:end,2:end-1).*(r<p(7) & r>=p(6))+...K(3:end,3:end).*(r>=p(7))+SS;endS=SS; %SS是粒子扩散后的分布S(S>15)=15;S(x,y)=15; % 粒子源赋值G=(S<=10);B=(S>5);R=(S>5 & S<=10);C=double(cat(3,R,G,B));set(cc,'CData',C);q=q+1;pause(0.2);title(['q=',num2str(q)]);Nu(q)=sum(S(1:end));endfigure;file 8:生命游戏(Came of Life)是J. H. Conway在20世纪60年代末设计的一种单人玩的计算机游戏(Garclner,M.,1970、1971)。
元胞自动机matlab环境下对交通流问题的仿真数学建模

元胞自动机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,en d)=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: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&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&&Ac c(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&&Ac c(1,g+1)==0 )A(1,g)=0;A(2,g)=1;ad=ad+1;endend%换路后重新设置元胞上的车辆状态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;%计算平均速度、换道频率、车流密度等参数%获得运行中的车辆数目NmatN = A<1;N = sum(sum(matN));%获得运行中的车辆速度之和VE = 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。
元胞自动机的交通流模拟算法

元胞自动机的交通流模拟算法元胞自动机(Cellular Automata,CA)是一种离散的空间模型,由许多相同形态和行为的元胞组成,每个元胞根据一定的规则与周围的元胞进行交互作用。
其中,交通流模拟算法是元胞自动机在交通领域的应用之一。
本文将介绍交通流模拟算法的基本原理、应用场景和发展趋势。
一、交通流模拟算法的基本原理交通流模拟算法基于元胞自动机的思想,将道路划分为一系列的元胞,并对每个元胞进行状态的定义和更新。
在交通流模拟中,每个元胞可以表示一个车辆,其状态包括位置、速度、加速度等。
通过定义元胞之间的交互规则,模拟车辆在道路上的运动和交通流的演化。
交通流模拟算法的核心是规则的制定和更新。
常用的规则包括加速规则、减速规则、保持规则等。
加速规则可以使车辆在没有障碍物的情况下提高速度;减速规则可以使车辆在遇到障碍物或交通拥堵时减速;保持规则可以使车辆保持一定的距离和速度,以保证交通流的稳定性。
二、交通流模拟算法的应用场景交通流模拟算法广泛应用于城市交通规划、交通信号优化、交通拥堵预测等领域。
通过模拟交通流的运动和演化,可以评估不同交通策略对交通流的影响,优化交通信号控制,预测交通拥堵情况,提供科学依据和决策支持。
在城市交通规划中,交通流模拟算法可以模拟城市道路网络的运行情况,评估不同道路规划方案对交通流的影响。
通过模拟交通流的运动和演化,可以评估道路的通行能力、交通拥堵程度和交通状况的稳定性,为城市交通规划提供科学依据。
在交通信号优化中,交通流模拟算法可以模拟交通信号的控制策略,评估不同信号控制方案对交通流的影响。
通过模拟交通流的运动和演化,可以评估信号配时的合理性、交通信号的协调性和交通状况的改善程度,为交通信号优化提供科学依据。
在交通拥堵预测中,交通流模拟算法可以模拟交通拥堵的演化过程,预测交通拥堵的发生时间和地点。
通过模拟交通流的运动和演化,可以评估不同交通拥堵预测模型的准确性和可靠性,为交通拥堵预测提供科学依据。
一种自适应普遍路况的元胞自动机交通流模型

收稿日期:2007-01-26作者简介:吕集尔(1964-),男,讲师,主要从事交通流研究。
*国家自然科学基金项目(10562001,10362001,10347001,70371067)和广西自然科学基金项目(0447030)资助。
广西科学Guang xi Sciences 2007,14(3):257~260一种自适应普遍路况的元胞自动机交通流模型*One Model of Cellular Automaton Traffic Flow Which is Self -adaptive to General Road Conditions吕集尔1,朱留华2,孔令江2,刘慕仁2L Ji-er 1,ZHU Liu-hua 2,KONG Ling-jiang 2,LIU M u-ren2(1.玉林师范学院物理与信息科学系,广西玉林 537000;2.广西师范大学物理与电子工程学院,广西桂林 541004)(1.Departm ent of Phy sics and Inform ation Science,Yulin Norm al College,Yulin,Guangx i,537000,China ;2.College of Physics and Electronic Engineering ,Guangx i Normal University ,Guilin ,Guangx i,541004,China)摘要:在Nag el -Schreckenber g (N aSch )模型的基础上,考虑重力对行驶坡道上车辆的影响,将时间与空间上连续的加速、减速效应离散化,以概率p up 和p dow n 的方式进行一次性速度补偿,提出一个改进的NaSch 模型,并对改进的模型进行计算机数值模拟.模拟结果显示,改进后的模型能准确反映特殊路段对行驶车辆的影响,同时再现了与实际交通相一致的时走时停交通波等复杂的非线性现象,能自动适应普遍路况.关键词:交通流 元胞自动机 重力 交通波 相变分析中图法分类号:O550 文献标识码:A 文章编号:1005-9164(2007)03-0257-04Abstract :The Nag el-Schreckenberg (NaSch)model is improved w ith taking into account the effect of gravity on the vehicles running on a ramp road ,discretizing the effect of acceleration and deceleration w hich are continued in tim e and space ,and m aking an one -off com pensation for the velocities w ith modes of probabilities p up and p down .The com puter numerical simulations has been used to the improved m odel .The simulation shows that the improved model can accurately reflect the influence of special sections of a road on the running vehicles ,meanw hile visualize the complex nonlinear phenomenon of traffic waves of alternate running and stopping as in actual traffics .It is revealed that the improved model can be self-adaptive to general road conditions.Key words :traffic flow ,cellular automaton,gravity,stop-start traffic w ave,phase-transition analy sis 近年来,交通流问题由于其高度的非线性和复杂性以及实际的需求而成为众多学者研究的重要课题之一.现阶段用于交通流研究的数学模型主要有:流体力学模型(hy drodynam ic model)、跟车模型(car follow ing m odel )和元胞自动机模型(cellular automaton m odel)等[1].其中元胞自动机模型已引起了许多学者的关注,因为其模型简单,计算效率比跟车模型高得多,而且同样能抓住交通流中最基本的一些非线性现象. 最初的元胞自动机模型是由著名的数学家及现代数字计算机构架的创始人Von Neum ann 于20世纪60年代提出的,是一种时间和空间都离散的数学模型[2].基于此思想Stephen Wolflram [3]随后设计出诸多具体的初等元胞自动机模型,其中基于184号初等元胞自动机演化规则[4],拓展派生出诸如:NaSch 元胞自动机交通流模型[5],二维网格的BM L 元胞自动机交通流模型等[6].这些模型都非常适合用于研究本质上是一离散系统的交通流,显示出其描述实际交通现象所具有的独特优越性. Wolflram.S[4]于1986年提出了184号元胞自动机的规则表达式为: n i (t +1)=n i -1(t )[1-n i (t )]+n i (t )n i +1(t ),(1)其中n i (t )为布尔变量,格点i 为空时,n i =0;反之,n i= 1.n i-1(t)代表左邻居元胞状态,n i+1(t)代表右邻居元胞状态. Nagel和Schreckenberg[5]于1992年将184号规则模型推广到最大速度大于1及考虑随机慢化影响的更一般情形,提出了著名的Nagel-Schreckenberg (NaSch)模型,基本思想是:车辆随机分布在长度为L的一维离散格点链上,每一格点在任意时刻最多只能被一辆车所占据.以v i(t)、x i(t)和d i(t)分别表示t 时刻第i辆车的速度、位置以及与前方紧邻车辆间的空格点数,其中速度v i(t)∈[0,v max],同时引入延迟刹车概率p表示车辆以一定的概率随机减速以模拟车辆的不确定性延迟行为.NaSch模型仅考虑了车辆加速、减速、随机延迟和位置更新4个步骤就能再现实际交通中经常发生的交通现象,如时走时停交通波等.NaSch模型中车辆的状态演化可用如下规则描述. (1)加速过程: v i(t+1/3)=min{v i(t)+1,v max}; (2)为防止车辆追尾相撞而采取的确定性减速: v i(t+2/3)=min{v i(t+1/3),d i(t)}; (3)以概率p随机延迟过程: v i(t+1)=m ax{v i(t+2/3)-1,0}; (4)位置更新: x i(t+1)=x i(t)+v i(t+1). NaSch模型所进行的数值模拟与真实的交通行为较为吻合,但还不能反映实际交通中所出现的同步流、亚稳态等现象,此后不少学者对这一模型进行了改进,先后提出了优先随机慢化的Noise-First模型[7]和慢启动规则的T2模型[8]等.尽管这些模型在一定程度上能较真实的再现实际道路交通状态,但建模时未考虑实际路况对交通的影响,因此无法进一步再现道路中普遍存在的桥梁、坡道、弯道、安全标志牌等因素对交通流的影响.针对实际道路中普遍存在的桥梁、坡道状况,本文提出一种改进的NaSch模型;分析了坡道的坡角 ,坡高h对交通流的影响.数值模拟结果显示,有坡道的路段甚至在较低的密度下就出现了时走时停交通波,但随着密度的递增,流量保持相对稳定.1 数学模型 如图1所示,在上坡路段,重力在沿坡道的方向的分量对上坡的车子起到了减速的作用,其加速度值为-g sin ;在下坡路段,重力在沿坡道方向的分量对下坡的车子起到加速作用,其加速度值为g sin ,g 为重力加速度,取9.8m/s2, , 分别为上坡、下坡的坡角.依据交通流元胞自动机模型相关理论,每一格点所对应的实际空间长为7.5m.NaSch模型演化规则中的v i(t)+1相当于在1s的时间内速度值增加7.5m/s,即对应加速度值为7.5m/s2.为了使在时间和空间上都连续的上坡附加减速效应,下坡附加加速效应对车辆的影响能在元胞自动机中得到体现,需要将这些效应离散化处理.这些连续效应可改用另一方式实现,即以一定的概率一次性减速或加速,每一次加速度大小取1cell/s2.经折算后,上坡时每一次减速的发生概率为p up=g sin /7.5;下坡时每一次加速的发生概率为p up=g sin /7.5.图1 坡道示意图F ig.1 T he sket ch map of ramp 考虑到NaSch模型的第一步为确定性加速,其影响贯穿于整个演化过程,所以,应将重力的影响置于第一步之中.计算出坡道影响的元胞自动机交通流模型演化规则如下: (1)加速过程: v i(t+1/3)=min{v i(t)+1+sign(x i(t)), v max}; sign(x i(t))1,x i(t)∈[X3,X4],以概率p d own发生,-1,x i(t)∈[X1,X2],以概率p up发生,0,EL SE. (2)为了防止车辆追尾相撞,采取确定性减速过程: v i(t+2/3)=min{v i(t+1/3),d i(t)}. (3)以概率p随机延迟过程: v i(t+1)=max{v i(t+2/3)-1,0}. (4)位置更新: x i(t+1)=x i(t)+v i(t+1).2 数值模拟与分析 数值模拟时采用周期性边界条件,取L=2000组成一维格点链,每一格点对应的实际道路长为7.5m,则整个格点链对应的实际道路长为15km,设道路上车辆总数为N,车辆最大速度取V max=3cells/ s,对应实际车速为81km/h.为消除暂态影响,模拟时每次对最初的20000时步不做统计,对以后的10000时步进行时间平均,这样就得到了每一次运行的平均值.为减小初始化引起的误差,取样本数为30. 车辆的密度: =N L,(2) 车辆的平均速度:v -=1N ∑N i =1v i (t ),(3) 平均车流量:J = v -=1L ∑Ni =1v i (t ).(4)2.1 基本图分析 图2为坡高相同,坡角不同对流量影响情形.模拟时,设上坡路面、下坡路面对称,坡高为5cells,随机慢化概率p =0.25.若整条路段不存在坡道时,改进模型模拟所得到的结果与标准的NaSch 模型完全一致;如果道路存在着一定的坡度,坡角对交通流量的影响较为显著,随着坡角的增加,流量下降,并且提前出现了时走时停交通波等复杂的非线性现象,临界密度也下降.不难理解,这是由于随着坡角的增加,车子受到重力的影响增强,此时上坡道的入口处可视为一“瓶颈”,系统中提前出现时走时停交通波,车辆平均速度急剧下降(见图3),从而引起整个道路通行能力下降. 进一步观察发现:车子在爬坡时,排气管黑烟滚滚且车子前行缓慢,也就是说,坡角的增加不仅影响了道路的通行能力,还会使车辆的废气排放量加剧,严重威胁着人类生存环境.图2 基本图F ig.2 T he fundam ental diag ram h =5cells,- -: = =0°;—□—: = =2°;—△—: = =4°;— —: = =6°;—◇—: = =8°.图3 平均速度随密度变化曲线 Fig.3 T he cur ve of mean velocity versus densit y h =5cells,- -: = =0°;—□—: = =2°;—△—: = =4°;— —: = =6°;—◇—: = =8°.2.2 车流演化状态分析 为了具体的描述坡道车流随车辆密度增加而出现由畅行相向宽幅运动阻塞相的演化过程,我们模拟了车辆运动过程中车辆位置与运动时间的关系.取参数p =0.25,h =5cells, = =8°,模拟的空间位置为700~1200,时间为20000~20400. 图4为 =0.10时的车辆位置与时间的关系.此时车道上车辆密度较低,下坡道下游区域,车流处于畅行相,所有的车辆都以较高的速度行驶;上坡道入口处出现了静止车辆并形成了一些堵塞区域,但是随着爬坡过程的结束,堵塞区域又很快消散了.图4 =0.10时的位置与时间的关系 F ig .4 T he relat ion diag ram of po sition and time ( =0.10) 黑点表示车辆,白色表示空白区域.Black dots indicate vehicles ,and white indicates blank areas . 图5为 =0.20时的车辆位置与时间的关系,此时在上坡道入口处出现了大范围的局部阻塞,且向后传播.随着全局密度的增加,阻塞区域可以进一步向后蔓延.图6为 =0.50时的车辆位置与时间的关系,此时车辆密度较大,行驶车辆明显受到其它车辆的影响,自由运动的程度显著减小,车辆时走时停现象经常发生,坡道效应不存在.图5 =0.2时的位置与时间的关系F ig.5 T he r elation diagr am of position and time( =0.20) 黑点表示车辆,白色表示空白区域.Black dots indicate vehicles,and white indicates blank areas.图6 =0.50时的位置与时间的关系Fig.6 T he relatio n diag ram of position and tim e( =0.50) 黑点表示车辆,白色表示空白区域.Black dots indicate vehicles ,and w hite indicates blank areas .3 序参量分析 对于改进模型,可由序参量来确定交通流从畅行相到阻塞相的相变,同时研究车辆的相关性,以了解车辆之间的关联.序参量定义[9]如下: m ( )=1L ∑L -1i =0n i n i +1. 假如格点被车辆占据,则n r =1,反之n r =0.观察图7发现:当密度 < c 时,序参量一直为零;当密度 > c 时,序参量连续变化.类似于有交通噪声情况下的NaSch 模型序参量的变化,呈现出自由流到交通阻塞的相跨接现象.图7 序参量随密度变化曲线F ig .7 T he cur ve of or der parameter v ersus density h =5cells, = =8°.4 结论 在NaSch 模型的基础上,通过考虑重力对行驶于坡道上的车辆的影响,将时间与空间上连续的加速、减速效应离散化,以概率p up 和p dow n 的方式进行一次性速度补偿.在NaSch 模型的第一步引入加速度补偿项,成功地模拟了车子在坡道上行驶时出现的一些复杂的非线性现象. 模拟结果显示:坡道的长度、坡角的大小对交通流的流量及平均速度有着不可忽视的影响.这对于公路、桥梁以及交叉口立交桥的设计有一定的指导意义:(1)在坡道、桥梁设计方面,尽可能降低道路中斜坡的坡角.如在山区公路设计上,可以通过开挖过山隧道或者在两座山梁之间架设天桥的方法,尽可能降低公路的坡角;(2)在桥梁、城市交叉口立交桥设计方面,可通过增加引桥长度的办法来降低桥梁的上、下坡的坡角,以使道路的通行能力得到最大限度的发挥,有效减少机动车废气的排放而造成的对城市环境的污染,取得经济效益与社会效益的双赢.参考文献:[1] 刘慕仁,薛郁,孔令江.城市交通问题与交通流模型[J ].力学与实践,2005,27(1):1-6.[2] V O N N EU M A NN J.T he general and log ical theory ofautomata [M ]//T aub AA ,V ON N EU M A NN.Collected W or ks .U r bana :U niversity of I llinois ,1963:288-298.[3] N EU M A N N J V ON.T he g eneral and lo gical theor y ofautomata [M ]//T OU B A A,N EU M A NN J V ON.Collected Wor ks .U rbana :U niversity of Illinois ,1963:288-298.[4] W OL FRA M S.T heory and application o f cellularautomata[M ].Sigapore:W ord Scientific,1986.[5] N A GEL K ,SCHRECK ENBERG M .A cellularautomaton model for freeway t raffic [J ].J P hys I Fr ance ,1992,2:2221-2229.[6] BIHAM O,M I DDL ET ON A A ,L EVI NE D A.Self-or ganization and a dynamical tr ansitio n in tr affic flow models[J].P hys Rev A ,1992,46:6124-6127.[7] XU E Y U ,D ON G L IY U N ,L I L EI,et al.Effects ofchang ing or ders in the updat e r ules on tr affic flow [J ].P hy s R ev E ,2005,71:1-6.[8] T A K A YA SU M.Fr actals 1,1993,860:1-6.[9] EISEN BL A T T ER B,SA N T EN L ,SCHA DSCHNE-IDER A .Jamming transition in a cellular automat on model for tr affic flow [J ].Phys Rev E ,1998,57:1309-1314.(责任编辑:邓大玉) 。
基于元胞自动机的自动驾驶交通流仿真研究

基于元胞自动机的自动驾驶交通流仿真研究
基于元胞自动机的自动驾驶交通流仿真研究
邱小平1,2,3,马丽娜1*
【摘要】将Arnab Bose自动驾驶模型与经典的NaSch模型相结合,提出一个适用于自动驾驶的单车道元胞自动机交通流模型。
利用MATLAB语言对自动驾驶车辆运行情况进行仿真分析,发现模拟结果较好地呈现了自动驾驶环境下的交通流特征。
另外,还发现在自动驾驶中设置不同的车头时距对道路通行能力以及拥堵会产生很大的影响,车头时距为0.5 s时的通行能力约是车头时距为3 s的通行能力的4倍,当车头时距从4 s减小为1 s时交通拥堵可降低约95%,可以作为一种缓解拥堵的策略。
【期刊名称】西华大学学报(自然科学版)
【年(卷),期】2017(036)002
【总页数】5
【关键词】元胞自动机;自动驾驶模型;车头间距;车头时距;目标间距
·新能源汽车与低碳动输·
近年来,伴随计算机、信息、制造等先进高新技术和自动驾驶车辆技术的不断发展,以及智能技术在车辆和基础设施中的运用,使得交通系统变得更加高速、高效,自动驾驶汽车更是成为了当今最受关注的前沿科技之一,未来的道路交通系统很有可能因此而焕然一新。
在不久的将来,自动驾驶车辆将会成为主流,对于自动驾驶车辆交通流的相关研究,对缓解交通拥堵、提高道路利用率以及道路安全性都具有重要的意义。
元胞自动机模型是一种应用较为广泛的数学模型[2-6]。
由于元胞自动机本身具备的特征,在交通领域得到快速发展,成为20世纪末和21世纪初交通领域的。
基于元胞自动机的城市交通流模拟与仿真研究

基于元胞自动机的城市交通流模拟与仿真研究近年来,随着城市化进程的不断加快,城市交通问题日益凸显。
为了解决城市交通流量高峰时的拥堵问题,提高交通效率,研究人员们开始使用元胞自动机模型来进行交通流模拟与仿真研究。
一、元胞自动机模型简介元胞自动机是一种复杂系统建模与仿真的重要工具。
它由一系列格点(元胞)组成的二维网格构成,每个元胞代表一个交通参与者,可以是车辆、行人等。
每个元胞都有一定的状态和行为规则,如按照红绿灯信号进行行驶或停止等。
二、城市交通流模拟城市交通流模拟主要包括流量模拟和行为模拟两方面。
流量模拟通过统计每个时刻通过某一点的交通流量,来研究交通流量的分布和变化规律。
而行为模拟则是通过调整元胞的行为规则,控制交通参与者的行为,以实现交通流的优化与控制。
在城市交通流模拟过程中,研究人员可以根据真实的路网和交通组成,将其构建为元胞自动机模型,然后通过调整元胞的状态转换规则,模拟出不同时间段内的交通流量分布、拥堵现象等。
这样可以帮助决策者更好地了解和分析城市交通问题,从而制定更科学合理的交通规划方案。
三、元胞自动机在城市交通流仿真中的应用元胞自动机模型在城市交通流仿真中有着广泛的应用。
通过模拟交通流的运行情况,可以评估不同交通组织方式的效果,如交叉口信号灯、交通流量管制等。
此外,还可以通过模拟不同交通流量分布情况下的交通拥堵现象,探索拥堵产生的原因和解决方法。
另外,元胞自动机模型还可以用于研究特定道路网络中的交通流特性。
例如,可以通过模拟不同区域的交通流量分布,并分析路段的通行能力,以找出导致交通瓶颈的关键路段,并采用合适的调控措施来改善交通流动性。
四、元胞自动机模型的优势和挑战元胞自动机模型在城市交通流模拟研究中具有以下优势:首先,可以模拟大量交通参与者的行为,从而更真实地反映交通流的特征。
其次,可以通过调整元胞的行为规则,实现交通流的优化与控制。
再次,模型参数可调性强,模型灵活性高,适用于不同道路网络和交通组织方式的研究。
交通流理论-元胞自动机模型

主讲人: 李新刚 办公地点:8710(51684936) Email: lixingang@
元胞自动机交通流模型
• 主要内容
1 绪论 2 元胞自动机的定义和构成 3 184号规则 4 NS模型简介 5 BML模型简介 6 双车道模型简介
1 绪论
Stephen Wolfram. A New Kind of Science. Wolfram Media, 2002.
2 元胞自动机的定义和构成
B. 元胞空间边界条件
理论上,元胞空间是无限的;实际应用中无法达到 这一理想条件。常用的边界条件如下:
• • • •
周期型 定值型 绝热型 反射型
2 元胞自动机的定义和构成
B. 元胞空间边界条件
•
周期型边界条件(periodic boundary)
定义:周期型是指相对边界连接起来的元胞空间
2 元胞自动机的定义和构成
元胞自动机的定义:
元胞自动机(Cellular Automata,简称CA)实质 上是定义在一个由具有离散、有限状态的元胞组 成的元胞空间上,并按照一定的局部规则,在离 散的时间维度上演化的动力学系统。
2 元胞自动机的定义和构成
元胞自动机的构成:
元胞自动机最基本的组成:元胞、元胞空间、邻居及规 则四部分。另外,还应包含状态和时间。 可以视为由一个元胞空间和定义于该空间的变换 函数所组成。
1 绪论
元胞自动机应用
交通科学领域:1986年,M. Cremer和J. Ludwig初次将元 胞自动机运用到车辆交通的研究中。随后,元胞自动机在车 辆 交通中的应用主要沿着两条主线展开:对城市道路交通流 的研究,以Nagel-Schreckenberg模型为代表;对城市交通网 络 的研究,以BML模型为代表。另外,80年代以来,计算机 水平日新月异的发展为元胞自动机的 应用提供了强有力的支 持。因此,在进入上个世纪90年代后,元胞自动机在交通流 理论研究领域中得到了广泛的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
元胞自动机NaSch模型及其MATLAB代码作业要求根据前面的介绍,对NaSch模型编程并进行数值模拟:●模型参数取值:Lroad=1000,p=,Vmax=5。
●边界条件:周期性边界。
●数据统计:扔掉前50000个时间步,对后50000个时间步进行统计,需给出的结果。
●基本图(流量-密度关系):需整个密度范围内的。
●时空图(横坐标为空间,纵坐标为时间,密度和文献中时空图保持一致, 画500个时间步即可)。
●指出NaSch模型的创新之处,找出NaSch模型的不足,并给出自己的改进思路。
●? 流量计算方法:密度=车辆数/路长;流量flux=density×V_ave。
在道路的某处设置虚拟探测计算统计时间T内通过的车辆数N;流量flux=N/T。
●? 在计算过程中可都使用无量纲的变量。
1、NaSch模型的介绍作为对184号规则的推广,Nagel和Schreckberg在1992年提出了一个模拟车辆交通的元胞自动机模型,即NaSch模型(也有人称它为NaSch模型)。
●时间、空间和车辆速度都被整数离散化。
● 道路被划分为等距离的离散的格子,即元胞。
● 每个元胞或者是空的,或者被一辆车所占据。
● 车辆的速度可以在(0~Vmax )之间取值。
2、NaSch 模型运行规则在时刻t 到时刻t+1的过程中按照下面的规则进行更新:(1)加速:),1min(max v v v n n +→规则(1)反映了司机倾向于以尽可能大的速度行驶的特点。
(2)减速:),min(n n n d v v →规则(2)确保车辆不会与前车发生碰撞。
(3)随机慢化: 以随机概率p 进行慢化,令:)0,1-min(n n v v → 规则(3)引入随机慢化来体现驾驶员的行为差异,这样既可以反映随机加速行为,又可以反映减速过程中的过度反应行为。
这一规则也是堵塞自发产生的至关重要因素。
(4)位置更新:n n n v x v +→ ,车辆按照更新后的速度向前运动。
其中n v ,n x 分别表示第n 辆车位置和速度;l (l ≥1)为车辆长度;11--=+n n n x x d 表示n 车和前车n+1之间空的元胞数;p 表示随机慢化概率;max v 为最大速度。
3、NaSch 模型实例根据题目要求,模型参数取值:L=1000,p=,Vmax=5,用matlab 软件进行编程,扔掉前11000个时间步,统计了之后500个时间步数据,得到如下基本图和时空图。
程序简介初始化:在路段上,随机分配200个车辆,且随机速度为1-5之间。
图是程序的运行图,图中,白色表示有车,黑色是元胞。
图NaSch模型运行图图NaSch模型流量密度分析图描述了交通流量与密度的关系,从图中可知,该模型中,当密度为0——时,流量随密度的增加而增加;当密度超过时,流量开始随密度的增加而下降。
图基于NaSch模型的流量密度图NaSch模型时空图分析图和图描述了,时间步从11001开始到11500结束,共500个时间步的空间和时间的关系,从图中可以模拟出自发产生的堵塞现象。
图基于NaSch模型的时空图图基于NaSch模型的时空图4 模型评价优点:该程序基本实现了NaSch模型的基本功能,并且最大速度、元胞数量、车辆数量以及运行间隔时间都可以修改,程序很灵活,并且可以清晰的看出每一次运行过程。
缺点:当时间步超过20000步时,内存占用量大。
附件% 主程序:程序代码% 单车道最大速度3个元胞开口边界条件加速减速随机慢化clfclear all%build the GUI%define the plot buttonplotbutton=uicontrol('style','pushbutton',...'string','Run', ...'fontsize',12, ...'position',[100,400,50,20], ...'callback', 'run=1;');%define the stop buttonerasebutton=uicontrol('style','pushbutton',...'string','Stop', ...'fontsize',12, ...'position',[100,500,50,20], ...'callback','freeze=1;');%define the Quit buttonquitbutton=uicontrol('style','pushbutton',...'string','Quit', ...'fontsize',12, ...'position',[100,600,50,20], ...'callback','stop=1;close;');number = uicontrol('style','text', ...'string','1', ...'fontsize',12, ...'position',[20,400,50,20]);%CA setupn=1000; %数据初始化z=zeros(1,n); %元胞个数z=roadstart(z,200); %道路状态初始化,路段上随机分布200辆cells=z;vmax=5; %最大速度v=speedstart(cells,vmax); %速度初始化x=1; %记录速度和车辆位置memor_cells=zeros(3600,n);memor_v=zeros(3600,n);imh=imshow(cells); %初始化图像白色有车,黑色空元胞set(imh, 'erasemode', 'none')axis equalaxis tightstop=0; %wait for a quit button pushrun=0; %wait for a drawfreeze=0; %wait for a freeze(冻结)while (stop==0 & x<11502)if(run==1)%边界条件处理,搜素首末车,控制进出,使用开口条件a=searchleadcar(cells);b=searchlastcar(cells);[cells,v]=border_control(cells,a,b,v,vmax);i=searchleadcar(cells); %搜索首车位置for j=1:iif i-j+1==n[z,v]=leadcarupdate(z,v);continue;else%======================================加速、减速、随机慢化if cells(i-j+1)==0; %判断当前位置是否非空continue;else v(i-j+1)=min(v(i-j+1)+1,vmax); %加速%=================================减速k=searchfrontcar((i-j+1),cells); %搜素前方首个非空元胞位置if k==0; %确定于前车之间的元胞数d=n-(i-j+1);else d=k-(i-j+1)-1;endv(i-j+1)=min(v(i-j+1),d);%==============================%减速%随机慢化v(i-j+1)=randslow(v(i-j+1));new_v=v(i-j+1);%======================================加速、减速、随机慢化%更新车辆位置z(i-j+1)=0;z(i-j+1+new_v)=1;%更新速度v(i-j+1)=0;v(i-j+1+new_v)=new_v;endendendcells=z;memor_cells(x,:)=cells; %记录速度和车辆位置memor_v(x,:)=v;x=x+1;set(imh,'cdata',cells) %更新图像%update the step number diaplaypause;stepnumber = 1+str2num(get(number,'string'));set(number,'string',num2str(stepnumber))endif (freeze==1)run = 0;freeze = 0;enddrawnowendfigure(1)for l=11001:1:11500for k=1:1:1000if memor_cells(l,k)>0plot(k,l,'k.');hold on;endendendxlabel('空间位置')ylabel('时间(s)')title('时空图')for i=1:1:500density(i)=sum(memor_cells(i,:)>0)/1000;flow(i)=sum(memor_v(i,:))/1000;endfigure(2)plot(density,flow,'k.');title('流量密度图')xlabel('density')ylabel('flow')%% /////////////////////////////////////////////////////////////////////// %%% 函数:程序代码function [location_lastcar]=searchlastcar(matrix_cells)%搜索尾车位置for i=1:length(matrix_cells)if matrix_cells(i)~=0location_lastcar=i;break;else %如果路上无车,则空元胞数设定为道路长度location_lastcar=length(matrix_cells);endend% 函数:程序代码function [location_frontcar]=searchfrontcar(current_location,matrix_cells)i=length(matrix_cells);if current_location==ilocation_frontcar=0;elsefor j=current_location+1:iif matrix_cells(j)~=0location_frontcar=j;break;elselocation_frontcar=0;endendend% 函数:程序代码function [matrix_cells_start]=roadstart(matrix_cells,n)%道路上的车辆初始化状态,元胞矩阵随机为0或1,matrix_cells初始矩阵,n初始车辆数k=length(matrix_cells);z=round(k*rand(1,n));for i=1:nj=z(i);if j==0matrix_cells(j)=0;elsematrix_cells(j)=1;endendmatrix_cells_start=matrix_cells;% 函数:程序代码function [new_v]=randslow(v)p=; %慢化概率rand('state',sum(100*clock)*rand(1));%¨ú×p_rand=rand; %产生随机概率if p_rand<=pv=max(v-1,0);endnew_v=v;% 函数:程序代码function [new_matrix_cells,new_=leadcarupdate(matrix_cells,v) %第一辆车更新规则n=length(matrix_cells);if v(n)~=0matrix_cells(n)=0;v(n)=0;endnew_matrix_cells=matrix_cells;new_v=v;% 函数:程序代码function [location_leadcar]=searchleadcar(matrix_cells)i=length(matrix_cells);for j=1:iif matrix_cells(i-j+1)~=0location_leadcar=i-j+1;break;elselocation_leadcar=0;endend% 函数:程序代码function [v_matixcells]=speedstart(matrix_cells,vmax)%道路初始状态车辆速度初始化v_matixcells=zeros(1,length(matrix_cells));for i=1:length(matrix_cells)if matrix_cells(i)~=0v_matixcells(i)=round(vmax*rand(1));endend。