Fuzzy Logic Tools  v1.0.5.1
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros Pages
membership.hpp
Go to the documentation of this file.
1 /* Copyright (C) 2004-2015
2  ANTONIO JAVIER BARRAGAN, antonio.barragan@diesia.uhu.es
3  http://uhu.es/antonio.barragan
4 
5  Collaborators:
6  JOSE MANUEL ANDUJAR, andujar@diesia.uhu.es
7 
8  DPTO. DE ING. ELECTRONICA, DE SISTEMAS INFORMATICOS Y AUTOMATICA
9  ETSI, UNIVERSITY OF HUELVA (SPAIN)
10 
11  For more information, please contact with authors.
12 
13  This software is free software: you can redistribute it and/or modify
14  it under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  This software is distributed in the hope that it will be useful,
19  but WITHOUT ANY WARRANTY; without even the implied warranty of
20  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  GNU General Public License for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with this program. If not, see <http://www.gnu.org/licenses/>.
25 */
26 
27 #ifndef _MEMBERSHIP_HPP_
28 #define _MEMBERSHIP_HPP_
29 
37 #include <math.h>
38 
39 #include <tnt/tnt_array1d.h> // Template Numerical Toolkit, http://math.nist.gov/tnt
40 #include <tnt/tnt_array2d.h>
41 
42 #include <flt/messages.h>
43 
44 namespace FLT // Use the FTL (Fuzzy Logic Tools) namespace
45 {
46  #define M_EPS 1e-16
47  #define MAX_SIZE_TYPE_NAME 16
48 
49 
55  inline int sign(double x)
56  {
57  if (x > 0.0)
58  return 1;
59  else if (x < 0.0)
60  return -1;
61  else
62  return 0;
63  }
64 
117  enum TYPE_MF // Implemented Membership functions
118  {
119  ANYMF = 0,
132  };
133 
140  static const char *MF_NAMES[]=
141  {// Names of TYPE_MF Membership Functions - UPPERCASE
142  "ANYMF",
143  "CONSTMF",
144  "GAUSSMF",
145  "GAUSS2MF",
146  "GBELLMF",
147  "PIMF",
148  "PSIGMF",
149  "SMF",
150  "SIGMF",
151  "SIG2MF",
152  "TRAPMF",
153  "TRIMF",
154  "ZMF"
155  };
156 
166  static const size_t MF_PARAM_NUMBER[] =
167  {
168  0, // \var ANYMF
169  1, // CONSTMF
170  2, // GAUSSMF
171  4, // GAUSS2MF
172  3, // GBELLMF
173  4, // PIMF
174  4, // PSIGMF
175  2, // SMF
176  2, // SIGMF
177  4, // SIG2MF
178  4, // TRAPMF
179  3, // TRIMF
180  2 // ZMF
181  };
182 
183  // Declarations ################################################################
184 
198  class Membership // -Parent class-
199  {
200  protected:
201  double *param;
202  size_t n;
204  public:
210  virtual double eval(double x) const = 0;
211 
217  virtual double evalder(double x) const = 0;
218 
224  virtual double paramder(size_t parameter,
225  double x) const = 0;
226 
232  virtual int test(void) const;
233 
240  size_t num_params(void) const;
241 
247  TYPE_MF type(void) const;
248 
258  int type(TYPE_MF type_mf);
259 
269  int edit(size_t index,
270  double value);
271 
278  void edit(const double* const parameters);
279 
286  double read(size_t index) const;
287 
291  TNT::Array1D<double> read(void) const;
292 
293  Membership &operator=(const Membership &P);
294  Membership(const Membership &P);
295  Membership();
296  ~Membership();
297 };
298 
306 
307  // Anymf ########################################################################
318  class Anymf:public Membership // This Membership function don't exist in MATLAB©.
319  { // This type is used to initializate Rules
320  public:
321  double eval(double x) const;
322  double evalder(double x) const;
323  double paramder(size_t parameter,
324  double x) const;
325  Anymf(void);
326  };
327 
328  // Constmf ######################################################################
337  class Constmf:public Membership // This Membership function don't exist in MATLAB© by default. It is 'constmf.m'
338  {
339  public:
340  double eval(double x) const;
341  double evalder(double x) const;
342  double paramder(size_t parameter,
343  double x) const;
344  Constmf(double c = 1.0);
345  };
346 
347  // Gaussmf #####################################################################
355  class Gaussmf:public Membership // In MATLAB© is 'gaussmf'
356  {
357  public:
358  double eval(double x) const;
359  double evalder(double x) const;
360  double paramder(size_t parameter,
361  double x) const;
362  int test(void) const; // If the parameters of the Membership function are valid returns 0
363  Gaussmf(double Center = 0.5,
364  double Beta = 0.3); // Sigma_MATLAB = Beta/sqrt(2);
365  };
366 
367  // Gauss2mf ####################################################################
389  class Gauss2mf:public Membership // In MATLAB© is 'gauss2mf'
390  {
391  public:
392  double eval(double x) const;
393  double evalder(double x) const;
394  double paramder(size_t parameter,
395  double x) const;
396  int test(void) const; // Modify the parameters to be correct
397  Gauss2mf(double Center1 = 0.45,
398  double Beta1 = 0.25,
399  double Center2 = 0.55,
400  double Beta2 = 0.25); // Sigma_MATLAB = Beta/sqrt(2);
401  };
402 
403  // GBellmf ######################################################################
411  class GBellmf:public Membership // In MATLAB© is 'gbellmf'
412  {
413  public:
414  double eval(double x) const;
415  double evalder(double x) const;
416  double paramder(size_t parameter,
417  double x) const;
418  int test(void) const; // Modify the parameters to be correct
419  GBellmf(double a = 0.25,
420  double b = 2.5,
421  double c = 0.5);
422  };
423 
424  // Pimf ########################################################################
433  class Pimf:public Membership // In MATLAB© is 'pimf'
434  {
435  public:
436  double eval(double x) const;
437  double evalder(double x) const;
438  double paramder(size_t parameter,
439  double x) const;
440  Pimf(double a = 0.05,
441  double b = 0.45,
442  double c = 0.55,
443  double d = 0.95);
444  };
445 
446  // PSigmf ################################################################
454  class PSigmf:public Membership // In MATLAB© is 'psigmf'
455  {
456  public:
457  double eval(double x) const;
458  double evalder(double x) const;
459  double paramder(size_t parameter,
460  double x) const;
461  PSigmf(double a1 = 11,
462  double c1 = 0.25,
463  double a2 = -11,
464  double c2 = 0.75);
465  };
466 
467  // Smf #########################################################################
488  class Smf:public Membership // In MATLAB© is 'smf'
489  {
490  public:
491  double eval(double x) const;
492  double evalder(double x) const;
493  double paramder(size_t parameter,
494  double x) const;
495  Smf(double a = 0.05,
496  double b = 0.45);
497  };
498 
499  // Sigmf #################################################################
507  class Sigmf:public Membership // In MATLAB© is 'sigmf'
508  {
509  public:
510  double eval(double x) const;
511  double evalder(double x) const;
512  double paramder(size_t parameter,
513  double x) const;
514  Sigmf(double a = 14,
515  double c = 0.25);
516  };
517 
518  // Sig2mf ################################################################
527  class Sig2mf:public Membership // In MATLAB© is 'dsigmf'
528  {
529  public:
530  double eval(double x) const;
531  double evalder(double x) const;
532  double paramder(size_t parameter,
533  double x) const;
534  Sig2mf(double a1 = 11,
535  double c1 = 0.25,
536  double a2 = 11,
537  double c2 = 0.75);
538  };
539 
540  // Trapmf ###############################################################
562  class Trapmf:public Membership // In MATLAB© is 'trapmf'
563  {
564  public:
565  double eval(double x) const;
566  double evalder(double x) const;
567  double paramder(size_t parameter,
568  double x) const;
569  int test(void) const; // Modify the parameters to be correct
570  Trapmf(double a = 0.05,
571  double b = 0.45,
572  double c = 0.55,
573  double d = 0.95);
574  };
575 
576  // Trimf ################################################################
597  class Trimf:public Membership // In MATLAB© is 'trimf'
598  {
599  public:
600  double eval(double x) const;
601  double evalder(double x) const;
602  double paramder(size_t parameter,
603  double x) const;
604  int test(void) const; // Modify the parameters to be correct
605  Trimf(double a = 0.0,
606  double b = 0.5,
607  double c = 1.0);
608  };
609 
610  // Zmf #########################################################################
631  class Zmf:public Membership // In MATLAB© is 'zmf'
632  {
633  public:
634  double eval(double x) const;
635  double evalder(double x) const;
636  double paramder(size_t parameter,
637  double x) const;
638  Zmf(double a = 0.55,
639  double b = 0.95);
640  };
641 
642 } // FLT namespace
643 
644 #endif
static const size_t MF_PARAM_NUMBER[]
Initial number of parameters of each Membership function in FLT::TYPE_MF.
Definition: membership.hpp:166
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:128
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:391
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:223
TYPE_MF
Enumeration with the implemented Membership functions.
Definition: membership.hpp:117
Gaussian Membership function.
Definition: membership.hpp:355
virtual double eval(double x) const =0
Evaluates the Membership function.
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:123
virtual double evalder(double x) const =0
Evaluates the derivative of the Membership function with respect to x, .
Defines output messages (informational messages, warnings, errors, ...).
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:186
virtual int test(void) const
This function checks parameters in the Membership function, and corrects them if possible.
Definition: membership.cpp:11
Trapezoidal Membership function.
Definition: membership.hpp:562
int test(void) const
This function checks parameters in the Membership function, and corrects them if possible.
Definition: membership.cpp:764
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:181
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:597
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:442
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:791
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:477
int test(void) const
This function checks parameters in the Membership function, and corrects them if possible.
Definition: membership.cpp:372
Constant Membership function.
Definition: membership.hpp:337
Bell Membership function.
Definition: membership.hpp:411
Fuzzy Logic Tools (FLT) namespace.
Definition: derivatives.hpp:41
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:407
int sign(double x)
Implementation of the sign function.
Definition: membership.hpp:55
Definition: membership.hpp:122
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:491
Definition: membership.hpp:123
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:157
Double gaussian Membership function.
Definition: membership.hpp:389
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:351
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:713
Definition: membership.hpp:119
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:621
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:152
Definition: membership.hpp:127
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:590
TNT::Array1D< double > read(void) const
Returns the vector of parameters.
Definition: membership.cpp:65
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:284
Product of sigmoidals Membership function.
Definition: membership.hpp:454
static const char * MF_NAMES[]
Names of the Membership functions.
Definition: membership.hpp:140
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:561
Definition: membership.hpp:126
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:434
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:450
Definition: membership.hpp:130
Membership * createMF(TYPE_MF t)
Virtual constructor for Membership functions.
Definition: membership.cpp:865
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:583
Definition: membership.hpp:120
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:633
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:551
int edit(size_t index, double value)
Changes a parameter.
Definition: membership.cpp:44
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:246
Sigmoidal Membership function.
Definition: membership.hpp:507
Pi (S-Z) Membership function.
Definition: membership.hpp:433
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:815
int test(void) const
This function checks parameters in the Membership function, and corrects them if possible.
Definition: membership.cpp:312
Any Membership function.
Definition: membership.hpp:318
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:175
size_t n
Number of parameters of the Membership function.
Definition: membership.hpp:202
TYPE_MF type_mf
Type of Membership function.
Definition: membership.hpp:203
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:729
size_t num_params(void) const
Reads the number of parameters that define the Membership function.
Definition: membership.cpp:16
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:556
This class contains methods and attributes common to all Membership functions.
Definition: membership.hpp:198
TYPE_MF type(void) const
Returns the type of Membership function.
Definition: membership.cpp:21
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:647
double * param
Vector of parameters that define the Membership function.
Definition: membership.hpp:201
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:133
Definition: membership.hpp:124
Triangular Membership function.
Definition: membership.hpp:597
int test(void) const
This function checks parameters in the Membership function, and corrects them if possible.
Definition: membership.cpp:198
virtual double paramder(size_t parameter, double x) const =0
Evaluates the derivative of the Membership function with respect to a parameter, .
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:399
Definition: membership.hpp:129
Definition: membership.hpp:121
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:703
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:356
Definition: membership.hpp:125
Definition: membership.hpp:131
double paramder(size_t parameter, double x) const
Evaluates the derivative of the Membership function with respect to a parameter, .
Definition: membership.cpp:501
Difference of sigmoidals Membership function.
Definition: membership.hpp:527
double evalder(double x) const
Evaluates the derivative of the Membership function with respect to x, .
Definition: membership.cpp:805
int test(void) const
This function checks parameters in the Membership function, and corrects them if possible.
Definition: membership.cpp:675
Definition: membership.hpp:128
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:147
S Membership function.
Definition: membership.hpp:488
Z Membership function.
Definition: membership.hpp:631
double eval(double x) const
Evaluates the Membership function.
Definition: membership.cpp:346