📄 traffic2.m
字号:
function traffic2(n,t)
% This is a program for "a quasi-automaton approach to
% traffic2 modeling " Example: traffic2(100,8,6);
% n是进站前的公路的格数
% t是tollbooth的数量参数
if nargin==0;n=60;t=7;m=20; end
B=round(m*rand(9,n+2)); B=[B ones(9,20)]; B(B~=0)=1; %初始状态的设定
B([1,3,5,7,9],:)=1.2;B(:,end-19:end-15)=0.5;H=imshow(B,[]);
set(gcf,'position',[241 132 560 420],'doublebuffer','on')
xlabel('Please press "space" key and stop this program!',...
'fontsize',12,'color','r');
k=1;aa=0;a=0;pause
while k;
s=get(gcf,'currentkey'); %开关语句
if strcmp(s,'space'); clc;k=0; end %开关语句
for dt=0:240*3; %以24×30次循环作为一天时间的模拟
if (0<=dt&dt<50*3)|(220*3<=dt&dt<=240*3); m=20; %离散一天的时间
elseif (50*3<=dt&dt<70*3)|(180*3<=dt&dt<220*3);m=15;
elseif (70*3<=dt&dt<90*3);m=4;
elseif (150*3<=dt&dt<180*3);m=5;
elseif (90*3<=dt&dt<110*3)|(140*3<=dt&dt<150*3);m=13;
else(110*3<=dt&dt<140*3);m=16;
end
if aa>0&rem(a,round(40/t)-3)==0 %tollbooth模型,隔round(40/t)-3次处理一辆车
g=ceil(rand(1)*4);gg=ones(4,1);gg(g)=0;
B([2,4,6,8],end-15)=gg;
aa=aa-1;
else
B([2,4,6,8],end-15)=1;
end
a=a+1;
A=B([2,4,6,8],1:end-1);C=A(:,2:end);
C(A(:,2:end)==0&A(:,1:end-1)==0)=0; %规则一 (p132)
C(A(:,2:end)==1&A(:,1:end-1)==0)=0; %规则二
C(A(:,2:end)==0&A(:,1:end-1)==1)=1; %规则三
C=[round(m*rand(4,1)) C];C(C~=0)=1; %车辆随机发生器
B([2,4,6,8],1:end-1)=C;
Cend=C(:,end-18);sl=4-sum(Cend,1);aa=sl+aa; %滞留车辆计数器(aa>4时为拥塞)
h1=uicontrol('style','text', 'TooltipString','StaticText','string',aa);
h2=title(['T = ',num2str(floor(dt/30))]); %显示模拟一天中的所在时间
B(:,end-18:end-16)=0.5;set(H,'CData',B);pause(0.1);
end
figure(gcf);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -