文档给出一个实例,现就该例子做如下解释:
小费问题
到饭店吃饭,我们给服务员的小费取决于两方面因素,一是服务态度,用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的映射。