车辆换道决策的模糊控制算法实例

目录

一、模糊控制在换道决策应用上的概念介绍

1.1 模糊化

1.2 建立模糊规则

1.3 解模糊

二、Matlab建立模糊逻辑系统

2.1 Matlab模糊逻辑工具箱

2.2 建立模糊系统的步骤

 2.3 建立换道决策的模糊逻辑系统


一、模糊控制在换道决策应用上的概念介绍

        实际驾车时,车辆在行驶过程中能否去执行换道的决策与道路信息存在很大的非线性关系,模糊逻辑算法可以较好地解决复杂信息下的非线性系统控制。

        由实际驾驶经验,我们知道,车辆的安全换道与车辆驾驶速度及车距有关,当车速较大、与前方车辆车距较小时,换道易引起碰撞等危险。在这里定义速度差值系数车距差值系数作为模糊系统判断的输入量。

    (1)速度差值系数:

\varphi _{v}=\left\{\begin{matrix} 1 &v_{e} \geq v_{f} \\ \frac{v_{e}-v_{f} }{v_{e}}& v_{e} \leq v_{f} \end{matrix}\right.

        其中,v_{e}为车辆当前速度,v_{f}为前方车辆的速度。

    (2)车距差值系数:

\varphi _{d}=\left\{\begin{matrix} 1 &D_{safe} \geq D_{f} \\ \frac{D_{safe} }{D_{f}}&D_{safe} \leq D_{f} \end{matrix}\right.

        其中,D_{safe}为安全车距,D_{f}为当前车辆距离前方车辆的距离。

1.1 模糊化

        将输入的速度差值系数及车距差值系数模糊化为5个等级:设\varphi _{v}的取值范围[0,1]为论域X,选取X的模糊子集为 {小,较小,中,较大,大};设\varphi _{d}的取值范围[0,1]为论域Y,同样地,选取Y的模糊子集为 {小,较小,中,较大,大}。

        输出变量为换道决策意愿值,模糊化为{弱,较弱,中,较强,强}5个子集,论域为Z,取值范围在[0,1]。

1.2 建立模糊规则

换道意愿\varphi _{h}

速度差值系数\varphi _{v}

较小

中等

较大

车距期望系数\varphi _{d}

较弱

中等

较强

较小

较弱

中等

较强

中等

较弱

中等

较强

较强

较大

较弱

中等

较强

较弱

中等

1.3 解模糊

        将模糊推理的输出变量\varphi _{h}转化为实际执行的变量,决策类型定义如下:

0<\varphi _{h}\leqslant 0.5

decision=1

继续轨迹跟踪

0.5<\varphi _{h}\leqslant 0.6

decision=2

等待避障

\varphi _{h}>0.6

decision=3

执行避障动作

二、Matlab建立模糊逻辑系统

2.1 Matlab模糊逻辑工具箱

        在Matlab命令行窗口输入

>>fuzzy

可弹出模糊逻辑工具箱的界面:

        工具箱的使用可参考:matlab模糊控制工具箱使用和模糊控制pid实例参考_studyer_domi的博客-CSDN博客_matlab模糊控制

2.2 建立模糊系统的步骤

参考:Fuzzy Inference System Modeling- MATLAB & Simulink

 1.创建模糊逻辑系统:如,利用   fis = mamfis; %生成模糊逻辑对象(Mamdani模糊系统)

         常见的模糊类型有:mamfis、sugfis(Sugeno模糊推理系统)、genfis(从数据生成模糊推理系统对象)等,或类型间相互转换

2.指定输入和输出变量:如,fis = addInput(fis,[0 1],'Name','fai_d'); %(指定模糊系统,变量范围,‘Name’,变量名称)

3.指定隶属度函数:如,fis = addMF(fis,'fai_d','trimf',[-0.25,0,0.25],'Name','小'); %(指定模糊系统,变量名称,隶属度函数类型,‘Name’,隶属度名称)

        常见的隶属度类型有:

 4.指定模糊规则:这里有,fis = addRule(fis,rulelist);

        其中,rulelist为5列的向量,每一列依次表示\varphi _{d}等级,\varphi _{v}等级,\varphi _{h}等级,规则权重,AND/OR选项(1或0)

5.评估及可视化模糊系统

 6.导入及导出

        例.fis = readfis('LCD');  %从文件加载模糊推理系统

             writeFIS(fis,'LCD'); %将模糊系统保存到文件

 2.3 建立换道决策的模糊逻辑系统

clc
clear
close all

%构造输入、输出
%创建新的模糊推理系统
fis = mamfis;      %生成模糊逻辑对象

%输入1:fai_d(隶属度函数——距离差值系数)
fis = addInput(fis,[0 1],'Name','fai_d');
%设置三角隶属函数'trimf'
fis = addMF(fis,'fai_d','trimf',[-0.25,0,0.25],'Name','小');   %-0.25,0,0.25分别为三角的左底点,顶点,右底点
fis = addMF(fis,'fai_d','trimf',[0,0.25,0.5],'Name','较小');
fis = addMF(fis,'fai_d','trimf',[0.25,0.5,0.75],'Name','中');
fis = addMF(fis,'fai_d','trimf',[0.5,0.75,1],'Name','较大');
fis = addMF(fis,'fai_d','trimf',[0.75,1,1.25],'Name','大');

%输入2:fai_v   (隶属度函数——速度差值系数)
fis = addInput(fis,[0 1],'Name','fai_v');
fis = addMF(fis,'fai_v','trimf',[-0.25,0,0.25],'Name','小');
fis = addMF(fis,'fai_v','trimf',[0,0.25,0.5],'Name','较小');
fis = addMF(fis,'fai_v','trimf',[0.25,0.5,0.75],'Name','中');
fis = addMF(fis,'fai_v','trimf',[0.5,0.75,1],'Name','较大');
fis = addMF(fis,'fai_v','trimf',[0.75,1,1.25],'Name','大');

%输出
fis = addOutput(fis,[0 1],'Name','fai_h');
fis = addMF(fis,'fai_h','trimf',[-0.25,0,0.25],'Name','弱');
fis = addMF(fis,'fai_h','trimf',[0,0.25,0.5],'Name','较弱');
fis = addMF(fis,'fai_h','trimf',[0.25,0.5,0.75],'Name','中');
fis = addMF(fis,'fai_h','trimf',[0.5,0.75,1],'Name','较强');
fis = addMF(fis,'fai_h','trimf',[0.75,1,1.25],'Name','强');
%%规则库
%第1~5列分别是:fai_d,fai_v,fai_h,规则权重,AND/OR选项
rulelist=[1 1 2 1 1;
    1 2 3 1 1;       %当fai_d=1(小),fai_v=2(较小),此时的换道意愿为3(中)
    1 3 4 1 1;
    1 4 5 1 1;
    1 5 5 1 1;
    
    2 1 2 1 1;
    2 2 3 1 1;
    2 3 4 1 1;
    2 4 5 1 1;
    2 5 5 1 1;
    
    3 1 1 1 1;
    3 2 2 1 1;
    3 3 3 1 1;
    3 4 4 1 1;
    3 5 4 1 1;
    
    4 1 1 1 1;
    4 2 1 1 1;
    4 3 2 1 1;
    4 4 3 1 1;
    4 5 4 1 1;
    
    5 1 1 1 1;
    5 2 1 1 1;
    5 3 1 1 1;
    5 4 2 1 1;
    5 5 3 1 1;];

fis = addRule(fis,rulelist);   %添加模糊规则函数
showrule(fis)                  %显示模糊规则函数

%%根据输入,得到输出
%先设置解模糊方法
fis.DefuzzMethod = 'centroid';

%任意给一个fai_d,fai_v,输出换道意愿fai_h
fai_d = 0.4;
fai_v = 0.6;
fai_h = evalfis(fis,[fai_d,fai_v]);

%根据换道意愿fai_h的大小,给出车辆决策
if fai_h > 0 && fai_h <= 0.5
    decision = 1;
    disp('车辆决策为:跟驰行驶')
elseif fai_h > 0.5 && fai_h <= 0.6
    decision = 2;
    disp('车辆决策为:等待换道')
elseif fai_h > 0.6 && fai_h <= 1
    decision = 3;
    disp('车辆决策为:执行换道')
end

%%画出模糊系统
figure(1);plotfis(fis);             %模糊系统连接结构图
figure(2);plotmf(fis,'input',1);    %模糊系统第一个输入隶属函数图
figure(3);plotmf(fis,'input',2);    %模糊系统第二个输入隶属函数图
figure(4);plotmf(fis,'output',1);   %模糊系统输出隶属函数图
figure(5);gensurf(fis);title('换道意愿模糊规则曲面')             %模糊规则曲面

%%保存
writeFIS(fis,'LCD');

    

得到的结果如下:

\varphi _{d}的隶属度函数值

 \varphi _{v}的隶属度函数值

 

换道意愿 \varphi _{h}输出

换道意愿的曲面图

 

 

  • 10
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锅小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值