美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx

上传人:b****6 文档编号:18823243 上传时间:2023-01-01 格式:DOCX 页数:7 大小:16.03KB
下载 相关 举报
美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx_第1页
第1页 / 共7页
美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx_第2页
第2页 / 共7页
美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx_第3页
第3页 / 共7页
美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx_第4页
第4页 / 共7页
美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx

《美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx》由会员分享,可在线阅读,更多相关《美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。

美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx

callback'

'

run=1;

);

%definethestopbuttonerasebutton=uicontrol('

Stop'

[200,400,50,20],...

freeze=1;

%definetheQuitbuttonquitbutton=uicontrol('

Quit'

[300,400,50,20],...

stop=1;

close;

number=uicontrol('

text'

...'

1'

[20,400,50,20]);

%CAsetup

n=100;

%数据初始化

z=zeros(1,n);

%元胞个数

z=roadstart(z,5);

%道路状态初始化,路段上随机分布5辆cells=z;

vmax=3;

%最大速度

v=speedstart(cells,vmax);

%速度初始化x=1;

%记录速度和车辆位置

memor_cells=zeros(3600,n);

memor_v=zeros(3600,n);

imh=imshow(cells);

%初始化图像白色有车,黑色空元胞set(imh,'

erasemode'

none'

axisequal

axistight

stop=0;

%waitforaquitbuttonpushrun=0;

%waitforadraw

freeze=0;

%waitforafreeze(冻结)

while(stop==0)

if(run==1)

%边界条件处理,搜素首末车,控制进出,使用开口条件

a=searchleadcar(cells);

b=searchlastcar(cells);

[cells,v]=border_control(cells,a,b,v,vmax);

i=searchleadcar(cells);

%搜索首车位置

forj=1:

i

ifi-j+1==n

[z,v]=leadcarupdate(z,v);

1

continue;

else

%======================================加速、减速、随机慢化

ifcells(i-j+1)==0;

%判断当前位置是否非空

elsev(i-j+1)=min(v(i-j+1)+1,vmax);

%加速

%=================================减速

k=searchfrontcar((i-j+1),cells);

%搜素前方首个非空元胞位置

ifk==0;

%确定于前车之间的元胞数

d=n-(i-j+1);

elsed=k-(i-j+1)-1;

end

v(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;

cells=z;

memor_cells(x,:

)=cells;

memor_v(x,:

)=v;

x=x+1;

set(imh,'

cdata'

cells)%更新图像

%updatethestepnumberdiaplay

pause(0.2);

stepnumber=1+str2num(get(number,'

));

set(number,'

num2str(stepnumber))

if(freeze==1)

run=0;

freeze=0;

drawnow

///////////////////////////////////////////////////////////////////////

函数:

border_control.m程序代码

Function[new_matrix_cells,new_v]=border_control(matrix_cells,a,b,v,vmax)

%边界条件,开口边界,控制车辆出入

%出口边界,若头车在道路边界,则以一定该路0.9离去

n=length(matrix_cells);

ifa==n

2

rand('

state'

sum(100*clock)*rand

(1));

%?

?

Ò

å

Ë

æ

ú

Ö

×

Ó

p_1=rand

(1);

%产生随机概率

ifp_1<

=1%如果随机概率小于0.9,则车辆离开路段,否则不离口

matrix_cells(n)=0;

v(n)=0;

%入口边界,泊松分布到达,1s内平均到达车辆数为q,t为1sifb>

vmax

t=1;

q=0.25;

x=1;

p=(q*t)^x*exp(-q*t)/prod(x);

%1s内有1辆车到达的概率

p_2=rand

(1);

ifp_2<

=p

m=min(b-vmax,vmax);

matrix_cells(m)=1;

v(m)=m;

new_matrix_cells=matrix_cells;

new_v=v;

leadcarrupdate.m程序代码

function[new_matrix_cells,new_v]=leadcarupdate(matrix_cells,v)

%第一辆车更新规则

ifv(n)~=0

randslow.m程序代码

function[new_v]=randslow(v)

p=0.3;

%慢化概率

p_rand=rand;

ifp_rand<

v=max(v-1,0);

3

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));

fori=1:

n

j=z(i);

ifj==0

matrix_cells(j)=0;

matrix_cells(j)=1;

matrix_cells_start=matrix_cells;

searchfrontcar.m程序代码

function

[location_frontcar]=searchfrontcar(current_location,matrix_cells)i=length(matrix_cells);

ifcurrent_location==i

location_frontcar=0;

forj=current_location+1:

ifmatrix_cells(j)~=0

location_frontcar=j;

break;

searchlastcar.m程序代码

function[location_lastcar]=searchlastcar(matrix_cells)%搜索尾车位置

length(matrix_cells)

ifmatrix_cells(i)~=0

location_lastcar=i;

else%如果路上无车,则空元胞数设定为道路长度

location_lastcar=length(matrix_cells);

4

searchleadcar.m程序代码

function[location_leadcar]=searchleadcar(matrix_cells)i=length(matrix_cells);

ifmatrix_cells(i-j+1)~=0

location_leadcar=i-j+1;

location_leadcar=0;

speadstart.m程序代码

function[v_matixcells]=speedstart(matrix_cells,vmax)%道路初始状态车辆速度初始化

v_matixcells=zeros(1,length(matrix_cells));

fori=1:

v_matixcells(i)=round(vmax*rand

(1));

5

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1