• 三车道交通流元胞自动机研究(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

  • 相关阅读:
    YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
    载二氢丹参酮Ⅰ白蛋白纳米粒/去甲斑蝥素白蛋白纳米粒/伏立康唑白蛋白纳米粒的制备研究
    C语言二叉树详解
    SVG—初识1
    Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    laravel Modify data is invalid 解决修改数据无效
    【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
    基于C语言实现的自动打乱九宫格并且还原
    如何防止用户重复提交订单?(中)
    俄罗斯方块(升级版)
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/128192611