# how to reduce fuzzy rules generated by mamdani fis

4 views (last 30 days)
srinija kammari on 20 Mar 2018
Answered: Sam Chak on 19 Sep 2022
hi everyone.. i have developed a fuzzy system with 8 inputs and one output.i have generated almost 1000 rules using mamdani inference system.now i want to reducc/tune the rules.is it possible using optimizing rules with genetic algorithm? anykind of help will be appreciated...

Sam Chak on 19 Sep 2022
With almost a thousand rules for 8 inputs, I guess there are 6 inputs with 2 fuzzy sets, 1 input with 3 fuzzy sets, and another input with 5 fuzzy sets:
numRules = (2^6)*(3^1)*(5^1)
numRules = 960
This effect is called the curse of dimensionality, where the number of rules increases exponentially with the dimension of the input space. If there are 2 fuzzy sets for each of the 8 inputs, the number of Rules in the Grid partitioning-based fuzzy inference system is
numRules = 2^8
numRules = 256
This number is still considered "a lot of Rules" for humans to determine the Rule output level and to assign proper logic manually one-by-one. If the system is designed by an Expert with extensive knowledge on the process, then the most direct way to reduce the number of rules is to cut down the number of non-essential inputs.
If this is data-driven modeling, then the "SubtractiveClustering" and "FCMClustering" methods can be employed to derive the rules from data clusters found using one of the clustering methods.
help genfisOptions
GENFISOPTIONS Creates options for GENFIS function. GENFISOPTIONS(clusteringType) Creates default option values for the specified clusteringType to be used by the GENFIS function. You can specify one of the three clustering types: 'GridPartition', 'SubtractiveClustering' and 'FCMClustering'. GENFISOPTIONS(clusteringType,name1,value1, ...) Creates options with the user-provided parameter name/value pairs for the specified clusteringType. You can specify the following name/value pairs for 'GridPartition': 'NumMembershipFunctions' is the number of membership functions per input used in the FIS returned by GENFIS. When provided as a scalar value, it specifies the same number for all inputs and when provided as a vector, it specifies separate numbers for each input. NumMembershipFunctions must be specified using a non-empty numeric vector of finite integer values greater than 1. 'InputMembershipFunctionType' specifies the types of input membership functions used in the FIS returned by GENFIS. When provided a single type, InputMembershipFunctionType specifies the same type for all inputs and when provided multiple types, it specifies separate types for each inputs. The default value of InputMembershipFunctionType is set to 'gbellmf'. InputMembershipFunctionType must be a character vector or string scalar when specifying the same type for all inputs and a character/string array when specifying separate types for each inputs. 'OutputMembershipFunctionType' specifies the type of output membership functions used in the FIS returned by GENFIS. The default value of OutputMembershipFunctionType is set to 'linear'. OutputMembershipFunctionType must be specified using a non-empty character row vector or a string scalar having non-empty character contents. The value of OutputMembershipFunctionType can be either 'linear' or 'constant'. You can specify the following name/value pairs for 'SubtractiveClustering': 'ClusterInfluenceRange' specifies the range (radius) of influence of the cluster center for each input and output dimension, assuming the data falls within a unit hyperbox (range [0 1]). Specifying a smaller cluster radius will usually yield more, smaller clusters in the data, and hence more rules. When ClusterInfluenceRange is a scalar it is applied to all input and output dimensions. When ClusterInfluenceRange is a vector, it specifies a separate range of influence for each input and output dimension. The default value of ClusterInfluenceRange is set to 0.5. ClusterInfluenceRange must be specified using a non-empty numeric scalar/vector having positive real value(s) less than or equal to 1. 'DataScale' specifies a matrix used to normalize the input and output data to be clustered into a unit hyperbox (range [0 1]). The size of DataScale is 2-by-N, where N is the total number of inputs and outputs. Each column of DataScale provides the minimum value in the first row and the maximum value in the second row for the corresponding input or output data set. The default value of DataScale is set to empty, which is further updated in GENFIS using the minimum and maximum data values found in input and output data. DataScale must be specified 'auto' or a numeric array having finite real values. The number of rows of InputScal must be 2. 'SquashFactor' is used to multiply ClusterInfluenceRange values that determine the neighborhood of a cluster center, so as to squash the potential for outlying points to be considered as part of that cluster. The default value of ClusterInfluenceRange is set to 1.25. SquashFactor must be specified using a non-empty numeric scalar having a finite positive real value. 'AcceptRatio' sets the potential, as a fraction of the potential of the first cluster center, above which another data point is accepted as a cluster center. The default value of AcceptRatio is set to 0.5. AcceptRatio must be specified using a real value in [0 1]. 'RejectRatio' sets the potential, as a fraction of the potential of the first cluster center, below which a data point is rejected as a cluster center. The default value of RejectRatio is set to 0.15. RejectRatio must be less than AcceptRatio and specified as a real value in [0 1]. 'Verbose' is a logical flag that specifies if the progress information is printed as the clustering process proceeds. The default value of Verbose is set to false. Verbose must be specified using a logical value true (1) or false (0). 'CustomClusterCenters' specifies the user-supplied cluster centers. CustomClusterCenters has size J-by-N where J is the number of clusters and N is the total number of inputs and outputs. The default value of CustomClusterCenters is set to empty. CustomClusterCenters must be specified using a 2D numeric array having finite real values. You can specify the following name/value pairs for 'FCMClustering': 'FISType' specifies the type of FIS to be retuned by the GENFIS function. It can take one of two values, 'mamdani' or 'sugeno'. The default value of FISType is set to 'sugeno'. FISType must be specified using a character row vector or a string scalar having non-empty character contents. 'NumClusters' specifies the number of clusters to be generated by FCM. NumClusters determines the number of rules and membership functions in the FIS generated by the GENFIS function. The default value of NumClusters is set to 'auto' in which case GENFIS function uses SUBCLUST algorithm with a radius of 0.5 to initialize the number of clusters. NumClusters must be set to 'auto' or a finite positive integer value. 'Exponent' specifies an exponent of a the fuzzy partition matrix, which controls the amount of fuzzy overlap between clusters, with larger values indicating a greater degree of overlap. If your data set is wide with a lot of overlap between potential clusters, then the calculated cluster centers might be very close to each other. In this case, each data point has approximately the same degree of membership in all clusters. To improve your clustering results, decrease this value, which limits the amount of fuzzy overlap during clustering. The default value of Exponent is set t0 2. Exponent must be specified as a nonempty finite real value, which is greater than 1. 'MaxNumIteration' indicates the maximum number of iterations used for clustering the user-specified data. The default value of MaxNumIteration is set to 100. MaxNumIteration must be specified as a nonempty positive finite integer value. 'MinImprovement' specifies the minimum improvement in an objective function between two consecutive iterations. The default value of MinImprovement is set to 1e-5. MinImprovement must be specified as a nonempty positive finite real value. 'Verbose' indicates a boolean flag whether to display the objective function value after each iteration, specified as true (1) or false (0). Example: Xin = [rand(10,1) 10*rand(10,1)-5]; Xout = rand(10,1); options = genfisOptions('GridPartition'); options.NumMembershipFunctions = 5; fis = genfis(Xin,Xout,options); See also genfis, subclust, fcm Documentation for genfisOptions doc genfisOptions