Code is written with pieces that are considered as bad code smells. Presence of any bad code smell can disturb normal code maintainability. It is important to recognize the concept of bad smells as a particular compromise between the vague programming aesthetics and the precise source code metrics. 3 Application of Fuzzy Logic to Code. The following Matlab project contains the source code and Matlab examples used for a fuzzy logic based trend impact analysis method. All Trend Impact Analysis (TIA) algorithms in literature conduct the analysis based on direct estimates provided by experts for the probability of occurrence of an unprecedented event as an input to the algorithm.
A Fuzzy Logic Control Library in C++
By: Juan Rada-Vilela, Ph.D.
Released: 20/March/2017
Table of Contents
License
Introduction
Features
Example
Compile, Link, and Execute
Bulding from Source
Binaries
What's new
What's next
License
fuzzylite 6.0
is licensed under the GNU General Public License (GPL) 3.0. You are strongly encouraged to support the development of the FuzzyLite Libraries by purchasing a license of QtFuzzyLite 6
.
QtFuzzyLite 6
is the new and (very likely) the best graphical user interface available to easily design and directly operate fuzzy logic controllers in real time. Available for Windows, Mac, and Linux, its goal is to significantly speed up the design of your fuzzy logic controllers, while providing a very useful, functional and beautiful user interface. Please, download it and check it out for free at www.fuzzylite.com/downloads/.
Introduction
fuzzylite
is a free and open-source fuzzy logic control library programmed in C++ for multiple platforms (e.g., Windows, Linux, Mac, iOS). jfuzzylite
is the equivalent library for Java and Android platforms. Together, they are the FuzzyLite Libraries for Fuzzy Logic Control.
Reference
If you are using the FuzzyLite Libraries, please cite the following reference in your article:
Juan Rada-Vilela. fuzzylite: a fuzzy logic control library, 2017. URL http://www.fuzzylite.com/.
Documentation
The documentation for the fuzzylite
library is available at: www.fuzzylite.com/documentation/.
Features
**(6) Controllers**: Mamdani, Takagi-Sugeno, Larsen, Tsukamoto, Inverse Tsukamoto, Hybrids
**(21) Linguistic terms**: (4) Basic: triangle, trapezoid, rectangle, discrete. (9) Extended: bell, cosine, gaussian, gaussian product, pi-shape, sigmoid difference, sigmoid product, spike. (5) Edges: binary, concave, ramp, sigmoid, s-shape, z-shape. (3) Functions: constant, linear, function.
**(7) Activation methods**: general, proportional, threshold, first, last, lowest, highest.
**(8) Conjunction and Implication (T-Norms)**: minimum, algebraic product, bounded difference, drastic product, einstein product, hamacher product, nilpotent minimum, function.
**(10) Disjunction and Aggregation (S-Norms)**: maximum, algebraic sum, bounded sum, drastic sum, einstein sum, hamacher sum, nilpotent maximum, normalized sum, unbounded sum, function.
**(7) Defuzzifiers**: (5) Integral: centroid, bisector, smallest of maximum, largest of maximum, mean of maximum. (2) Weighted: weighted average, weighted sum.
**(7) Hedges**: any, not, extremely, seldom, somewhat, very, function.
**(3) Importers**: FuzzyLite Language fll
, Fuzzy Inference System fis
, Fuzzy Control Language fcl
.
**(7) Exporters**: C++
, Java
, FuzzyLite Language fll
, FuzzyLite Dataset fld
, R
script, Fuzzy Inference System fis
, Fuzzy Control Language fcl
.
**(30+) Examples** of Mamdani, Takagi-Sugeno, Tsukamoto, and Hybrid controllers from fuzzylite
, Octave, and Matlab, each included in the following formats: C++
, Java
, fll
, fld
, R
, fis
, and fcl
.
Example
#### FuzzyLite Language
Fuzzy Logic Example
Source Code Fuzzy Logic Arduino Programming
#### C++
Compile, Link, and Execute
Once you have an engine written in C++, you can compile it to create an executable file which links to the fuzzylite
library. The linking can be either static or dynamic. Basically, the differences between static and dynamic linking are the following. Static linking includes the fuzzylite
library into your executable file, hence increasing its size, but the executable no longer needs to have access to the fuzzylite
library files. Dynamic linking does not include the fuzzylite
library into your executable file, hence reducing its size, but the executable needs to have access to the fuzzylite
shared library file. When using dynamic linking, make sure that the shared library files are either in the same directory as the executable, or are reachable via environmental variables:
Windows
The commands to compile your engine in Windows are the following:
C++11 (default)
C++98
Unix
The commands to compile your engine in Unix are the following:
C++11 (default)
C++98
CMake
Alternatively, you can use CMake to build your project linking to fuzzylite
. Please, refer to the example application available at examples/application.
Building from Source
You can build the fuzzylite
library from source using CMake
(cmake.org).
The files fuzzylite/build.bat
and fuzzylite/build.sh
are build scripts for the Windows and Unix platforms, respectively. After building from source, the resulting binaries will be located in the sub-folders fuzzylite/release/bin
and fuzzylite/debug/bin
. The usage of these scripts is presented as follows.
#### Windows
#### Unix
Building Options
For advanced building options, please check the contents of fuzzylite/build.bat
or fuzzylite/build.sh
, and the contents of fuzzylite/CMakeLists.txt
.
The following building options available:
-DFL_USE_FLOAT=ON
builds the binaries utilizing thefl::scalar
data type as afloat
represented in 4 bytes. By default, the binaries are built utilizing-DFL_USE_FLOAT=OFF
to utilizefl::scalar
as adouble
represented in 8 bytes and hence providing better accuracy. Iffuzzylite
is built with-DFL_USE_FLOAT=ON
, then the applications linking tofuzzylite
also need to specify this compilation flag.-DFL_CPP98=ON
builds binaries utilizingC++98
features. By default,fuzzylite
is built with-DFL_CPP98=OFF
to utilizeC++11
features. If compiling forC++98
, be aware that you will not be able to benchmark the performance of your engine using theBenchmark
class.-DFL_BACKTRACE=OFF
disables the backtrace information in case of errors (default is ON). In Windows, the backtrace information requires the external librarydbghelp
, which is generally available in your system.-DCMAKE_BUILD_TYPE=[Debug|Release]
sets the mode of your build. You can only build one mode at a time with a single CMake script.
Documentation
The source code of fuzzylite
is very well documented using doxygen
formatting, and the documentation is available at fuzzylite.com/documentation. If you want to generate the documentation locally, you can produce the html
documentation from the file Doxyfile using the command line: doxygen Doxyfile
. The documentation will be created in the documentation
folder.
Binaries
After building from source, the following are the relevant binaries that will be created in Release
mode. In Debug
mode, the file names end with -debug
(e.g., fuzzylite-debug.exe
).
Windows
- console application:
fuzzylite.exe
- shared library:
fuzzylite.dll
,fuzzylite.lib
- static library:
fuzzylite-static.lib
Linux
- console application:
fuzzylite
- shared library:
libfuzzylite.so
- static library:
libfuzzylite-static.a
Mac
- console application:
fuzzylite
- shared library:
libfuzzylite.dylib
- static library:
libfuzzylite-static.a
Console
The console application of fuzzylite
allows you to import and export your engines. Its usage can be obtained executing the console binary. In addition, the console can be set in interactive mode. The FuzzyLite Interactive Console
allows you to evaluate a given controller by manually providing the input values. The interactive console is triggered by specifying an input file and an output format. For example, to interact with the ObstacleAvoidance
controller, the interactive console is launched as follows:
What's New?
- The FuzzyLite Libraries, namely fuzzylite and jfuzzylite, both in version 6.0, are dual licensed under the GNU General Public License version 3 and the Apache License version 2.
- By default, fuzzylite builds using C++11 instead of C++98.
- Important performance improvements.
- Refactored the following names for the operation of engines: from activation operator to implication operator, from accumulation operator to aggregation operator.
- Renamed the term
Accumulated
toAggregated
. - New activation methods decouple the activation of rules from the rule block and provide different methods for activating rules (see Activation Methods).
- New class
ActivationFactory
provides a factory of activation methods. - New class
Benchmark
to evaluate the performance and accuracy of engines. - New class
Complexity
to estimate the computational complexity of an engine. - New class
RScriptExporter
to export the surfaces of an engine using theggplot2
library. - New class
Binary
term for binary edges. - New
UnboundedSum
S-Norm inSNormFactory
. - New classes
SNormFunction
andTNormFunction
to create custom functions on any two values using theFunction
class. - Added description strings to
Engine
,Variable
andRuleBlock
- Privatized previously protected members of classes and subclasses of
Term
,Variable
,Rule
,Defuzzifier
,[Cloning|Construction]Factory
,Importer
,Exporter
, amongst others. - Improved portability by replacing
int
forstd::size_t
where necessary, thereby additionally removing warnings in Windows 64bit - Deleted
Operation.cpp
and inlined its methods intoOperation.h
- Updated
.travis.yml
to use Docker, and build using g++ (versions 6, 5, 4.9, 4.8, 4.7) and clang (versions 3.8, 3.7, 3.6, and 3.5). - Added
appveyor.yml
to use continuous integration in Windows under Visual Studio 2013 and 2015. - Added some unit tests and support for future unit tests.
- Bug fixes.
- New example of hybrid engines.
- New example on obstacle avoidance for Mamdani, Takagi-Sugeno, and Hybrid engines.
- New R scripts for each example and its respective surfaces in
pdf
formats.
Bug fixes
- Fixed bug in
CloningFactory::deregisterObject()
. Bug: Object was deleted before removing it from the map, leaving an invalid object in the map which would cause a segmentation fault. Solution: Remove the object from the map before deleting it. - Fixed bug causing segmentation fault when malformed term in FuzzyLite Language
- Fixed bug computing the
NormalizedSum
S-Norm. - Fixed bug in
RuleBlock
to reset and clone the implication operator. Bug: implication operator is not copied and reset. Fix: copy and reset implication operator when cloning theRuleBlock
. - Fixed bug in
Function
term. Bug: given a formula = 'tan(y)' and a map['y'] = 1.0, and executingFunction::load(formula)
, then the map of variables is reset becauseload()
callsunload()
first, causing the deregistration of variabley
. Solution: Removed methodunload()
fromload()
, thereby causing futureload()
not to reset variables. - Fixed bug in
Function
when enclosing variable in double parenthesis.
What's Next?
- Optimization of Fuzzy Logic Controllers
- Type-2 Fuzzy Logic Controllers
- Adaptive Neuro-Fuzzy Inference System (ANFIS)
- Fuzzy C-means data clustering
fuzzylite® is a registered trademark of FuzzyLite Limited.
jfuzzylite™ is a trademark of FuzzyLite Limited.
QtFuzzyLite™ is a trademark of FuzzyLite Limited.
Copyright © 2010-2017 FuzzyLite Limited. All rights reserved.
IEEE Transactions on Fuzzy Systems
1.On Computing the Edge-Connectivity of an Uncertain Graph
2.Privacy-Protected Facial Biometric Verification Using Fuzzy Forest Learning
3.Join and Meet Operations for Type-2 Fuzzy Sets With Nonconvex Secondary Memberships
4.Fuzzy Observed-Based Adaptive Consensus Tracking Control for Second-Order Multiagent Systems With Heterogeneous Nonlinear Dynamics
5.New Formulation for Representing Higher Order TSK Fuzzy Systems
6.Modeling Fuzzy and Interval Fuzzy Preferences Within a Graph Model Framework
7.A Novel Adaptive Possibilistic Clustering Algorithm
8.On Viewing Fuzzy Measures as Fuzzy Subsets
9.Linear–Quadratic Uncertain Differential Game With Application to Resource Extraction Problem
10.Distributivity of the Ordinal Sum Implications Over t-Norms and t-Conorms
11.Hybrid Fuzzy Adaptive Output Feedback Control Design for Uncertain MIMO Nonlinear Systems With Time-Varying Delays and Input Saturation
12.New Formulation for Representing Higher Order TSK Fuzzy Systems
13.Encoding Words Into Normal Interval Type-2 Fuzzy Sets: HM Approach
14.Fuzzy Opinion Networks: A Mathematical Framework for the Evolution of Opinions and Their Uncertainties Across Social Networks
15.Fuzzy Observed-Based Adaptive Consensus Tracking Control for Second-Order Multiagent Systems With Heterogeneous Nonlinear Dynamics
16.Ensembles of Fuzzy Linear Model Trees for the Identification of Multioutput Systems
17.Discovering Fuzzy Exception and Anomalous Rules
18.M-Estimates of Location for the Robust Central Tendency of Fuzzy Data
19.Evaluating Choquet Integrals Whose Arguments are Probability Distributions
20.Mean-Based Fuzzy Control for a Class of MIMO Robotic Systems
21.On Computing the Edge-Connectivity of an Uncertain Graph
22.On the Use of Fuzzy Constraints in Semisupervised Clustering
23.Join and Meet Operations for Type-2 Fuzzy Sets With Nonconvex Secondary Memberships
24.The Shortest Path Problem on a Time-Dependent Network With Mixed Uncertainty of Randomness and Fuzziness
25.Investigation of Spatial Control Strategies for AHWR: A Comparative Study
26.Active sample selection based incremental algorithm for attribute reduction with rough sets
27.Fuzzy Group Based Intersection Control via Vehicular Networks for Smart Transportations
28.An Adaptive Fuzzy Logic Based Energy Management Strategy on Battery/Ultracapacitor Hybrid Electric Vehicles - Price RS:8000/-
29.Finding synergy networks from gene expression data: a fuzzy rule based approach
30.Intelligent Demand Response Contribution in Frequency Control of Multi-area Power Systems
31.Fuzzy Control for Uncertain Vehicle Active Suspension Systems via Dynamic Sliding-Mode Approach