matlab中fuzzy用法示例(根據官網的例子)


文檔給出一個實例,現就該例子做如下解釋:

小費問題

到飯店吃飯,我們給服務員的小費取決於兩方面因素,一是服務態度,用service表示;二是食物好吃與否,用food表示。

我們假定把判斷service和food的好壞分為10個等級,從0到10,10代表最優,那在怎樣的決策下我們能給出最合理的小費金額?

我們先規定三個准則:

1.如果 service poor 或者food rancid(難吃),則小費金額為cheap(廉價的)

2.如果 service good ,無論food如何,小費金額都是average(平均的)

3.如果 service excellent 或者food delicious(超棒),則小費金額為generous(慷慨的)

假定average小費是15%,generous小費是25%,cheap小費是5%。???

img

說明:以上數據取自當地文化傳統(基於經驗),一般是普適的

現在用UI工具構建該模糊系統

fuzzy logic designer

模糊邏輯設計器,會顯示fuzzy inference system的信息。在命令行窗口輸入

fuzzyLogicDesigner

  進入fuzzy logic designer,左邊圖標是系統輸入變量,中間是系統,也就是規則編輯器,右邊是系統輸出變量。此例中,我們的輸入變量是service和food,輸出變量是tip。

img

系統默認只有一個輸入和一個輸出,所以我們首先添加變量

1.Edit --> Add variable --> Input

2.點擊input1黃色方框,在Current Variable框中,將Name改為service,回車,然后用同樣的方法input2output1分別改為foodtip

3.接下來更改控制器名稱,File > Export > To Workspace,改成tipper然后OK

 

Membership Function Editor

隸屬函數編輯器,能顯示輸入與輸出變量之間的關系。

因為我們將服務和食物的好壞分為10個等級,所以設置的函數范圍為[0 10]

1.在fuzzy logic designer中雙擊輸入變量service,彈出Membership Function Editor框,函數范圍和顯示范圍同時設置為[0 10]

2.創建自己的函數,Edit > Remove All MFs,先移除默認函數,Edit > Add MFs,添加自己的,設置MF typegaussmf(高斯函數),Number of MFs設置成3(表示生成3個函數),點擊OK

img

說明:高斯函數

3.給service設置參數值

 點擊mf1,在Current Membership Function (click on MF to select)里設置:name改為poorparams 改為[1.5 0]。params 的兩個輸入參數代表高斯曲線的標准差和均值;點擊mf2name改為good,params 改為[1.5 5];點擊mf3name改為excellentparams 改為1.5 10]。

img

4.給food設置參數值

mf1name設置成rancidparams設置成[0 0 1 3];mf2設置成delicious,根據情況設置參數

5.給tip設置參數

范圍[0 30],雖然輸入范圍是[0 10],但是輸出范圍是5%到25%之間?????

mf1:name->cheap 范圍->[0 5 10] ; mf2:name->average 范圍->[10 15 20] ; mf3:name->generous 范圍->[20 25 30]

img

 

Rule Editor 

img

制定規則,如下:

service設置成poorfood設置成rancidconnection設置成ortip設置成cheapAdd rule,則上面顯示 1. If (service is poor) or (food is rancid) then (tip is cheap) (1)

接下來用相同的方式插入第二和第三條規則

If (service is good) then (tip is average) (1)

If (service is excellent) or (food is delicious) then (tip is generous) (1)

至此,模糊推理系統已經全部定義,接下來我們可以查看模糊推理圖

視圖->規則

img

可以看出,當service和food都是中等,則給的tip也在中間區域。注意第二行的food沒有曲線,這是因為我們的規則指定food是none,所以只要service是中等,無論food如何,都應該給中等的小費。

我們可以左右滑動service和food圖形的紅色直線,來組成不同的條件,從而觀察tip的變化情況。或者在input框手動指定service和food的值,例如[5 6],service指定成5,food指定成

第三列中第四個圖表示綜合決策,該值取決於輸入情況和規則。

Service Viewer

rule viewer中,view->surface,打開service viewer,該三維曲線代表foodservicetip的映射。

img

 


免責聲明!

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



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