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