Code covered by the BSD License  

Highlights from
Fuzzy CART

from Fuzzy CART by Konstantin Sidelnikov
Generates fuzzy rules of fuzzy inference system (FIS) using CART algorithm and ANFIS training

setfisx(fis, arg1, arg2, arg3, arg4, arg5, arg6)
function out = setfisx(fis, arg1, arg2, arg3, arg4, arg5, arg6)
%SETFISX Set fuzzy inference system properties.
% 
%   See setfis for syntax and explanation.
% 
%   It is almost clone of MATALAB's setfis
%   with some modifications, so it's compatible 
%   with extendent fuzzy rule structure.
% 
%   Compare also lines 90-97 of this function
%   with lines 97-106 of the original setfis.      

%   Per Konstantin A. Sidelnikov, 2009.

numInputs=length(fis.input);
numOutputs=length(fis.output);

switch nargin 
case 1
   indent=32*ones(1,8);
   fprintf('      Name\n');
   fprintf('      Type\n');
   fprintf('      AndMethod\n');
   fprintf('      OrMethod\n');
   fprintf('      ImpMethod\n');
   fprintf('      AggMethod\n');
   fprintf('      DefuzzMethod\n');
   fprintf('      InMFParams\n');
   fprintf('      OutMFParams\n');
   fprintf('      RuleList\n');
   
case 3
   propName=lower(arg1);
   newVal=arg2;
   
   switch propName
   case 'name'
      fis.name=newVal;
      out=fis;
   case 'type'
      fis.type=newVal;
      out=fis;
   case 'andmethod'
      fis.andMethod=newVal;
      out=fis;
   case 'ormethod'
      fis.orMethod=newVal;
      out=fis;
   case 'impmethod'
      fis.impMethod=newVal;
      out=fis;
   case 'aggmethod'
      fis.aggMethod=newVal;
      out=fis;
   case 'defuzzmethod'
      fis.defuzzMethod=newVal;
      out=fis;
      
   case {'inlabels','outlabels','inmflabels','outmflabels','inrange','outrange','inmftypes','outmftypes'}
      error('You may not set this property directly');
      
   case 'inmfparams'
      for i=1:numInputs
         numInputMFs(i)=length(fis.input(i).mf);
      end
      totalInputMFs=sum(numInputMFs);
      k=1;
      for i=1:numInputs
         for j=1:numInputMFs(i)
            fis.input(i).mf(j).params=newVal(k,:);
            k=k+1;
         end
      end
      out=fis;
      
   case 'outmfparams'
      for i=1:length(fis.output)
         numOutputMFs(i)=length(fis.output(i).mf);
      end
      totalOutputMFs=sum(numOutputMFs);
      k=1;
      for i=1:numOutputs
         for j=1:numOutputMFs(i)
            fis.output(i).mf(j).params=newVal(k,:);
            k=k+1;
         end
      end
      out=fis;
      
   case 'rulelist'      
       newVal = newVal';
       fis.rule = struct( ...
           'antecedent', newVal(1, :), ...
           'consequent', newVal(2, :), ...
           'weight', newVal(3, :), ...
           'connection', newVal(4, :));
       out = fis;
       
   otherwise
      error(['There is no FIS system property called ', propName]);
   end
   
case 5
   % Name assignment
   % ===========================================
   varType=lower(arg1);
   varIndex=arg2;
   varProp=lower(arg3);
   newVal=arg4;
   
   switch varType
   case 'input'
      
      if varIndex>length(fis.input),
         error(['There are not that many input variables.']);
      end
      
      switch varProp
      case 'name'         
         fis.input(varIndex).name=newVal;
         out=fis;     
      case 'range'         
         fis.input(varIndex).range=newVal;
         out=fis;
      case 'nummfs'         
         error('You may not set this property directly');
      case 'mflist'         
         error('You may not set this property directly');
      end
      
   case 'output'
      % Range checking
      if varIndex>length(fis.output),
         error(['There are not that many output variables.']);
      end
      
      switch varProp
      case 'name'         
         fis.output(varIndex).name=newVal;
         out=fis;
      case 'range'           
         fis.output(varIndex).range=newVal;
         out=fis;
      case 'nummfs'         
         error('You may not set this property directly');
      case 'mflist'         
         error('You may not set this property directly');
      end
      
   otherwise
      disp(['Variable type must be either "input" or "output"']);
      
   end
   
   % ===============================================
   % Handle MEMBERSHIP FUNCTIONS
   % ===============================================
case 7
   % Name assignment
   % ===========================================
   varType=lower(arg1);
   varIndex=arg2;
   MFIndex=arg4;
   MFProp=lower(arg5);
   newVal=arg6;
   
   % New value preparation
   % ===========================================
   switch varType
   case 'input'
      
      % Range checking
      % =======================================
      if varIndex>length(fis.input)
         error(['There are not that many input variables.']);
      end
      
      if MFIndex>length(fis.input(varIndex).mf),
         errStr=['There are only ',int2str(length(fis.input(varIndex).mf)), ...
               ' MFs associated with that variable'];
         error(errStr)
      end
      
      switch MFProp
      case 'name'
         fis.input(varIndex).mf(MFIndex).name=newVal;
         out=fis;
      case 'type'
         fis.input(varIndex).mf(MFIndex).type=newVal;
         out=fis;
      case 'params'
         fis.input(varIndex).mf(MFIndex).params=newVal;
         out=fis;
      end
      
   case 'output'
      % Range checking
      % =======================================
      if MFIndex>length(fis.output(varIndex).mf),
         errStr=['There are only ',int2str(length(fis.output(varIndex).mf)), ...
               ' MFs associated with that variable'];
         error(errStr)
      end
      
      switch MFProp
      case 'name'
         fis.output(varIndex).mf(MFIndex).name=newVal;
         out=fis;
      case 'type'
         fis.output(varIndex).mf(MFIndex).type=newVal;
         out=fis;
      case 'params'
         fis.output(varIndex).mf(MFIndex).params=newVal;
         out=fis;
      end
   end
   
end




Contact us