当前位置:   article > 正文

车辆换道决策的模糊控制算法实例_模糊算法在实际中应用的案例

模糊算法在实际中应用的案例

目录

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

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 建立换道决策的模糊逻辑系统

  1. clc
  2. clear
  3. close all
  4. %构造输入、输出
  5. %创建新的模糊推理系统
  6. fis = mamfis; %生成模糊逻辑对象
  7. %输入1:fai_d(隶属度函数——距离差值系数)
  8. fis = addInput(fis,[0 1],'Name','fai_d');
  9. %设置三角隶属函数'trimf'
  10. fis = addMF(fis,'fai_d','trimf',[-0.25,0,0.25],'Name','小'); %-0.25,0,0.25分别为三角的左底点,顶点,右底点
  11. fis = addMF(fis,'fai_d','trimf',[0,0.25,0.5],'Name','较小');
  12. fis = addMF(fis,'fai_d','trimf',[0.25,0.5,0.75],'Name','中');
  13. fis = addMF(fis,'fai_d','trimf',[0.5,0.75,1],'Name','较大');
  14. fis = addMF(fis,'fai_d','trimf',[0.75,1,1.25],'Name','大');
  15. %输入2:fai_v (隶属度函数——速度差值系数)
  16. fis = addInput(fis,[0 1],'Name','fai_v');
  17. fis = addMF(fis,'fai_v','trimf',[-0.25,0,0.25],'Name','小');
  18. fis = addMF(fis,'fai_v','trimf',[0,0.25,0.5],'Name','较小');
  19. fis = addMF(fis,'fai_v','trimf',[0.25,0.5,0.75],'Name','中');
  20. fis = addMF(fis,'fai_v','trimf',[0.5,0.75,1],'Name','较大');
  21. fis = addMF(fis,'fai_v','trimf',[0.75,1,1.25],'Name','大');
  22. %输出
  23. fis = addOutput(fis,[0 1],'Name','fai_h');
  24. fis = addMF(fis,'fai_h','trimf',[-0.25,0,0.25],'Name','弱');
  25. fis = addMF(fis,'fai_h','trimf',[0,0.25,0.5],'Name','较弱');
  26. fis = addMF(fis,'fai_h','trimf',[0.25,0.5,0.75],'Name','中');
  27. fis = addMF(fis,'fai_h','trimf',[0.5,0.75,1],'Name','较强');
  28. fis = addMF(fis,'fai_h','trimf',[0.75,1,1.25],'Name','强');
  29. %%规则库
  30. %第1~5列分别是:fai_d,fai_v,fai_h,规则权重,AND/OR选项
  31. rulelist=[1 1 2 1 1;
  32. 1 2 3 1 1; %当fai_d=1(小),fai_v=2(较小),此时的换道意愿为3(中)
  33. 1 3 4 1 1;
  34. 1 4 5 1 1;
  35. 1 5 5 1 1;
  36. 2 1 2 1 1;
  37. 2 2 3 1 1;
  38. 2 3 4 1 1;
  39. 2 4 5 1 1;
  40. 2 5 5 1 1;
  41. 3 1 1 1 1;
  42. 3 2 2 1 1;
  43. 3 3 3 1 1;
  44. 3 4 4 1 1;
  45. 3 5 4 1 1;
  46. 4 1 1 1 1;
  47. 4 2 1 1 1;
  48. 4 3 2 1 1;
  49. 4 4 3 1 1;
  50. 4 5 4 1 1;
  51. 5 1 1 1 1;
  52. 5 2 1 1 1;
  53. 5 3 1 1 1;
  54. 5 4 2 1 1;
  55. 5 5 3 1 1;];
  56. fis = addRule(fis,rulelist); %添加模糊规则函数
  57. showrule(fis) %显示模糊规则函数
  58. %%根据输入,得到输出
  59. %先设置解模糊方法
  60. fis.DefuzzMethod = 'centroid';
  61. %任意给一个fai_d,fai_v,输出换道意愿fai_h
  62. fai_d = 0.4;
  63. fai_v = 0.6;
  64. fai_h = evalfis(fis,[fai_d,fai_v]);
  65. %根据换道意愿fai_h的大小,给出车辆决策
  66. if fai_h > 0 && fai_h <= 0.5
  67. decision = 1;
  68. disp('车辆决策为:跟驰行驶')
  69. elseif fai_h > 0.5 && fai_h <= 0.6
  70. decision = 2;
  71. disp('车辆决策为:等待换道')
  72. elseif fai_h > 0.6 && fai_h <= 1
  73. decision = 3;
  74. disp('车辆决策为:执行换道')
  75. end
  76. %%画出模糊系统
  77. figure(1);plotfis(fis); %模糊系统连接结构图
  78. figure(2);plotmf(fis,'input',1); %模糊系统第一个输入隶属函数图
  79. figure(3);plotmf(fis,'input',2); %模糊系统第二个输入隶属函数图
  80. figure(4);plotmf(fis,'output',1); %模糊系统输出隶属函数图
  81. figure(5);gensurf(fis);title('换道意愿模糊规则曲面') %模糊规则曲面
  82. %%保存
  83. writeFIS(fis,'LCD');

得到的结果如下:

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

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

 

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

换道意愿的曲面图

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/718686
推荐阅读
相关标签
  

闽ICP备14008679号