文檔給出一個實例,現就該例子做如下解釋:
小費問題
到飯店吃飯,我們給服務員的小費取決於兩方面因素,一是服務態度,用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%。???
說明:以上數據取自當地文化傳統(基於經驗),一般是普適的
現在用UI工具構建該模糊系統
fuzzy logic designer
模糊邏輯設計器,會顯示fuzzy inference system的信息。在命令行窗口輸入
fuzzyLogicDesigner
進入fuzzy logic designer,左邊圖標是系統輸入變量,中間是系統,也就是規則編輯器,右邊是系統輸出變量。此例中,我們的輸入變量是service和food,輸出變量是tip。
系統默認只有一個輸入和一個輸出,所以我們首先添加變量
Membership Function Editor
隸屬函數編輯器,能顯示輸入與輸出變量之間的關系。
因為我們將服務和食物的好壞分為10個等級,所以設置的函數范圍為[0 10]
1.在fuzzy logic designer中雙擊輸入變量service,彈出Membership Function Editor框,函數范圍和顯示范圍同時設置為[0 10]
2.創建自己的函數,
3.給service設置參數值
點擊mf1,在Current Membership Function (click on MF to select)框里設置:name改為poor,params 改為[1.5 0]。params 的兩個輸入參數代表高斯曲線的標准差和均值;點擊mf2,name改為good,params 改為[1.5 5];點擊mf3,name改為excellent,params 改為1.5 10]。
4.給food設置參數值
mf1的name設置成rancid,params設置成[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]
Rule Editor
制定規則,如下:
service設置成poor,food設置成rancid,connection設置成or,tip設置成cheap,Add rule,則上面顯示 1. If (service is poor) or (food is rancid) then (tip is cheap) (1)
接下來用相同的方式插入第二和第三條規則
If (service is good) then (tip is average) (1)
至此,模糊推理系統已經全部定義,接下來我們可以查看模糊推理圖
視圖->規則
可以看出,當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,該三維曲線代表food和service到tip的映射。