• 三车道交通流元胞自动机研究(matlab代码实现)


     👨‍🎓个人主页:研学社的博客 

    💥💥💞💞欢迎来到本博客❤️❤️💥💥

    🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

    ⛳️座右铭:行百里者,半于九十。

    📋📋📋本文目录如下:🎁🎁🎁

    目录

    💥1 概述

    📚2 运行结果

    🌈3 Matlab代码实现

    🎉4 参考文献


    💥1 概述

    参考文献:

    在Nagel-Schrekenberg(NS)元胞自动机交通流模型的基础上,提出了一种高速公路三车道元胞自动机交通流模型.该模型中所有的车辆均遵循相同的演化规则,并允许车辆以一定概率换道.根据计算机数值模拟,研究了车辆减速概率、换道概率对车流量、车道利用率影响关系。

    综上所述,元胞自动机是一个动态生成过程
    高速公路可以看成一个网格状视图,车辆上格子颜色产生变动时,就有车辆消失或生成在边界(该元胞已经死亡或者生存).我们需要在车辆不断更新的状态实时显示在图形界面上,模型转换的思想就浅显易懂了,设置两个车流,一个为正在更新的车流密度一个为希望此时高速公路能达到的车流密度,其实我们只需要设置两种车流的密度,因为在更新句柄的过程中,车流的相对密度是相对不变的。
     

    📚2 运行结果

    部分代码:

    function [plaza,v,vmax]=new_cars(plaza,v,probc,probv,VTypes);
        [L,W]=size(plaza);
    %     plaza(2,3)=1;v(2,3)=1;vmax(2,3)=2;
    %     plaza(3,3)=1;v(3,3)=1;vmax(3,3)=1; 
    %     plaza(4,3)=1;v(4,3)=1;vmax(4,3)=1;
    %     plaza(5,3)=1;v(5,3)=1;vmax(5,3)=2;
        vmax=zeros(L,W);
        for lanes=2:W-1;
            for i=1:L;
                if(rand<=probc)%在该位置随机产生一个车子
                    tmp=rand;
                    plaza(i,lanes)=1;
                    for k=1:length(probv)%随机生成一个车子应该有的最大车速
                        if(tmp<=probv(k))
                            vmax(i,lanes)=VTypes(k);%判断属于哪个挡的车速并赋值
                            v(i,lanes)=ceil(rand*vmax(i,lanes));%对当前位置随机赋予一个初速度
                            break;
                        end
                    end
                end
            end
        end
        %处理未达到密度要求的车辆需求
        needn=ceil((W-2)*L*probc);
        number=size(find(vmax~=0),1);
        if(number         while(number~=needn)
                i=ceil(rand*L);
                lanes=floor(rand*(W-2))+2;
                if(plaza(i,lanes)==0)
                    plaza(i,lanes)=1;
                    for k=1:length(probv)%随机生成一个车子应该有的最大车速
                       if(tmp<=probv(k))
                           vmax(i,lanes)=VTypes(k);%判断属于哪个挡的车速并赋值
                           v(i,lanes)=ceil(rand*vmax(i,lanes));%对当前位置随机赋予一个初速度
                           break;
                       end
                    end
                    number=number+1;
                end
            end
        end
        if(number>needn)%如果密度大于预期
            temp=find(plaza==1);
            for k=1:number-needn;
                i=temp(k);
                plaza(i)=0;
                vmax(i)=0;
                v(i)=0;
            end
        end
    end

    🌈3 Matlab代码实现

    🎉4 参考文献

    部分理论来源于网络,如有侵权请联系删除。

    [1]吴大艳,谭惠丽,孔令江,刘慕仁.三车道元胞自动机交通流模型研究[J].系统工程学报,2005(04):393-397. 

    [2]A Two-Lane Cellular Automaton Traffic Flow Model with the Keep-Right Rule edited by Milky Zhang,Image Information Institute in Sichuan Universiyt 2014/2/14

  • 相关阅读:
    Vue实现顶部滚动条
    树的应用 —— 二叉树:二叉树的性质
    代码随想录算法训练营第六十五天 | 岛屿数量 深搜、岛屿数量 广搜、岛屿的最大面积
    2022-08-10 学习日记(30th day)注解
    利用ChatGPT来学习数据库开发知识和解决疑问
    探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器?
    【ansible】自动化运维ansible之playbook剧本编写与运行
    STL源码剖析 | priority_queue优先队列底层模拟实现
    如何设计日志内容
    如何使用腾讯云提供的WordPress应用镜像搭建博客网站系统!
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/128192611