美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx
- 文档编号:18823243
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:7
- 大小:16.03KB
美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx
《美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx》由会员分享,可在线阅读,更多相关《美赛A题元胞自动机完整代码做出来了有木有Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 题元胞 自动机 完整 代码 做出 有木有