👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🌈3 Matlab代码实现
🎉4 参考文献
💥1 概述
参考文献:
在Nagel-Schrekenberg(NS)元胞自动机交通流模型的基础上,提出了一种高速公路三车道元胞自动机交通流模型.该模型中所有的车辆均遵循相同的演化规则,并允许车辆以一定概率换道.根据计算机数值模拟,研究了车辆减速概率、换道概率对车流量、车道利用率影响关系。
综上所述,元胞自动机是一个动态生成过程
高速公路可以看成一个网格状视图,车辆上格子颜色产生变动时,就有车辆消失或生成在边界(该元胞已经死亡或者生存).我们需要在车辆不断更新的状态实时显示在图形界面上,模型转换的思想就浅显易懂了,设置两个车流,一个为正在更新的车流密度一个为希望此时高速公路能达到的车流密度,其实我们只需要设置两种车流的密度,因为在更新句柄的过程中,车流的相对密度是相对不变的。
📚2 运行结果
部分代码:
function [plaza,v,vmax]=new_cars(plaza,v,probc,probv,VTypes);
[L,W]=size(plaza);
% plaza(2,3)=1;v(2,3)=1;vmax(2,3)=2;
% plaza(3,3)=1;v(3,3)=1;vmax(3,3)=1;
% plaza(4,3)=1;v(4,3)=1;vmax(4,3)=1;
% plaza(5,3)=1;v(5,3)=1;vmax(5,3)=2;
vmax=zeros(L,W);
for lanes=2:W-1;
for i=1:L;
if(rand<=probc)%在该位置随机产生一个车子
tmp=rand;
plaza(i,lanes)=1;
for k=1:length(probv)%随机生成一个车子应该有的最大车速
if(tmp<=probv(k))
vmax(i,lanes)=VTypes(k);%判断属于哪个挡的车速并赋值
v(i,lanes)=ceil(rand*vmax(i,lanes));%对当前位置随机赋予一个初速度
break;
end
end
end
end
end
%处理未达到密度要求的车辆需求
needn=ceil((W-2)*L*probc);
number=size(find(vmax~=0),1);
if(number<needn)%如果密度小于预期
while(number~=needn)
i=ceil(rand*L);
lanes=floor(rand*(W-2))+2;
if(plaza(i,lanes)==0)
plaza(i,lanes)=1;
for k=1:length(probv)%随机生成一个车子应该有的最大车速
if(tmp<=probv(k))
vmax(i,lanes)=VTypes(k);%判断属于哪个挡的车速并赋值
v(i,lanes)=ceil(rand*vmax(i,lanes));%对当前位置随机赋予一个初速度
break;
end
end
number=number+1;
end
end
end
if(number>needn)%如果密度大于预期
temp=find(plaza==1);
for k=1:number-needn;
i=temp(k);
plaza(i)=0;
vmax(i)=0;
v(i)=0;
end
end
end
🌈3 Matlab代码实现
🎉4 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]吴大艳,谭惠丽,孔令江,刘慕仁.三车道元胞自动机交通流模型研究[J].系统工程学报,2005(04):393-397.
[2]A Two-Lane Cellular Automaton Traffic Flow Model with the Keep-Right Rule edited by Milky Zhang,Image Information Institute in Sichuan Universiyt 2014/2/14