基本FIS編輯器

函數 fuzzy

格式 fuzzy     %彈出未定義的基本FIS編輯器

fuzzy(fismat)    %使用fuzzy('tipper'),彈出下圖FIS編輯器。

編輯器是任意模糊推理系統的高層顯示,它允許你調用各種其它的編輯器來對其操作。此界面允許你方便地訪問所有其它的編輯器,並以最靈活的方式與模糊系統進行交互。

方框圖:窗口上方的方框圖顯示了輸入、輸出和它們中間的模糊規則處理器。單擊任意一個變量框,使選中的方框成爲當前變量,此時它變成紅色高亮方框。雙擊任意一個變量,彈出隸屬度函數編輯器,雙擊模糊規則編輯器,彈出規則編輯器。

圖6-19

菜單項:FIS編輯器的菜單棒允許你打開相應的工具,打開並保存系統。

·File菜單包括:

New mamdani FIS … 打開新mamdani型系統;

New Sugeno FIS …   打開新Sugeno型系統;

Open from disk …   從磁盤上打開指定的.fis文件系統;

Save to disk    保存當前系統到磁盤上的一個.fis文件上;

Save to disk as …    重命名方式保存當前系統到磁盤上;

Open from workspace …    從工作空間中指定的FIS結構變量裝入一個系統;

Save to workspace …   保存系統到工作空間中當前命名的FIS結構變量中;

Save to workspace as …   保存系統到工作空間中指定的FIS結構變量中;

Close windows   關閉GUI;

·Edit菜單包括:

Add input   增加另一個輸入到當前系統中;

Add output   增加另一個輸出到當前系統中;

Remove variable    刪除一個所選的變量;

Undo   恢復當前最近的改變;

·View 菜單包括:

Edit MFs …   調用隸屬度函數編輯器;

Edit rules …   調用規則編輯器;

Edit anfis …   只對單輸出Sugeno型系統調用編輯器;

View rules …   調用規則觀察器;

View surface …    調用曲面觀察器。

彈出式菜單:用五個彈出式菜單來改變模糊蘊含過程中五個基本步驟的功能:

·And method:爲一個定製操作選擇min、prod或Custom;

·Or method:爲一個定製操作選擇max、probor(概率)或Custom;

·Implication method:爲一個定製操作選擇min、prod或Custom;此項對Sugeno型模糊系統不可用。

·Aggregation method:爲一個定製操作選擇max、sum、probor或Custom。此項對Sugeno型模糊系統不可用。

·Defuzzification method:對Mamdani型推理,爲一個定製操作選擇centroid(面積中心法)、bisector(面積平分法)、mom(平均最大隸屬度法)、som(最大隸屬度最小值法)、lom(最大隸屬度最大值法)或Custom。對Sugeno型推理,在wtaver(加權平均)或wtsum(加權和)之間選擇。

6.1.15 隸屬函數編輯器

函數 mfedit

格式 mfedit('a')

      mfedit(a)

      mfedit

說明 mfedit('a')生成一個隸屬函數編輯器,他允許你檢查和修改存儲在文件a.fis中FIS結構的所有隸屬函數。如圖,mfedit('tank')以這種方式打開隸屬函數編輯器並裝入tank.fis中存儲的所有隸屬函數。

mfedit(a)對於FIS結構操作一個MATLAB工作空間變量a。Mfedit可單獨彈出沒有裝入FIS的隸屬函數編輯器

圖6-20

菜單項:在ANFIS編輯器GUI上,有一個菜單棒允許你打開相關的GUI工具、打開和保存系統等。File菜單與FIS編輯器上的File菜單功能相同。

·Edit菜單項包括:

Add MF…   爲當前語言變量增加隸屬度函數;

Add custom MF…   爲當前語言變量增加定製的隸屬度函數;

Remove current MF   刪除當前的隸屬度函數;

Remove all MFS   刪除當前語言變量的所有隸屬度函數;

Undo   恢復當前最近的改變。

·View菜單項包括:

Edit FIS properties…   調用FIS編輯器;

Edit rules…   調用規則編輯器;

View rules…   調用規則觀察器;

View surface…   調用曲面觀察器。

                                                                                                                                   6.2 模糊推理結構FIS

6.2.1 不使用數據聚類方法從數據生成FIS結構

函數 genfis1

格式 fismat = genfis1(data)

      fismat = genfis1(data,numMFs,inmftype, outmftype)

說明 genfis1爲anfis訓練生成一個Sugeno型作爲初始條件的FIS結構(初始隸屬函數)。genfis1(data,numMFs,inmftype, outmftype)使用對數據的網格分割方法,從訓練數據集生成一個FIS結構。Data是訓練數據矩陣,除最後一列表示單一輸出數據外,它的其它各列表示輸入數據。NumMFs是一個向量,它的座標指定與每一輸入相關的隸屬函數的數量。如果你想使用每個輸入相關的相同數量的隸屬函數,那麼只須使numMFs成爲一個數就足夠了。Inmftype是一個字符串數組,它的每行指定與每個輸入相關的隸屬函數類型。outmftype是一個字符串數組,它的指定與每個輸出相關的隸屬函數類型

例6-19

>>data = [rand(10,1) 10*rand(10,1)-5 rand(10,1)];

>>numMFs = [3 7];

>>mfType = str2mat('pimf','trimf');

>>fismat = genfis1(data,numMFs,mfType);

>> [x,mf] = plotmf(fismat,'input',1);

>>subplot(2,1,1), plot(x,mf);

>>xlabel('input 1 (pimf)');

>>[x,mf] = plotmf(fismat,'input',2);

>>subplot(2,1,2), plot(x,mf);

>>xlabel('input 2 (trimf)');

結果爲圖6-21。

圖6-21

6.2.2 使用減法聚類方法從數椐生成FIS結構

函數 genfis2

格式 fismat = genfis2(Xin,Xout,radii)

      fismat = genfis2(Xin,Xout,radii,xBounds)

      fismat = genfis2(Xin,Xout,radii,xBounds,options)

說明 Xin是一個矩陣,它的每一行包含一個數據點的輸入值;Xout是一個矩陣,它的每一行包含一個數據點的輸出值;randi是一個向量,它指定一個聚類中心在一個數據維上作用的範圍,這裏假定數據位於一個單位超立方體內:xBounds是一個2×N可選矩陣,它用於指定如何將Xin和Xout中的數據映射到一個超立方體內,這裏是數據的維數(行數); options是一個可選向量,它指定的值用於覆蓋算法參數的缺省值。

例6-20

fismat = genfis2(Xin,Xout,0.5)

這是使用此函數所需的最小變量數。這裏對所有數據維指定0.5的作用範圍。

fismat = genfis2(Xin,Xout,[0.5 0.25 0.3])

這裏假定組合的維數是3。假設Xin有兩維、Xout有一維,那麼,0.5和0.25是Xin數據維中每一維的作用範圍,0.3是Xout數據維的作用範圍。

fismat = genfis2(Xin,Xout,0.5,[-10 -5 0; 10 5 20])

這裏指定了如何將Xin和Xout中的數據規範化爲[0 1]區間中的值來進行處理。假設Xin有兩維、Xout有一維,那麼Xin第一列中的數據是從[-10 +10]比例變換後的值,Xin第二列中的數據是從[-5 +5]比例變換後的值,Xout中的數據是從[0 20]比例變換後的值。

6.2.3 生成一個FIS輸出曲面

函數 gensurf

格式 gensurf(fis)   %使用前兩個輸入和第一個輸出來生成給定模糊推理系統(fis)的輸出曲面

     gensurf(fis,inputs,output)   %使用分別由向量input和標量output給定的輸入(一個或兩個)和輸出(只允許一個)來生成一個圖形。

     gensurf(fis,inputs,output,grids)   %指定X(第一、水平)和Y(第二、垂直)方向的網格數。如果是二元向量,X和Y方向上的網格可以獨立設置。

     gensurf(fis,inputs,output,grids,refinput)    %用於多於兩個的輸入,refinput向量的長度與輸入相同:

·將對應於要顯示的輸入的refinput項,設置爲NaN;

·對其它輸入的固定值設置爲雙精度實標量。

     [x,y,z]=gensurf(…)   %返回定義輸出曲面的變量並且刪除自動繪圖。

例6-21

>>a = readfis('tipper');

>>gensurf(a)

結果爲圖6-22。

圖6-22

6.2.4 將mamdan型FIS轉換爲Sugeno FIS

函數 mam2sug

格式 sug_fis=mam2sug(mam_fis)

說明 該函數將一個mamdani型FIS結構(不必是單輸出)mam_fis轉化爲一個sugeno型結構sug_fis。返回的sugeno型系統具有常值輸出隸屬度函數。這些常值由原來mamdani型系統的後件的隸屬度函數的面積中心法來確定。前件仍保持不變。

6.2.5 完成模糊推理計算

函數 evalfis

格式 output= evalfis(input,fismat)

       output= evalfis(input,fismat, numPts)

       [output, IRR, ORR, ARR]= evalfis(input,fismat)

[output, IRR, ORR, ARR]= evalfis(input,fismat, numPts)

說明 input:指定輸入值的一個數或一個矩陣,如果輸入是一個M×N矩陣,其中N是輸入變量數,那麼evalfis使用 input的每一行作爲一個輸入向量,並且爲變量output返回M×L矩陣,該矩陣每一行是一個向量並且L是輸出變量數;

fismat:要計算的一個FIS結構;

numPts:一個可選變量,它表示在輸入或輸出範圍內的採樣點數,在這些點上計算隸屬函數,如果 不使用此變量,就使用101點的缺省值。

Evalfis的值域如下:

Output:大小爲ML的輸出矩陣,這裏M表示前面指定的輸入值的數量, L表示FIS的輸出變量數。

evalfis的可選值域變量只有當input是一個行向量時才計算這些可選值域變量是:

IRR:通過隸屬函數計算的輸入變量的結果,這是一個大小爲numRulesN的矩陣,這裏numRules是規則條數,N是輸入變量數。

ORR:通過隸屬函數計算的輸出變量的結果,這是一個大小爲numPtsnumRulesL的矩陣,這裏numRules是規則條數,L是輸出變量數,此矩陣的第一組numRules列,對應於第一個輸出,第二組numRules 對應於第二個輸出,依次類推。

ARR:對每個輸出,在輸出值域中,numPts處採樣合成值的numPtsL矩陣,當只有一個值域變量調用時,該函數使用由結構fismat指定的模糊推理系統,由標量或矩陣inout指定的輸入值計算輸出向量output。

例6-22

>>fismat = readfis('tipper');

>>out = evalfis([2 1; 4 9],fismat)

結果爲

out =

     7.0169

    19.6810

6.2.6 模糊c均值聚類

函數 fcm

格式 [center,U,obj_fcn] = fcm(data,cluster_n)

說明 對給定的數據集應用模糊c均值聚類方法進行聚類

data:要聚類的數據集,每行是一個採樣數據點;

cluster_n:聚類中心的個數(大於1)

center:迭代後得到的聚類中心的矩陣,這裏每行給出聚類中心的座標;

U:得到的所有點對聚類中心的模糊分類矩陣或隸屬度函數矩陣;

Obj_fcn:迭代過程中,目標函數的值;

fcm(data,cluster_n,options)使用可選的變量options控制聚類參數。包括停止準則,和/或設置迭代信息顯示:

options(1):分類矩陣U的指數,缺省值是2.0;

options(2):最大迭代次數,缺省值是100;

options(3):最小改進量,即迭代停止的誤差準則,缺省值是1e-5;

option(4):迭代過程中顯示信息,缺省值是1。

如果任意一項爲NaN,這些選項就使用缺省值;當達到最大迭代次數時,或目標函數兩次連續迭代的改進量小於指定的最小改進量,即滿足停止誤差準則時,聚類過程結束。

例6-23

>>data = rand(100, 2);

 

圖6-23

 

>>[center,U,obj_fcn] = fcm(data, 2);

>>plot(data(:,1), data(:,2),'o');

>>maxU = max(U);

>>index1 = find(U(1,:) == maxU);

>>index2 = find(U(2, :) == maxU);

>>line(data(index1,1), data(index1, 2), 'linestyle', 'none', 'marker', '*', 'color', 'g');

>>line(data(index2,1), data(index2, 2), 'linestyle', 'none', 'marker', '*', 'color', 'r');

結果爲圖6-23。

6.2.7 模糊均值和減法聚類

函數 findcluster

格式 findcluster

   findcluster('file.dat')

說明 findcluster產生一個GUI上的Method下的下拉式標籤,可以實現模糊C均值(fcm)或模糊減法聚類(subtractiv),使用Load Data按鈕輸入數據,剛進入GUI時,對每種方法的選項都設置爲缺省值。

此工具使用多維數據集,但只顯示這些維數中的兩維。使用X-axis和Y-axis下的下拉式標籤選擇你想觀察的數據維。例如你有一個五維數據集,按照出現在數據集中的順序,此工具將數據標記爲data_1,data_2,data_3,data_4,data_5, Start將完成聚類,Save Centre將保存聚類中心。

當使用數據集file.data時,findcluster(file.dat)自動裝入數據集,並且只繪製數據集中的前兩維。產生GUI後,你仍可以選擇要聚類數據的那兩維。

例6-24

>>findcluster('clusterdemo.dat')

結果爲圖6-24。

6.2.8 繪製一個FIS

函數 plotfis

格式 plotfis(fismat)

說明 此函數顯示由fismat指定的一個FIS的高層方框圖,輸入和它們的隸屬函數出現在結構特徵圖的左邊,同時輸出和它們的隸屬函數出現在結構特徵圖的右邊。

例6-25

>>a = readfis('tipper');

>>plotfis(a)

結果爲圖6-25。

  

圖6-24                                   圖6-25

6.2.9 繪製給定變量的所有隸屬的曲線

函數 plotmf

格式 plotmf(fismat,varType,varIndex)

說明 此函數繪製與給定變量相關的稱爲fismat的FIS中的所有隸屬函數曲線,變量的類型和索引分別由varType ('input' 或'output')和varIndex給出。此函數也可以與MATLAB函數subplot一起使用。

例6-26

>>a = readfis('tipper');

>>plotmf(a,'input',1)

結果爲圖6-26。

圖6-26

6.2.10 從磁盤裝入一個FIS

函數 readfis

格式 fismat = readfis('filename')

說明 從磁盤上的一個.fis文件(由filename命名)讀出一個模糊推理系統,並將產生的FIS裝入當前的工作空間中。Fismat = readfis不帶輸入變量,即沒有指定文件名時,使用uigetfile命令打開一個對話框,提示用戶指定文件的名稱和目錄位置。

例6-27

>>fismat = readfis('tipper');

>>getfis(fismat)

返回結果

getfis(fismat)

      Name      = tipper

      Type      = mamdani

      NumInputs = 2

      InLabels =

            service

            food

      NumOutputs = 1

      OutLabels =

            tip

      NumRules = 3

      AndMethod = min

      OrMethod = max

      ImpMethod = min

      AggMethod = max

      DefuzzMethod = centroid

ans =

tipper

6.2.11 從FIS中刪除某一隸屬函數

函數 rmmf

格式 fis = rmmf(fis,'varType',varIndex,'mf',mfIndex)

說明 從與工作空間FIS結構fis相關的模糊推理系統中刪除變量類型爲varType,索引爲varIndex的隸屬函數mfIndex。

字符串vartype必須是'input' 或'output'。

varIndex是表示變量索引的一個整數,此索引表示列出變量的順序;

變量'mf '是表示隸屬函數的一個字符串;

mfIndex是表示隸屬函數索引的一個整數,此索引表示列出隸屬函數的順序。

例6-28

>>a = newfis('mysys');

>>a = addvar(a,'input','temperature',[0 100]);

>>a = addmf(a,'input',1,'cold','trimf',[0 30 60]);

>>getfis(a,'input',1)

返回結果

       Name =     temperature

      NumMFs =   1

      MFLabels =

            cold

      Range =    [0 100]

ans =

     [ ]

>>b = rmmf(a,'input',1,'mf',1);

>>getfis(b,'input',1)

返回

Name =     temperature

      NumMFs =   0

      MFLabels =

      Range =    [0 100]

ans =

     [ ]

6.2.12 從FIS中刪除變量

函數 rmvar

格式 [fis2,errorStr] = rmvar(fis,'varType',varIndex)

fis2 = rmvar(fis,'varType',varIndex)

說明 fis2 = rmvar(fis,'varType',varIndex),)從與工作空間FIS結構fis相關的模糊推理系統中刪除索引爲varIndex的語言變量mfIndex,字符串vartype必須是'input' 或'output'。

varIndex是表示變量索引的一個整數,此索引表示列出變量的順序。

[fis2,errorStr] = rmvar(fis,'varType',varIndex) 將任何錯誤信息返回到字符串errorStr。

此命令自動更新規則列表以保證列表尺寸與當前變量數保持一致,在刪除語言變量之前,你必須從FIS刪除任何包含要刪除變量的規則,你無法刪除在規則列表中正在使用的模糊變量。

例6-29

>>a = newfis('mysys');

>>a = addvar(a,'input','temperature',[0 100]);

>>getfis(a)

返回:

Name      = mysys

      Type      = mamdani

      NumInputs = 1

      InLabels =

            temperature

      NumOutputs = 0

      OutLabels =

      NumRules = 0

      AndMethod = min

      OrMethod = max

      ImpMethod = min

      AggMethod = max

      DefuzzMethod = centroid

ans =

mysys

>>b = rmvar(a,'input',1);

>>getfis(b)

返回:

      Name      = mysys

      Type      = mamdani

      NumInputs = 0

      InLabels =

      NumOutputs = 0

      OutLabels =

      NumRules = 0

      AndMethod = min

      OrMethod = max

      ImpMethod = min

      AggMethod = max

      DefuzzMethod = centroid

ans =

mysys

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章