【元胞自动机】基于matlab元胞自动机收费站的交通问题【含Matlab源码 357期】

   日期:2021-02-22     浏览:116    评论:0    
核心提示:一、简介元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。1 对元胞自动机的初步认识元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。2 元胞的变化规则&元胞状态典型的

一、简介

元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。
1 对元胞自动机的初步认识
元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元
胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状
态。变化规则适用于每一个元胞并且同时进行。
2 元胞的变化规则&元胞状态
典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。
3 元胞自动机的应用
元胞自动机已被应用于物理模拟,生物模拟等领域。
4 元胞自动机的matlab编程
结合以上,我们可以理解元胞自动机仿真需要理解三点。一是元胞,在matlab中可以理解为矩阵中的一点或多点组成的方形块,一般我们用矩阵中的一点代表一个元胞。二是变化规则,元胞的变化规则决定元胞下一刻的状态。三是元胞的状态,元胞的状态是自定义的,通常是对立的状态,比如生物的存活状态或死亡状态,红灯或绿灯,该点有障碍物或者没有障碍物等等。

二、源代码

%   iterations      =  迭代次数即计算次数     100
%   B               =  收费站的个数     定义的了是12%   L               =  车道数            6
%   Arrival         =  平均车流量
%   plazalength     =  收费区长度   101  但是这个是什么意思呢
%   Service         =  服务率         0.8
%   dt              =  时间步长   
%   plaza           =  收费区矩阵  
%                              1 = 有车, 0 =为空, -1 = 禁止, -3 = 收费站
%   v               =  速度矩阵  
%   vmax            =  最大速度
%   time            =  时间矩阵
%   t_h             =  时间因素
%   departurescount =  在一次计算中流出的车数
%   departurestime  =  流出的车经过收费区所花费的时间
%   influx          =  进车矢量
%   outflux         =  出车矢量
%   timecost        =  所有车辆花费的时间
%   h               =  句柄
clear;clc;
iterations = 100; % 迭代次数即计算次数
B = 12; % 收费站的个数
L = 6; % 车道数
Arrival=4; % 平均车流量

plazalength = 101; % 收费区长度  
[plaza, v, time] = create_plaza(B, L, plazalength);%子函数1构建收费区矩阵     
h = show_plaza(plaza, NaN, 0.01);%子函数2将收费区矩阵转换为图片(NaN任意值)

Service = 0.8; % 服务率
dt = 0.2; % 时间步长
t_h = 1; % 时间因素
vmax = 5; % 最大速度
influx=[];%不同
outflux=[];%不同
%                1 = 有车, 0 = 为空, -1 = 禁止, -3 = 收费站
%        v = 速度矩阵
%        time = 时间矩阵
%        vmax = 最大速度
Service = 0.8; % 服务率   exp(-Service*dt)
dt = 0.2; %时长
probac = 0.7;% 加速概率
probdc = 1;% 减速的可能性
probrd = 0.3;% 随机减速的可能性
t_h = 1; % 时间因素
[L,W] = size(plaza);% 构建(i,j)位置的距离矩阵
gap = zeros(L,W);
f = find(plaza==1);%找到收费区中有车的位置并记录
for k=f'
    [i,j] = ind2sub([L,W], k);%将矩阵中k位置,用[i,j]表示
    d = plaza(i+1:end, j);%距离
    gap(k) = min( find([d~=0;1]) )-1;%找到k车前方最近(min)的不为零的元胞,测距;find([d~=0;1]查
end
gap(end,:) = 0;%最后一行距离为0 

%% 速度更新规则
% 1 加速:间隔大于速度
k = find((gap(f) > v(f)*t_h) & (v(f) + 1 <= vmax) & (rand(size(f)) <= probac));%gap(f)到前面车的距离
v(f(k)) = v(f(k)) + 1;
% 2 排除碰撞
k = find((v(f)*t_h > gap(f)) & (rand(size(f)) <= probdc));
v(f(k)) = gap(f(k))/t_h;
% 3 随机减速
k = find(rand(size(f)) <= probrd);
v(f(k)) = max(v(f(k)) - 1,0);
% 进出收费站
%% 收费亭
function [plaza, v, time, departurescount, departurestime] = clear_boundary(plaza, v, time)
% clear_boundary  最后一行车的移动
%        plaza = 收费区矩阵
%                1 = 有车,0=为空,-1 = 禁止, -3 = 收费站
%        v = 速度矩阵
%        time = 时间矩阵
departurescount = 0;%出口离去车辆数
departurestime = [];%离去车辆时刻
[a,b] = size(plaza);
booth_row = ceil(L/2);%找到收费区的位置
for i = 2:W-1  
    if (plaza(booth_row,i) ~= 1)%如果该收费站没车
        if (plaza(booth_row-1,i) == 1)%如果收费站之前有车
            v(booth_row - 1 ,i) = 1;%该车速度为1
        end

三、运行结果

四、备注

完整代码或者代写添加QQ1564658423
往期回顾>>>>>>
【元胞自动机】基于matlab元胞自动机之双车道交通流模型含靠右行驶【含Matlab源码 231期】
【元胞自动机】基于matlab元胞自动机之晶体生长【含Matlab源码 232期】
【元胞自动机】基于matlab元胞自动机求解城市小区开放对周边道路通行的影响研究【含Matlab源码 233期】
【元胞自动机】基于matlab元胞自动机之图像处理【含Matlab源码 234期 】
【元胞自动机】基于matlab元胞自动机之森林大火【含Matlab源码 235期】
【元胞自动机】基于matlab元胞自动机模拟HIV传染【含Matlab源码 236期】
【元胞自动机】基于matlab元胞自动机之地铁火灾疏散模型【含Matlab源码 246期】
【元胞自动机】基于matlab 二维元胞自动机规则模拟交通流【含Mtlab源码 355期】
【元胞自动机】基于matlab模拟交通事故道路通行量【含Matlab源码 356期】

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服