交通流中的NaSch模型及MATLAB代碼元胞自動機完整_第1頁
交通流中的NaSch模型及MATLAB代碼元胞自動機完整_第2頁
交通流中的NaSch模型及MATLAB代碼元胞自動機完整_第3頁
交通流中的NaSch模型及MATLAB代碼元胞自動機完整_第4頁
交通流中的NaSch模型及MATLAB代碼元胞自動機完整_第5頁
免費預覽已結束,剩余9頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、元胞自動機NaSch模型及其MATLAB代碼作業要求根據前面的介紹,對NaSch模型編程并進行數值模擬:模型參數取值:Lroad=1000, p=0.3, Vmax=5。邊界條件:周期性邊界。數據統計:扔掉前 50000 個時間步,對后 50000 個時間步進行統計,需給出的結果。基本圖(流量-密度關系):需整個密度范圍內的。時空圖(橫坐標為空間,縱坐標為時間,密度和文獻中時空圖保持一致, 畫500 個時間步即可)。指出NaSch模型的創新之處,找出NaSch模型的不足,并給出自己的改進思路。流量計算方法:密度車輛數/路長;流量flux=density × V_。 ave在道路的某處

2、設置虛擬探測計算統計時間T內通過的車輛數N;流量flux=N/T。在計算過程中可都使用無量綱的變量。1、 NaSch 模型的介紹作為對 184號規則的推廣,Nagel和 Schreckberg在 1992年提出了一個模擬車輛交通的元胞自動機模型,即NaSch模型(也有人稱它為NaSch模型) 。時間、空間和車輛速度都被整數離散化。道路被劃分為等距離的離散的格子,即元胞。每個元胞或者是空的,或者被一輛車所占據。車輛的速度可以在(0 Vmax)之間取值。2、 NaSch模型運行規則在時刻t 到時刻 t+1 的過程中按照下面的規則進行更新:( 1)加速:vnmin(v n 1, v max)規則(1

3、)反映了司機傾向于以盡可能大的速度行駛的特點。( 2)減速:vnmin(vn , dn )規則(2)確保車輛不會與前車發生碰撞。( 3)隨機慢化:以隨機概率p 進行慢化,令:v nmin(vn - 1,0)規則(3)引入隨機慢化來體現駕駛員的行為差異,這樣既可以反映隨機加速行為,又可以反映減速過程中的過度反應行為。這一規則也是堵塞自發產生的至關重要因素。( 4)位置更新:v n x nv n , 車輛按照更新后的速度向前運動。其 中 vn , xn分 別 表 示 第 n 輛 車 位 置 和 速 度 ; l( l 1) 為 車 輛 長 度 ;dn xn 1 xn 1 表示 n車和前車n+1 之間

4、空的元胞數;p表示隨機慢化概率;v max 為最大速度。3、 NaSch模型實例根據題目要求,模型參數取值:L=1000, p=0.3, Vmax=5,用matlab 軟件進行編程, 扔掉前 11000 個時間步,統計了之后500 個時間步數據,得到如下基本圖和時空圖。3.1 程序簡介初始化:在路段上,隨機分配200 個車輛,且隨機速度為1-5 之間。圖 3.1.1 是程序的運行圖,圖3.1.2中,白色表示有車,黑色是元胞。3.1.1 NaSch模型運行圖圖 3.1.2 NaSch模型3.2 流量密度分析圖 3.2描述了交通流量與密度的關系,從圖中可知,該模型中,當密度為0 0.185 時,流

5、量隨密度的增加而增加;當密度超過0.185 時,流量開始隨密度的增加而下降。3.2 基于 NaSch模型的流量密度圖3.3 NaSch模型時空圖分析圖 3.3.1 和圖 3.3.2 描述了,時間步從11001 開始到 11500 結束,共500 個時間步的空間和時間的關系,從圖中可以模擬出自發產生的堵塞現象。圖 3.3.2 基于NaSch模型的時空圖4 模型評價優點: 該程序基本實現了NaSch模型的基本功能,并且最大速度、元胞數量、車輛數量以及運行間隔時間都可以修改,程序很靈活,并且可以清晰的看出每一次運行過程。缺點:當時間步超過20000步時,內存占用量大。3.3.1 基于NaSch模型的

6、時空圖附件% 主程序:NaSch_3.m程序代碼% 單車道 最大速度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;');%defin

7、e 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',.'str

8、ing','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(

9、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

10、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=nz,v=leadcarupdate(z,v);continue;else%=

11、加速、減速、隨機慢化=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

12、)=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(0.0001);stepnumber = 1+str2num(get(number,'string');set(number,'string',num2str(s

13、tepnumber)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(m

14、emor_v(i,:)/1000;endfigure(2)plot(density,flow,'k.');title('流量密度圖')xlabel('density')ylabel('flow')% /% 函數: searchlastcar.m程序代碼 function location_lastcar=searchlastcar(matrix_cells)%搜索尾車位置for i=1:length(matrix_cells)if matrix_cells(i)=0location_lastcar=i;break;else %如果

15、路上無車,則空元胞數設定為道路長度location_lastcar=length(matrix_cells);endend% 函數: searchfrontcar.m程序代碼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)=0 location_frontcar=j;break

16、;elselocation_frontcar=0;endendend% 函數: roadstart.m 程序代碼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

17、;% 函數: randslow.m 程序代碼function new_v=randslow(v)p=0.3; %慢化概率rand('state',sum(100*clock)*rand(1);%?¨ ?ú ?×p_rand=rand; %產生隨機概率if p_rand<=pv=max(v-1,0);endnew_v=v;% 函數: leadcarrupdate.m 程序代碼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;% 函數:searchleadcar.m程序代碼function location_leadcar=searchleadcar(matrix_cells)i=length(matrix_cells);for j=1:iif matrix_cells(i-j+1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論