Skip to main content

LFA Toolbox is an educational library to play with fuzzy systems

Project description

LFA Toolbox

This project is a maintained fork of lfa_toolbox originally developed by Gary Marigliano.

LFA Toolbox is a set of tools to create, view and play with fuzzy systems. Ideal for students to play with fuzzy systems.

For example a simple example of a fuzzy system to determine if there will be a lot of tourists given the temperature and the amount of sunshine.

  • IF (temperature is hot OR sunshine is sunny), THEN (tourists is high)
  • IF (temperature is warm AND sunshine is part_sunny), THEN (tourists is medium)
  • IF (temperature is cold OR sunshine is cloudy), THEN (tourists is low)

resort_problem

Installation

The detailed install instructions can be found here docs/INSTALL.md but you basically need to do:

pip install lfa-toolbox-v2

Features

  • Singleton and Mamdani fuzzy system types
  • Commonly used membership functions (Trap. MF, Triangle MF, Free shape MF,..)
  • Multiple consequents
  • Default rule
  • NOT conditions
  • Viewers (membership function viewer, linguistic variable viewer,...)

Examples

Membership functions

TODO hand-crafted mf + triangular mf + linPWMF + screenshot viewer

from matplotlib import pyplot as plt

from lfa_toolbox.core.mf.triangular_mf import TriangularMF
from lfa_toolbox.view.mf_viewer import MembershipFunctionViewer

# Create a matplotlib plot
fig, ax = plt.subplots()

# Create a triangular membership function
temp_mf = TriangularMF(-20, 25, 40)

# You can fuzzify an input value
fuzzified_value = temp_mf.fuzzify(22.5)
print("MF has been fuzzified to {:.3f}".format(fuzzified_value))

# Or you can visualize the MF using matplotlib
mfv = MembershipFunctionViewer(temp_mf, ax=ax,
                               label="Temperature in celsius")
mfv.fuzzify(22.5)

plt.legend()  # optionally show the legend i.e. "Temperature"
plt.show()

And the output will be:

temp_mf

Others shapes of membership functions can be created such as:

mfs

Code for this visualization is available at /lfa_toolbox/examples/readme_examples.py.

Linguistic variable

TODO hand-crafted lv + three points lv + p points lv + screenshot viewer

You can create and visualize linguistic variables by specifing labels and membership functions for each label.

from matplotlib import pyplot as plt
from lfa_toolbox.core.lv.linguistic_variable import LinguisticVariable
from lfa_toolbox.view.lv_viewer import LinguisticVariableViewer

fig, axs = plt.subplots(3, figsize=(12, 8))

for ax in axs:
lv_temp = LinguisticVariable(
    name="temperature",
    ling_values_dict={
        "cold": LinPWMF([17, 1], [20, 0]),
        "warm": LinPWMF([17, 0], [20, 1], [26, 1], [29, 0]),
        "hot": LinPWMF([26, 0], [29, 1]),
    },
)
viewer = LinguisticVariableViewer(lv_temp, ax=ax)
viewer.fuzzify(26.6)
viewer.fuzzify(21.8)

fig.tight_layout()
plt.show()

lv_temp

You can also use the class PPointsLV to create interpretable more conveniently.

from matplotlib import pyplot as plt
from lfa_toolbox.view.lv_viewer import LinguisticVariableViewer
from lfa_toolbox.core.lv.p_points_lv import PPointsLV

fig, ax = plt.subplots()
# PPointsLV helps you create a linguistic variable that is human
# interpretable and generate automatically fuzzy labels for you.
lv = PPointsLV("Github stars", [0, 50, 300, 1000])
LinguisticVariableViewer(lv, ax=ax)

plt.show()

ppointslv

Fuzzy System

You can create an entire fuzzy system by hand. LFA Toolbox supports Singleton and Mamdani fuzzy systems, default rule and NOT conditions. You can see how it works by looking at the examples here /lfa_toolbox/examples.

Take a look at the car_problem_slides folder. It shows a problem where we want to regulate the push of a pedal to maintain the speed of a car. It starts with a Mamdani fuzzy system and gradually simplifies it by first replacing it with a Singleton fuzzy system, then by adding a default fuzzy rule and finally by using NOT conditions.

Integration with Trefle

Trefle is a scikit-learn compatible estimator implementing the FuzzyCoCo algorithm that uses a cooperative coevolution algorithm to find and build interpretable fuzzy systems.

See Trefle's Github to learn how to install it.

Basically after running Trefle you can save the best fuzzy system and fine tune it with LFA Toolbox. For example you can change the values of the membership functions or remove a too specific fuzzy rule.

See /lfa_toolbox/examples/import_a_trefle_fuzzy_system.py example.

Deployment and Tests

Both documentations are available in the docs folder.

Credits

  • Gary Marigliano (developper)
  • Carlos Andrés PEÑA REYES (project manager)
  • CI4CB Team

ci4cb_logo heigvd_logo

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lfa_toolbox_v2-2.0.0.tar.gz (38.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lfa_toolbox_v2-2.0.0-py3-none-any.whl (59.3 kB view details)

Uploaded Python 3

File details

Details for the file lfa_toolbox_v2-2.0.0.tar.gz.

File metadata

  • Download URL: lfa_toolbox_v2-2.0.0.tar.gz
  • Upload date:
  • Size: 38.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lfa_toolbox_v2-2.0.0.tar.gz
Algorithm Hash digest
SHA256 da65ddc03f18cef1d8b79ee61daee2ca66b4317e269cb3326710907b25a4ab69
MD5 7620f804c8f20c0ed9af0911979c34b2
BLAKE2b-256 3f8a262e636a5aed9ea9004de0ea6e887156107f3638255fad0cb47402a6d26e

See more details on using hashes here.

File details

Details for the file lfa_toolbox_v2-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: lfa_toolbox_v2-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 59.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lfa_toolbox_v2-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c6811fb31485f9a8879f313539ec16098c84b52064e576d1142bd7f0f4bbc2a1
MD5 f8f6bc21119f5e7e0a647ce42fa7ff55
BLAKE2b-256 38f55a351992792ee8a0b06193b1b42ef26b1d8a84e3e2a0c69f9e66b0c40dbe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page