首页 > 编程语言 >m十字路口多功能控制交通系统,包括基于遗传算法优化的红绿灯时长模糊控制器和基于BP神经网络的车牌识别算法

m十字路口多功能控制交通系统,包括基于遗传算法优化的红绿灯时长模糊控制器和基于BP神经网络的车牌识别算法

时间:2023-04-26 23:32:06浏览次数:40  
标签:基于 相位 红灯 控制器 绿灯 RG BP GA 遗传算法

1.算法仿真效果 matlab2022a仿真结果如下:

1.png2.png3.png4.png5.png6.png7.png

2.算法涉及理论知识概要 单十字路口:

8.jpeg

    其中第一级控制为两个并行模块:绿灯交通强度控制模块与红灯交通强度控制模块。绿灯交通强度控制模块的输入为绿灯相位的排队长度与入口流量,输出绿灯相位的交通强度;红灯相位模块的输入为红灯相位的排队长度,输出为红灯相位的交通强度。

   第二级控制是在第一级控制基础上的一个总控制模块,做出是否转换当前相位的决定。其输入为第一级两个模块的输出即绿灯相位交通强度与红灯相位交通强度,输出为是否转换该改相位的决策,该决策的结果只有两个,要么终止当前相位转到下一相位,要么把该相位延长一个延长绿时间,继续显示该相位。

设东西南北四向各车道的车流量(到达率):

East-throught=0.09+0.15sin(0.03t);

East-left=0.09+0.2cos(0.1t);

West-throught=0.15-0.17sin(0.02t)

West_left=0.11+0.14cos(0.08*t);

North-throught=0.12-0.12sin(0.08t);

North-left=0.075+0.12sin(40+0.1t);

South-left=0.07-0.11cos(60+0.05t);

其中t是时间(单位为s)

排队长度计算公式:

9.png

r——红灯时间,s

s——饱和流率,辆/h

v——到达率,辆/h

L——车辆长度(包括车辆间的距离、),m

n——车道数;

Fu——车道利用系数。

最大排队长度Q=vr/3600;(v是平均到达率;r是有效红灯时间)

    模糊控制器首先采用人工初始设置的隶属度函数进行模糊控制, 同时历史数据库开始积累各时间段的交叉口入口交通参数. 每经过一定的时间间隔,交通流模拟器利用历史数据库中记忆的历史交通参数进行交通再现模拟, 同时采用遗传算法对交通流模拟器中模糊隶属度函数进行寻优, 找出适合于当前交通流的模糊隶属度函数, 并且将调整后的隶属度函数送入模糊控制器加以更新。

10.jpeg

3.MATLAB核心程序

for i = 1:length(Times) 
    t = Times(i);
 
    % r%红灯时间,s
    r = 30;
    % g%——绿灯时间;
    g = 60;   
    
    % ld%——绿信比(绿灯时间与周期的比值);
    ld= g/C;
    % y%——流量比,y=q/s; 
    y = q/s;
    % s%——饱和流量(s=0.4辆/s)
    S = s/3600;
    %排队长度计算公式
    Q = v/3600 * (r-6) * (1 + 1/(s/v-1)) * L/n/Fu;
    %统计平均延误时间
    d(i) = C*(1-ld)^2/(2*(1-y)) + X^2/(2*q*(1-X)) - 0.65*(C/q/q)^(1/3)*X^(2+5*g/C);
end
...........................................................
%加入模糊控制器的对比
Tmin = 10;
Tmax = 20;
Gj   = 60;
 
RR   = readfis('Red_controller'); 
GG   = readfis('Green_controller'); 
RG   = readfis('GA_FNN.fis'); 
 
figure(2);
subplot(311);plotmf(RG,'input',1);  title('R隶属函数变化-GA优化前');
subplot(312);plotmf(RG,'input',2);  title('G隶属函数变化-GA优化前');
subplot(313);plotmf(RG,'output',1); title('RG隶属函数变化-GA优化前');
 
 
for i = 1:length(Times) 
    t = Times(i);
    %控制器初始状态
    if  i == 1
        % r%红灯时间,s
        r = 30;
        % g%——绿灯时间;
        g = Gj;   
 
        % s%饱和流率,辆/h
        s = 300;
        % v%到达率,辆/h
        v = 290;
        % L%车辆长度(包括车辆间的距离、)
        L = 4.8;
        % n%车道数
        n = 4;
        % Fu%车道利用系数
        Fu= 0.6; 
        % X%——饱和度;
        X = 0.9;
        % C%——周期时长;
        C = g + r;
        % q%——流量;
        if mod(i,5) == 1;
           q = 80 + 10*sin(2*pi*t) + 5*randn;  
        end
 
        % ld%——绿信比(绿灯时间与周期的比值);
        ld= g/C;
        % y%——流量比,y=q/s; 
        y = q/s;
        % s%——饱和流量(s=0.4辆/s)
        S = s/3600;
    else
        %调用控制器    
        %绿灯排队长度计算公式
        Qg           = v/3600 * (g-6) * (1 + 1/(s/v-1)) * L/n/Fu;    
        %路口流量
        traffic_flow = q;
...................................................................................
        %最终控制输出
        gout;
        %总的判决
        if g >= Tmin & g <= Tmax
           g = gout; 
        end
        if g <= Tmin
           g = Tmin;
        end
        if g >= Tmax
           g = Tmax;
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % r%红灯时间,s
        r = 30;
        % s%饱和流率,辆/h
        s = 300;
        % v%到达率,辆/h
        v = 290;
        % L%车辆长度(包括车辆间的距离、)
        L = 4.8;
        % n%车道数
        n = 4;
        % Fu%车道利用系数
        Fu= 0.6; 
        % X%——饱和度;
        X = 0.9;
        % C%——周期时长;
        C = g + r;
        % q%——流量;
        if mod(i,5) == 1;
           q = 80 + 10*sin(2*pi*t) + 5*randn;  
        end
 
        % ld%——绿信比(绿灯时间与周期的比值);
        ld= g/C;
        % y%——流量比,y=q/s; 
        y = q/s;
        % s%——饱和流量(s=0.4辆/s)
        S = s/3600;
    end
 
    %统计平均延误时间
    d(i) = C*(1-ld)^2/(2*(1-y)) + X^2/(2*q*(1-X)) - 0.65*(C/q/q)^(1/3)*X^(2+5*g/C);
    d(i) = d(i)/2;
end
 
 
 
figure(1);
hold on;
plot(Times,d,'k');
hold on;
 
 
 
 
 
 
%加入GA+模糊控制器的对比
%加入GA+模糊控制器的对比
%加入GA+模糊控制器的对比
%加入GA+模糊控制器的对比
Tmin = 10;
Tmax = 20;
Gj   = 60;
 
RR   = readfis('Red_controller'); 
GG   = readfis('Green_controller'); 
RG   = readfis('GA_FNN.fis'); 
 
figure(2);
subplot(311);plotmf(RG,'input',1);  title('R隶属函数变化-GA优化前');
subplot(312);plotmf(RG,'input',2);  title('G隶属函数变化-GA优化前');
subplot(313);plotmf(RG,'output',1); title('RG隶属函数变化-GA优化前');
 
%GA优化
RG_opt   = readfis('GA_FNN_OPT.fis'); 
figure(3);
subplot(311);plotmf(RG_opt,'input',1);  title('R隶属函数变化-GA优化后');
subplot(312);plotmf(RG_opt,'input',2);  title('G隶属函数变化-GA优化后');
subplot(313);plotmf(RG_opt,'output',1); title('RG隶属函数变化-GA优化后');
 
for i = 1:length(Times) 
    t = Times(i);
    %控制器初始状态
    if  i == 1
        % r%红灯时间,s
        r = 30;
        % g%——绿灯时间;
        g = Gj;   
 
        % s%饱和流率,辆/h
        s = 300;
        % v%到达率,辆/h
        v = 290;
        % L%车辆长度(包括车辆间的距离、)
        L = 4.8;
        % n%车道数
        n = 4;
        % Fu%车道利用系数
        Fu= 0.6; 
        % X%——饱和度;
        X = 0.9;
        % C%——周期时长;
        C = g + r;
        % q%——流量;
        if mod(i,5) == 1;
           q = 80 + 10*sin(2*pi*t) + 5*randn;  
        end
 
        % ld%——绿信比(绿灯时间与周期的比值);
        ld= g/C;
        % y%——流量比,y=q/s; 
        y = q/s;
        % s%——饱和流量(s=0.4辆/s)
        S = s/3600;
    else
        %调用控制器    
        %绿灯排队长度计算公式
        Qg           = v/3600 * (g-6) * (1 + 1/(s/v-1)) * L/n/Fu;    
        %路口流量
        traffic_flow = q;
 
        %红灯排队长度计算公式
        Qr = v/3600 * (r-6) * (1 + 1/(s/v-1)) * L/n/Fu;            
        
        %绿灯相位控制器
        G_Power = evalfis([Qg,traffic_flow],GG); 
        %红灯相位控制器,红灯排队长度越长,那么红灯强度减弱,红灯排队长度越短,那么红灯强度减强,
        R_Power = evalfis(Qr,RR); 
        
        
        %GA模糊控制器,输出gout
        gout   = evalfis([G_Power,R_Power],RG_opt); 
        
    
        %最终控制输出
        gout;
        %总的判决
        if g >= Tmin & g <= Tmax
           g = gout; 
        end
        if g <= Tmin
           g = Tmin;
        end
        if g >= Tmax
           g = Tmax;
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % r%红灯时间,s
        r = 30;
        % s%饱和流率,辆/h
        s = 300;
        % v%到达率,辆/h
        v = 290;
        % L%车辆长度(包括车辆间的距离、)
        L = 4.8;
        % n%车道数
        n = 4;
        % Fu%车道利用系数
        Fu= 0.6; 
        % X%——饱和度;
        X = 0.9;
        % C%——周期时长;
        C = g + r;
        % q%——流量;
        if mod(i,5) == 1;
           q = 80 + 10*sin(2*pi*t) + 5*randn;  
        end
 
        % ld%——绿信比(绿灯时间与周期的比值);
        ld= g/C;
        % y%——流量比,y=q/s; 
        y = q/s;
        % s%——饱和流量(s=0.4辆/s)
        S = s/3600;
    end
 
    %统计平均延误时间
    d(i) = C*(1-ld)^2/(2*(1-y)) + X^2/(2*q*(1-X)) - 0.65*(C/q/q)^(1/3)*X^(2+5*g/C);
    d(i) = d(i)/2;
end
figure(1);
hold on;
plot(Times,d,'r');
legend('不加控制器的平均延误时间','加控制器的平均延误时间','加控制器(GA优化)的平均延误时间');
 
xlabel('times');
ylabel('平均延误时间');
grid on;
hold on;

标签:基于,相位,红灯,控制器,绿灯,RG,BP,GA,遗传算法
From: https://blog.51cto.com/matworld/6229040

相关文章

  • 基于肤色空间建模+连通域处理的人脸检测算法的MATLAB仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将计算资源集中在持有人脸的图像部分。图片中的人脸检测方法很复杂,因为......
  • m基于背景差法与GMM混合高斯模型结合的红外目标检测与跟踪算法matlab仿真
    1.算法仿真效果matlab2013b仿真结果如下: 普通视频:  红外视频:   2.算法涉及理论知识概要       在Stauffer等人提出的自适应混合高斯背景模型基础上,为每个像素构建混合高斯背景模型,通过融入帧间差分把每帧中的图像区分为背景区域、背景显露区域和运动物......
  • m基于模糊控制的网络时延预测和丢包率matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要        涉及到具体的数据包大小以及时间延迟,我们通过构建一个FIFO,来虚拟网络的实际工作情况,当空闲情况下,网络流量非常小,我们的数据通过FIFO,会在FIFO内排队,等候前面的数据传输出去后,再发......
  • m基于背景差法与GMM混合高斯模型结合的红外目标检测与跟踪算法matlab仿真
    1.算法仿真效果matlab2013b仿真结果如下:普通视频:红外视频:2.算法涉及理论知识概要在Stauffer等人提出的自适应混合高斯背景模型基础上,为每个像素构建混合高斯背景模型,通过融入帧间差分把每帧中的图像区分为背景区域、背景显露区域和运动物体区域。相对于背景区域,背景显露......
  • eBPF,何以称得上是革命性的内核技术?
      eBPF的全称是extendedBerkeleyPacketFilter,它被称之为“革命性”的内核技术,可以在Linux内核中运行沙盒程序,而无需更改内核源代码或加载内核模块。它提供了一种通用执行引擎,可以基于系统或程序事件高效安全地执行特定代码,就像在实时(JIT)编译器和验证引擎的帮助下进......
  • qiankun vue子应用升级webpack5问题记录
    升级的方式是使用最新版本的vue-cli脚手架,重新创建一个新项目,然后复制@vue/cli-xxx,vue相关依赖最新版本到子应用项目->核对babel,eslint相关配置的变化->重新安装依赖,处理出现的相各种异常情况->启动项目检查功能是否正常。本次升级主要是为了使用webpack5。以下......
  • C# abp中EfCore执行原生sql和事务操作
    ef自带的方法是没有执行原生sql的,必须在仓储实现类中注入dbContextProvider、然后就可以使用FromSqlRaw查询,ExecuteSqlRawAsync执行新增、修改、删除,efcore方法都是自带事务的,有时候我们想在自己的业务逻辑中嵌入事务,就使用CreateExecutionStrategy创建事务操作:publicclassAcc......
  • 基于 Docker Compose 安装 Kuboard
    1、Docker安装参考:https://www.cnblogs.com/a120608yby/p/9883175.html2、DockerCompose安装https://www.cnblogs.com/a120608yby/p/14582853.html3、服务配置文件#vimdocker-compose.yamlversion:"3.9"services:kuboard:image:eipwork/kuboard:v3......
  • python subprocess Popen非阻塞,读取adb日志
    简单版fromthreadingimportThreadfromqueueimportQueue,Emptyimportshlexif__name__=='__main__':print_hi('PyCharm')#Car().run()defenqueue_output(stdout,queue):withopen("www.log",'w......
  • 基于Java开发的全文检索、知识图谱、工作流审批机制的知识库
    一、项目介绍一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,应用在需要进行常用文档整理、分类、归集、检索的地方,适合知识密集型单位/历史文档丰富的单位,或者大型企业、集团。为什么建立知识库平台?二、项目所用技术springboot+vue+tinyMce+activiti+elastics......