【数学建模】基于元胞自动机的四车道交通流

元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元

胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状

态。变化规则适用于每一个元胞并且同时进行。

我们可以理解元胞自动机仿真需要理解三点。一是元胞,在matlab中可以理解为矩阵中的一点或多点组成的方形块,一般我们用矩阵中的一点代表一个元胞。二是变化规则,元胞的变化规则决定元胞下一刻的状态。三是元胞的状态,元胞的状态是自定义的,通常是对立的状态,比如生物的存活状态或死亡状态,红灯或绿灯,该点有障碍物或者没有障碍物等等。

``` clc; clear; close all;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %定义车辆占有?? %人工驾驶公交车(bus)???自动驾驶公交车(zdbus)???人工驾驶小汽车(car)??? %自动驾驶小汽车(zdcar)的生成概率p syms q q=0.3; %车辆占有?? q_storage=zeros(1,3); data1 = []; data2 = []; data3 = []; data4 = []; data5 = []; data6 = []; data7 = []; data8 = []; data9 = []; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %主循?? while q<=1 q=q+0.0025; if q>0.4025 q=q+0.0025; end

q_storage(1,1)=q;%之后可以设置各车道车辆占有率
q_storage(1,2)=q;
q_storage(1,3)=q;
q_storage(1,4)=q;

% qstorage(1,:)=0.6; % [lanechangeposbus,lanechangeposbusqz1,lanechangeposzdbus,lanechangeposzdbusqz1,lanechangecountzdbus,lanechangecountbus,lanechangecountbusqz1,lanechangecountzdbusqz1,alltempv,alltempcars,carsin,carsout] = revisePart2function(qstorage); % [lanechangeposbus,lanechangeposbusqz1,lanechangeposzdbus,lanechangeposzdbusqz1,alltempv,alltempcars,carsin,carsout]=revisePart2function2(qstorage); [lanechangeposzdbusqz3,lanechangeposbusqz3,lanechangeposbus4,lanechangeposzdbus4,lanechangecountbus4,lanechangecountzdbus4,lanechangecountbus3,lanechangecountzdbus3,lanechangecountbusqz3,lanechangecountzdbusqz3,lanechangecountbusqz2,lanechangecountzdbusqz2,lanechangecountbusqz1,lanechangecountzdbusqz1,lanechangecountbus1,lanechangecountzdbus1,lanechangecountbus2,lanechangecountzdbus2,lanechangecountcar,lanechangecountzdcar,lanechangeposbus1,lanechangeposbus2,lanechangeposbus3,lanechangeposbusqz1,lanechangeposbusqz2,lanechangeposzdbus1,lanechangeposzdbus2,lanechangeposzdbus3,lanechangeposzdbusqz1,lanechangeposzdbusqz2,tempv,tempcars,carsin,carsout]=revisePart2function4(qstorage); %%计算相关数据 % a1=carsin;%每次循环对应的车流量 b1 =(lanechangecountbus1+lanechangecountbus2+lanechangecountbus3)/(lanechangecountzdbus1+lanechangecountzdbus2+lanechangecountzdbus3+lanechangecountbus1+lanechangecountbus2+lanechangecountbus3+lanechangecountbusqz1+lanechangecountzdbusqz1+lanechangecountbusqz2+lanechangecountzdbusqz2+lanechangecountbusqz3+lanechangecountzdbusqz3);%人工公交车自由换道率 b2 =(lanechangecountzdbus1+lanechangecountzdbus2+lanechangecountzdbus3)/(lanechangecountzdbus1+lanechangecountzdbus2+lanechangecountzdbus3+lanechangecountbus1+lanechangecountbus2+lanechangecountbus3+lanechangecountbusqz1+lanechangecountzdbusqz1+lanechangecountbusqz2+lanechangecountzdbusqz2+lanechangecountbusqz3+lanechangecountzdbusqz3);%自动公交车自由换道率 b3 =b1+b2;%公交车自由换道率 % b4=sum(cell2mat(lanechangeposbus))/lanechangecountbus;%人工公交换道比例=人工自由换道/总换道次?? % b5=sum(cell2mat(lanechangeposzdbus))/lanechangecountzdbus;%网联公交换道比例=网联自由换道/总换道次?? % b6=(sum(cell2mat(lanechangeposbus))+sum(cell2mat(lanechangeposzdbus)))/(lanechangecountzdbus+lanechangecountzdbus);%总公交换道比??=总自由换道次??/总次?? b7=(sum(cell2mat(lanechangeposbus1))+sum(cell2mat(lanechangeposbus2))+sum(cell2mat(lanechangeposbus3))+sum(cell2mat(lanechangeposbusqz1))+sum(cell2mat(lanechangeposbusqz2))+sum(cell2mat(lanechangeposbusqz3)))/(lanechangecountbus1+lanechangecountbus2+lanechangecountbus3+lanechangecountbusqz1+lanechangecountbusqz2+lanechangecountbusqz3);%人工公交自由换道平均位置 b8=(sum(cell2mat(lanechangeposzdbus1))+sum(cell2mat(lanechangeposzdbus2))+sum(cell2mat(lanechangeposzdbusqz1))+sum(cell2mat(lanechangeposzdbusqz2)))/(lanechangecountzdbus1+lanechangecountzdbus2+lanechangecountzdbusqz1+lanechangecountzdbusqz2);%网联公交自由换道平均位置 b9=(sum(cell2mat(lanechangeposbus1))+sum(cell2mat(lanechangeposbus2))+sum(cell2mat(lanechangeposbus3))+sum(cell2mat(lanechangeposbusqz1))+sum(cell2mat(lanechangeposbusqz2))+sum(cell2mat(lanechangeposbusqz3))+sum(cell2mat(lanechangeposzdbus1))+sum(cell2mat(lanechangeposzdbus2))+sum(cell2mat(lanechangeposzdbus3))+sum(cell2mat(lanechangeposzdbusqz1))+sum(cell2mat(lanechangeposzdbusqz2))+sum(cell2mat(lanechangeposzdbusqz3)))/(lanechangecountbus1+lanechangecountbus2+lanechangecountbus3+lanechangecountbusqz1+lanechangecountbusqz2+lanechangecountbusqz3+lanechangecountzdbus1+lanechangecountzdbus2+lanechangecountzdbus3+lanechangecountzdbusqz1+lanechangecountzdbusqz2+lanechangecountzdbusqz3); % b10=((sum(sum(alltempv)'))*2.5*3.6)/sum((sum(alltempcars==2)'/2)+(sum(alltempcars==4)'/4));%平均速度 % b11=((sum((sum(alltempcars==2)'/2)+(sum(alltempcars==4)'/4)))*1000)/(260*3600*2.5);%车流密度 % b12=((sum((sum(alltempcars==2)'/2)+(sum(alltempcars==4)')/2)))*1000/(260*3600*2.5);%车流密度折算 % b13=carsin;%流量
b14=carsout; b15=lanechangecountbus1; b16=lanechangecountbus2; b17=lanechangecountbus3; b18=lanechangecountbus4; b19=lanechangecountbusqz1; b20=lanechangecountbusqz2; b21=lanechangecountbusqz3; b22=lanechangecountzdbus1; b23=lanechangecountzdbus2; b24=lanechangecountzdbus3; b25=lanechangecountzdbus4; b26=lanechangecountzdbusqz1; b27=lanechangecountzdbusqz2; b28=lanechangecountzdbusqz3; b29=lanechangecountcar; b30=lanechangecount_zdcar;

data1 = [data1; [b1,b2,b3,b7,b8,b9,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30]]; data2 = [data2;[lanechangeposbus1';'#']]; data3 = [data3;[lanechangeposzdbus1';'#']]; data4 = [data4;[lanechangeposbus2';'#']]; data5 = [data5;[lanechangeposzdbus2';'#']]; data6 = [data6;[lanechangeposbus3';'#']]; data7 = [data7;[lanechangeposzdbus3';'#']]; data8 = [data8;[lanechangeposbus4';'#']]; data9 = [data9;[lanechangeposzdbus4';'#']]; end

% xlswrite('s51.xlsx',data1,1); % xlswrite('s51.xlsx',data2,2); % xlswrite('s51.xlsx',data3,3); % xlswrite('s51.xlsx',data4,4); % xlswrite('s51.xlsx',data5,5); % xlswrite('s51.xlsx',data6,6); % xlswrite('s51.xlsx',data7,7); % xlswrite('s51.xlsx',data8,8); % xlswrite('s51.xlsx',data9,9); ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值