Fuzzy Logic Toolbox | ![]() ![]() |
Building a System from Scratch
It is possible to use the Fuzzy Logic Toolbox without bothering with the GUI tools at all. For instance, to build the tipping system entirely from the command line, you would use the commands newfis, addvar, addmf, and addrule.
Probably the trickiest part of this process is learning the shorthand that the fuzzy inference systems use for building rules. This is accomplished using the command line function, addrule
.
Each variable, input, or output, has an index number, and each membership function has an index number. The rules are built from statements like this.
This rule is turned into a structure according to the following logic. If there are m inputs to a system and n outputs, then the first m vector entries of the rule structure correspond to inputs 1 through m. The entry in column 1 is the index number for the membership function associated with input 1. The entry in column 2 is the index number for the membership function associated with input 2, and so on. The next n columns work the same way for the outputs. Column m + n + 1 is the weight associated with that rule (typically 1) and column m + n + 2 specifies the connective used (where AND = 1 and OR = 2). The structure associated with the rule shown above is
Here is one way you can build the entire tipping system from the command line, using the MATLAB structure syntax.
a=newfis('tipper'); a.input(1).name='service'; a.input(1).range=[0 10]; a.input(1).mf(1).name='poor'; a.input(1).mf(1).type='gaussmf'; a.input(1).mf(1).params=[1.5 0]; a.input(1).mf(2).name='good'; a.input(1).mf(2).type='gaussmf'; a.input(1).mf(2).params=[1.5 5]; a.input(1).mf(3).name='excellent'; a.input(1).mf(3).type='gaussmf'; a.input(1).mf(3).params=[1.5 10]; a.input(2).name='food'; a.input(2).range=[0 10]; a.input(2).mf(1).name='rancid'; a.input(2).mf(1).type='trapmf'; a.input(2).mf(1).params=[-2 0 1 3]; a.input(2).mf(2).name='delicious'; a.input(2).mf(2).type='trapmf'; a.input(2).mf(2).params=[7 9 10 12]; a.output(1).name='tip'; a.output(1).range=[0 30]; a.output(1).mf(1).name='cheap' a.output(1).mf(1).type='trimf'; a.output(1).mf(1).params=[0 5 10]; a.output(1).mf(2).name='average'; a.output(1).mf(2).type='trimf'; a.output(1).mf(2).params=[10 15 20]; a.output(1).mf(3).name='generous'; a.output(1).mf(3).type='trimf'; a.output(1).mf(3).params=[20 25 30]; a.rule(1).antecedent=[1 1]; a.rule(1).consequent=[1]; a.rule(1).weight=1; a.rule(1).connection=2; a.rule(2).antecedent=[2 0]; a.rule(2).consequent=[2]; a.rule(2).weight=1; a.rule(2).connection=1; a.rule(3).antecedent=[3 2]; a.rule(3).consequent=[3]; a.rule(3).weight=1; a.rule(3).connection=2
Alternatively, here is how you can build the entire tipping system from the command line using Fuzzy Logic Toolbox commands.
a=newfis('tipper'); a=addmf(a,'input',1,'service',[0 10]); a=addmf(a,'input',1,'poor','gaussmf',[1.5 0]); a=addmf(a,'input',1,'good','gaussmf',[1.5 5]); a=addmf(a,'input',1,'excellent','gaussmf',[1.5 10]); a=addvar(a,'input','food',[0 10]); a=addmf(a,'input',2,'rancid','trapmf',[-2 0 1 3]); a=addmf(a,'input',2,'delicious','trapmf',[7 9 10 12]); a=addvar(a,'output','tip',[0 30]); a=addmf(a,'output',1,'cheap','trimf',[0 5 10]); a=addmf(a,'output',1,'average','trimf',[10 15 20]); a=addmf(a,'output',1,'generous','trimf',[20 25 30]); ruleList=[ ... 1 1 1 1 2 2 0 2 1 1 3 2 3 1 2 ]; a=addrule(a,ruleList);
![]() | System Display Functions | FIS Evaluation | ![]() |