OpenFLL¶
Open Fuzzy Logic Library — C++ библиотека нечёткой логики с Python-обвязкой.
Что это¶
OpenFLL — это компактная, статически линкуемая C++20 библиотека для систем нечёткого вывода (Sugeno, Mamdani), плюс плоский Python API через Pybind11.
Проект ориентирован на инженеров, которым нужна встраиваемая нечёткая логика без зависимостей на runtime — никаких внешних интерпретаторов, никакого Python на стороне вывода. Python используется только для удобного скриптинга и обучения моделей.
Возможности¶
- Sugeno 0-го порядка — рабочий, с WTAver-дефуззификацией (WTSum доступен)
- Mamdani — в процессе реализации (дефаззификация через интегрирование)
- 5 типов функций принадлежности: constant, triangular, trapezoidal, gaussian, polynomial
- 6 t-норм и 6 s-норм с явным выбором в правиле
- Linear Facade — единый плоский API, скрывающий fluent-цепочки ядра
- Pybind11-биндинги —
import PyFLL; engine = PyFLL.SugenoEngine() - Type stubs —
.pyiсLiteral-типами для автодополнения в IDE
30 секунд до первого расчёта¶
import PyFLL
e = PyFLL.SugenoEngine()
e.add_input_var("x1")
e.add_input_var("x2")
e.add_output_var("y")
e.add_membership_func("x1", "low", "triangular", [-10, 0, 10])
e.add_membership_func("x1", "high", "triangular", [0, 10, 20])
e.add_membership_func("x2", "low", "gaussian", [-5, 2])
e.add_membership_func("x2", "high", "gaussian", [5, 2])
e.add_membership_func("y", "lo", "constant", [10.0])
e.add_membership_func("y", "hi", "constant", [30.0])
e.add_rule('IF x1 IS "low" AND x2 IS "low" THEN y IS "lo"')
e.add_rule('IF x1 IS "high" OR x2 IS "high" THEN y IS "hi"')
e.add_rule('IF x1 IS "low" AND[prod_and] x2 IS "high" THEN y IS "lo"')
e.build()
e.set_input("x1", 5.0)
e.set_input("x2", 0.0)
e.calculate()
print(e.get_output("y")) # → 16.667
Документация¶
- Туториал: первый движок — Sugeno от и до
- Туториал: управление компрессором — C++ ↔ Python parity
- API reference — автогенерированная документация
- Архитектура Linear Facade — почему плоский API
- Сборка — MinGW / MSVC / pybind11
Лицензия¶
MIT — см. LICENSE.