Skip to content

Repository files navigation

PyIT2FLS

NumPy and SciPy based toolkit for Type 1 and Interval Type 2 Fuzzy Logic Systems.

License

PyIT2FLS is published under the MIT license. If you use this toolkit in your work, please cite our paper PyIT2FLS: An open-source Python framework for flexible and scalable development of type 1 and interval type 2 fuzzy logic models.

BibTeX:

@article{haghrah2025pyit2fls,
    title={PyIT2FLS: An open-source Python framework for flexible and scalable development of type 1 and interval type 2 fuzzy logic models},
    author={Haghrah, Amir Arslan and Ghaemi, Sehraneh and Badamchizadeh, Mohammad Ali},
    journal={SoftwareX},
    volume={30},
    pages={102146},
    year={2025},
    publisher={Elsevier}
}

MLA:

Haghrah, Amir Arslan, Sehraneh Ghaemi, and Mohammad Ali Badamchizadeh. "PyIT2FLS: An open-source Python framework for flexible and scalable development of type 1 and interval type 2 fuzzy logic models." SoftwareX 30 (2025): 102146.

Installation

PyIT2FLS requires Python 3.6 or newer. Its core dependencies — NumPy, SciPy, and Matplotlib — are installed automatically by pip.

From PyPI (recommended)

Install or upgrade to the latest release directly from PyPI:

pip3 install --upgrade pyit2fls

With the Designer GUI

The PyIT2FLS Designer, a graphical tool for building, simulating, and saving/loading fuzzy systems, additionally depends on PyQt5. Install it with the optional gui extra:

pip3 install --upgrade "pyit2fls[gui]"

Once installed, launch it with the pyit2fls-designer console script, or with python3 -m pyit2fls.designerui.

From source

To install from a local clone of the repository instead, clone it (or download and unzip the source), then run this command from inside the resulting PyIT2FLS folder:

git clone https://github.com/Haghrah/PyIT2FLS.git
cd PyIT2FLS
pip3 install .

Versions

Features coming up in the next version

  • Supporting Generalized Type 2 Fuzzy Sets and Systems.

Some notes on version 0.9.0

  • Support for the IEC 61131-7 Fuzzy Control Language (FCL) standard, through the new FCL class (pyit2fls.FCL): parses the core Mamdani subset of FCL (FUNCTION_BLOCK/VAR_INPUT/VAR_OUTPUT/FUZZIFY/DEFUZZIFY/RULEBLOCK) into a runnable T1Mamdani system, and exports a system back out as FCL text.
  • The IEEE 1855 Fuzzy Markup Language (FML) support (FML class, pyit2fls.FML) has been completed:
    • The rule base's andMethod/activationMethod now actually select the underlying fuzzy inference engine, instead of always defaulting to Product.
    • Clause-level negation (FML's NOT="true", FCL's IS NOT) is now supported.
    • Rules whose antecedent clauses are OR-connected now raise a clear error instead of being silently (and incorrectly) combined with AND — the underlying T1Mamdani/T1TSK engines only support AND-combined antecedents; model an OR relationship as two separate rules sharing the same consequent instead.
    • A new FML.export_fml method serializes a system back out as FML XML.
  • Introduction of a GUI for facilitating system design: the PyIT2FLS Designer, a PyQt5 application for building, simulating, and saving/loading Type 1 Mamdani fuzzy systems as FML or FCL files. Launch it with the pyit2fls-designer console script (after installing the optional GUI extra, pip install pyit2fls[gui]), or with python3 -m pyit2fls.designerui. See markdown docs/DesignerGUI.md for a tutorial.
  • A new points_mf membership function (arbitrary piecewise-linear point list), the native term representation used by FCL.

Some notes on version 0.8.6

  • Minor bug fix concerning the IT2Mamdani_ML_Model class.

Some notes on version 0.8.5

  • Removing a deprecated numpy module ...

Some notes on version 0.8.4

  • Just some minor edits and improvements ...

Some notes on version 0.8.3

  • Supporting new optimization algorithms ...

Some notes on version 0.8.1-0.8.2

  • Just some minor edits and improvements ...

Some notes on version 0.8.0

  • Starting initial support of machine learning models based on fuzzy systems. Depending on whether they are optimized for execution time or for the linguistic interpretability of their results, these models offer different trade-offs in computational efficiency.
    • Type 1 TSK Model
    • Type 1 Mamdani Model
    • Interval Type 2 TSK Model
    • Interval Type 2 Mamdani Model
  • Starting initial support of Takagi-Sugeno models, widely used in the control of dynamic systems:
    • Type 1 Takagi-Sugeno System
    • Interval Type 2 Takagi-Sugeno System
  • Documentation has been enhanced and published on readthedocs. More enhancements are on the way with more tutorials and examples.
  • Some functions we relied on were deprecated in SciPy, NumPy, and Matplotlib; this version updates PyIT2FLS accordingly.
  • More exception handling has been added to this version of PyIT2FLS, though this work is not yet complete.
  • Minor enhancements have been made in plotting functions.

While we strive for quality and reliability, no software is perfect. If you encounter any issues or have suggestions, we warmly welcome your feedback. Your input is invaluable and helps us continue improving PyIT2FLS for the community. Please report any bugs or share your thoughts by opening a new issue. Thank you for your support and for being part of our journey to make PyIT2FLS even better!

Some notes on version 0.7.9

  • Some bugs (concerning EIASC algorithm) have been fixed in this version.

Some notes on version 0.7.8

  • Some bugs have been fixed in this version.

Some notes on version 0.7.0-0.7.7

  • Supporting fuzzy matrices and related operators.

  • Faster IT2 FLS evaluation (see the typereduction package).

  • Introduction of the emphasize function for both type 1 and interval type 2 fuzzy sets (see the 16th example).

  • New options have been added when calling plot functions (T1FS.plot, IT2FS.plot, T1FS_plot, IT2FS_plot, and TR_plot).

    • Users can specify the output file format (png, eps, pdf, etc.) when calling the plot function by setting the ext input parameter (default pdf).
    • Users can toggle the grid in the output plot by setting the grid input parameter (default True).
    • Users can set the x- and y-axis labels via the xlabel and ylabel input parameters, respectively. The default xlabel is Domain, and the default ylabel is Membership degree.
  • There are some deprecated functions and classes. After version 1.0.0 is released, these will no longer be supported:

    • Please use the function IT2FS_LGaussian_UncertStd instead of L_IT2FS_Gaussian_UncertStd.
    • Please use the function IT2FS_RGaussian_UncertStd instead of R_IT2FS_Gaussian_UncertStd.
    • Please use the class IT2Mamdani instead of IT2FLS.
    • Please use the class IT2Mamdani instead of Mamdani.
    • Please use the class IT2TSK instead of TSK.

Some notes on version 0.6.1

  • Some bugs have been fixed in this version.

Some notes on version 0.6

  • Supporting Type 1 Fuzzy Sets and Systems.
  • Supporting elliptic and semi-elliptic membership functions.
  • Supporting generalized bell shaped membership function.
  • Supporting many new t-norms and s-norms.
  • Some bugs have been fixed in this version.

Some notes on version 0.5

  • Supporting both Mamdani and TSK systems.
  • Some bugs have been fixed in this version. Now, it is possible to use different domains for FLS inputs and outputs.

Some notes on version 0.4

  • Some bugs have been fixed in this version, especially in the type reduction algorithms. Thanks to Dr. K.B. Badri Narayanan for reporting the errors.
  • Some new IT2FSs have been added to the toolkit.
  • In previous versions, the height of the IT2FS_Gaussian_UncertStd and IT2FS_Gaussian_UncertMean IT2FSs was fixed to 1 by default. In the new version, the user must give the height value in the parameters list as the last element.

Examples

Some initial examples of using PyIT2FLS are provided below. All the examples are tested against only the latest version of PyIT2FLS and may be incompatible with older versions. Please update PyIT2FLS to the latest version before running them.

  • Ex1: Defining an Interval Type 2 Fuzzy Set (IT2FS).

  • Ex2: Using join and meet operators and plotting the outputs.

  • Ex3: Defining a simple (MIMO) IT2Mamdani.

  • Ex4: Prediction of the Mackey-Glass chaotic time series with PSO-based parameter tuning.

  • Ex5: Designing Interval Type 2 Fuzzy PID (IT2FPID) controller for a time-delay linear system.

  • Ex6: Creating and plotting some different types of interval type 2 fuzzy sets.

  • Ex7: Defining a simple multi-input multi-output IT2 TSK FLS.

  • Ex8: Defining a multi-input multi-output IT2 TSK FLS and plotting the resulting 3D output planes.

  • Ex9: Defining a multi-input multi-output IT2FLS with different domains for each of input and output variables, and plotting the output surfaces of the system.

  • Ex10: Generating random rule-bases.

  • Ex11: Using six different t-norms with meet operator.

  • Ex12: Using six different s-norms with join operator.

  • Ex13: MIMO Type 1 Mamdani Fuzzy Logic System.

  • Ex14: MIMO Type 1 TSK Fuzzy Logic System.

  • Ex15: Using the emphasize function for type 1 and interval type 2 fuzzy sets.

  • Ex16: Example concerning fuzzy matrices.

  • Ex17: Defining random rules and random sets for IT2F classifier with three inputs and one output (Based on the request of one of the users).

  • Ex18: Fitting a 3D surface using type 1 TSK model and PSO algorithm.

  • Ex19: Fitting a 3D surface using type 1 Mamdani model and GA algorithm.

  • Ex20: Fitting a 3D surface using interval type 2 TSK model and GA algorithm.

  • Ex21: Fitting a 3D surface using interval type 2 Mamdani model and PSO algorithm.

  • Ex22: Using type 1 Takagi-Sugeno model for approximating a nonlinear system.

  • Ex23: Using interval type 2 Takagi-Sugeno model for approximating a nonlinear system.

  • Ex24: Example for new MEET and JOIN functions accepting many IT2FS s as input.

  • Ex25: Parsing an IEEE 1855 (FML) document into a Type 1 Mamdani system, evaluating it, and round-tripping it back to FML.

  • Ex26: Parsing an IEC 61131-7 (FCL) document into a Type 1 Mamdani system, evaluating it, and round-tripping it back to FCL.

About

Type 1 and Interval Type 2 Fuzzy Logic Systems in Python

Topics

Resources

Stars

87 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages