用MATLAB生成模糊控制離線查詢表


  實時采樣得到的數據經過模糊化處理后輸入機器,通過查詢模糊規則表便可得到應有的輸出模糊量,從而避免了近似推理過程。實際應用中,特別是在控制系統較為簡單而采用單片機控制時,常常采用這種查表法。

  模糊控制表的計算有多種方式,手工編程計算會很繁瑣。MATLAB中提供了evalfis函數進行模糊推理計算,也可以用SystemTest自動生成模糊控制表。注意MATLAB 2016a以后不再包含這個功能,可以用Unit Test Framework或Simulink Test代替。

  以雙輸入—單輸出系統為例,計算模糊控制器的查詢表。假設控制器輸入為誤差e和誤差變化率ec,輸出為控制量u,其基本論域分別為[emin,emax],[ecmin,ecmax],[umin,umax],對應的語言變量E、EC和U的論域為{-6,-5,…,-1,0,1,…,5,6},E、EC和U都選7個語言值{NB,NM,NS,Z,PS,PM,PB},各語言值的隸屬函數采用三角函數。其分布可用表1表示,控制規則如表2所示。

表1 語言變量E、EC和U的賦值表

表2 模糊控制規則表

  1. 在MATLAB中輸入fuzzy打開模糊控制工具箱,編輯輸入輸出變量的隸屬度函數和模糊控制規則,然后將模糊推理系統保存為test.fis。

 

  解模糊用(最大隸屬度) 最大值法(lom)。如果在模糊集合的論域上,有多個點u的隸屬度都取最大值,可取這些點中坐標絕對值最大的點ulom作為模糊集合的代表點,這個方法稱為最大隸屬度最大值法。

  輸入輸出量的隸屬度函數均采用三角形函數,如下圖所示:

  並根據模糊控制規則表在Rule Editor中逐條添加規則:

  2. 打開Simulink模塊,建立下圖所示的系統框圖。添加兩個輸入和一個輸出端口,處理模塊是Fuzzy Logic Controller (或Fuzzy Logic Controller with Ruleviewer)。

  

  在MATLAB命令窗口中輸入fuzzy_control=readfis(‘test’)將之前建立的模糊控制器加載到工作空間,將Simulink中模糊控制模塊的參數設置為fuzzy_control,保存該模型為fuzzy_model.mdl。

  3. 在Simulink界面菜單欄的Tools下拉菜單中找到SystemTest,打開測試界面。選中Main Test,菜單欄 Insert→Test Element → Simulink,選擇第二步中建立的模型 fuzzy_model 。

  在Test Vectors 項里添加兩個測試向量(點擊New新建):變量名分別為input1和input2,編輯兩個輸入變量的取值范圍為[-6:1:6],根據輸入向量維度測試會循環169次;在Test Variables 里定義測試變量,變量名為output。

  接下來進行變量映射。把測試向量input1、input2分別映射到模糊控制器的輸入口In1、In2,做為輸入測試信號。把測試變量output 映射到模糊控制器輸出口Out1。設置后的界面如下圖所示。

 

  最后選擇要保存的測試數據。在測試界面點Save Results項,設置如下:

  

  4. 點擊Run運行測試,Main Test會進行169次迭代,等待測試結束。

 

  測試成功結束后,可以查看測試結果數據集:

  系統測試結果保存在 stresults.ResultsDataSet.output 中,為169*1 cell的單元數組(cell為 [n*1 double] 結構,表示系統被測試了n次)。在matlab中輸入下面的命令,將第6次測試結果保存在變量table_data中。

test_data=stresults.ResultsDataSet.output; 
temp=zeros(169,1); 
for i=1:169 
    temp(i)=test_data{i}(6); 
end 
table_data=reshape(a,13,13); 

  Workspace窗口中右擊table_data變量,選擇Open Selection可以查看模糊控制查詢表:

  

  SystemTest還提供了圖形化的結果查看功能。在系統測試界面點Tools→Test Results Viewer,點工具欄里的Surf Plot繪制三維曲面。X、Y 、Z分別設置為input1、input2和output。點Plot按鈕,根據輸入輸出繪制的曲面如下圖所示:

 

   在這里也可以輸出控制表:右擊輸出變量output,在彈出的菜單中點擊Export輸出到工作空間中。

 

   output包含6個13X13的二維表,我們列出第六個:

 

  輸入table=output(:,:,6); 生成table變量后點擊Open Selection查看模糊控制表:

 

   5. 使用evalfis函數也可以根據給定輸入計算模糊系統的輸出。例如下面的語句計算模糊系統test在E=6,EC=3時的輸出,可以看到結果與上面模糊控制查詢表中的一致。

fuzzy_control = readfis('test');
evalfis([-6 3], fuzzy_control)
ans =
   -4.9200

  evalfis也可以同時計算多組輸入的結果,比如:

evalfis([-3 6;-2 6],fuzzy_control)
ans =
    3.0000
    2.0400

 

 

參考:

計算模糊控制離線查詢表

在SIMULINK里把模糊邏輯生成查尋表

基於Matlab的模糊查詢表生成方法探討

如何利用matlab將模糊邏輯轉化為查詢表

使用MATLAB生成模糊控制的離線查詢表

如何在MATLAB下把模糊推理系統轉化為查詢表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM