【元胞自动机】基于元胞自动机模拟和改进遗传算法的动态网络分配模型分析matlab仿真
【元胞自动机】基于元胞自动机模拟和改进遗传算法的动态网络分配模型分析matlab仿真
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
智能交通系统的研究主要是为了建立现代化交通运输系统和交通信息管理系统,而其 中的核心领域之一就是动态网络分配模型和算法。 基于经典的 NaSch 模型,本文对模拟交通路网的元胞自动机模型进行了深入研究,提 出了两类新模型,即车道元胞自动机模型和交叉口元胞自动机模型。本文详细阐明了路径 搜索原则,当问题从一维变为二维时,还加入了交叉口模型以及转向模型,得到了一套自 适应的交通网模拟系统,从而根据其中的数据以及当前所研究的各种动态网络分配模型定 义了该系统的双目标函数,并采用 NSGA — II 算法对该双目标规划模型进行了求解。此外, 本文还对一个二维路网进行了数值模拟,并对模拟结果进行了详细分析。 研究结果表明本文提出的模型可以较好的用于动态网络分配。数值实验结果表明,在 对交通网络基于完善规则的模拟的情况下,应用恰当的算法可以对交通网进行一定程度的 优化。
2 部分代码
function s = goforward(s,m,i,T,p,vmax)
%此处的p是转弯概率
if
mod(i,sum(T))<=T(
1
)-
1
flag=
1
;
else
flag=
2
;
end
[a,b]=size(s{
1
});
%右行
right=s{
1
}.*(m==
1
);
[right_1,right_2]=find(right);
[right_2,i_r]=sort(right_2,
’descend’
);
right_1=right_1(i_r);
for
i=
1
:length
(right_1)
v=
0
;
leave=
0
;
incross=
0
;
for
v_i=
1
:vmax
if
right_2(i)+v_i>b
s{
1
}(right_1(i),right_2(i))=
0
;
s{
2
}(right_1(i),right_2(i))=
0
;
%s{
3
}(right_1(i),right_2(i))=
0
;
leave=
1
;
break
;
end
light=~((flag==
2
)&(m(right_1(i),right_2(i)+v_i)==
6
));
if
s{
1
}(right_1(i),right_2(i)+v_i)==
0
&& light
v=v_i;
if
m(right_1(i),right_2(i)+v_i)==
5
...
||
m(right_1(i),right_2(i)+v_i)==
6
incross=
1
;
break
;
end
else
break
;
end
end
if
leave==
0
%没有离开才有这些
v=min(v,s{
2
}(right_1(i),right_2(i))+
1
);
s{
1
}(right_1(i),right_2(i))=
0
;
s{
1
}(right_1(i),right_2(i)+v)=
1
;
if
incross~=
1
s{
2
}(right_1(i),right_2(i)+v)=v;
else
s{
2
}(right_1(i),right_2(i)+v)=max(s{
2
}(right_1(i),right_2(i)),v);
end
s{
2
}(right_1(i),right_2(i))=
0
;
end
end
%左行
left=s{
1
}.*(m==
2
);
[left_1,left_2]=find(left);
[left_2,i_r]=sort(left_2);
left_1=left_1(i_r);
for
i=
1
:length
(left_1)
v=
0
;
leave=
0
;
incross=
0
;
for
v_i=-
1
:-
1
:-vmax
if
left_2(i)+v_i<
1
s{
1
}(left_1(i),left_2(i))=
0
;
s{
2
}(left_1(i),left_2(i))=
0
;
%s{
3
}(left_1(i),left_2(i))=
0
;
leave=
1
;
break
;
end
light=~((flag==
2
)&(m(left_1(i),left_2(i)+v_i)==
6
));
if
s{
1
}(left_1(i),left_2(i)+v_i)==
0
&& light
v=v_i;
if
m(left_1(i),left_2(i)+v_i)==
5
...
||
m(left_1(i),left_2(i)+v_i)==
6
incross=
1
;
break
;
end
else
break
;
end
end
if
leave==
0
%没有离开才有这些
v=max(v,s{
2
}(left_1(i),left_2(i))-
1
);
s{
1
}(left_1(i),left_2(i))=
0
;
s{
1
}(left_1(i),left_2(i)+v)=
1
;
if
incross~=
1
s{
2
}(left_1(i),left_2(i)+v)=v;
else
s{
2
}(left_1(i),left_2(i)+v)=min(s{
2
}(left_1(i),left_2(i)),v);
end
s{
2
}(left_1(i),left_2(i))=
0
;
end
end
%下行
down=s{
1
}.*(m==
3
);
[down_1,down_2]=find(down);
[down_2,i_r]=sort(down_2,
’descend’
);
down_1=down_1(i_r);
for
i=
1
:length
(down_1)
v=
0
;
leave=
0
;
incross=
0
;
for
v_i=
1
:vmax
if
down_1(i)+v_i>a
s{
1
}(down_1(i),down_2(i))=
0
;
%s{
2
}(down_1(i),down_2(i))=
0
;
s{
3
}(down_1(i),down_2(i))=
0
;
leave=
1
;
break
;
end
light=~((flag==
1
)&(m(down_1(i)+v_i,down_2(i))==
6
));
if
s{
1
}(down_1(i)+v_i,down_2(i))==
0
&& light
v=v_i;
if
m(down_1(i)+v_i,down_2(i))==
5
...
||
m(down_1(i)+v_i,down_2(i))==
6
incross=
1
;
break
;
end
else
break
;
end
end
if
leave==
0
%没有离开才有这些
v=min(v,s{
3
}(down_1(i),down_2(i))+
1
);
s{
1
}(down_1(i),down_2(i))=
0
;
s{
1
}(down_1(i)+v,down_2(i))=
1
;
if
incross~=
1
s{
3
}(down_1(i)+v,down_2(i))=v;
else
s{
3
}(down_1(i)+v,down_2(i))=max(s{
3
}(down_1(i),down_2(i)),v);
end
s{
3
}(down_1(i),down_2(i))=
0
;
end
end
%上行
up=s{
1
}.*(m==
4
);
[up_1,up_2]=find(up);
[up_2,i_r]=sort(up_2);
up_1=up_1(i_r);
for
i=
1
:length
(up_1)
v=
0
;
leave=
0
;
incross=
0
;
for
v_i=-
1
:-
1
:-vmax
if
up_1(i)+v_i<
1
s{
1
}(up_1(i),up_2(i))=
0
;
%s{
2
}(up_1(i),up_2(i))=
0
;
s{
3
}(up_1(i),up_2(i))=
0
;
leave=
1
;
break
;
end
light=~((flag==
1
)&(m(up_1(i)+v_i,up_2(i))==
6
));
if
s{
1
}(up_1(i)+v_i,up_2(i))==
0
&& light
v=v_i;
if
m(up_1(i)+v_i,up_2(i))==
5
...
||
m(up_1(i)+v_i,up_2(i))==
6
incross=
1
;
break
;
end
else
break
;
end
end
if
leave==
0
%没有离开才有这些
v=max(v,s{
3
}(up_1(i),up_2(i))-
1
);
s{
1
}(up_1(i),up_2(i))=
0
;
s{
1
}(up_1(i)+v,up_2(i))=
1
;
if
incross~=
1
s{
3
}(up_1(i)+v,up_2(i))=v;
else
s{
3
}(up_1(i)+v,up_2(i))=min(s{
3
}(up_1(i),up_2(i)),v);
end
s{
3
}(up_1(i),up_2(i))=
0
;
end
end
%路口
s=cross(s,m,p);
end
3 仿真结果
4 参考文献
[1]黄妍慧. 基于元胞自动机方法的交叉行人流动态特性模拟和解析研究[D]. 合肥工业大学.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
