Туториал 01: первый движок¶
Минимальный Sugeno-движок: 2 входа, 1 выход, 2 правила.
Полный код — в tests/python/test_sugeno_smoke.py.
Шаг 1: Создаём движок¶
Шаг 2: Регистрируем переменные¶
Имена должны быть уникальны в пределах движка. Пустые имена и дубликаты → ValueError.
Шаг 3: Добавляем функции принадлежности¶
# X1: 2 triangular
e.add_membership_func("x1", "low", "triangular", [-10, 0, 10])
e.add_membership_func("x1", "high", "triangular", [0, 10, 20])
# X2: 2 gaussian (center, sigma)
e.add_membership_func("x2", "low", "gaussian", [-5, 2])
e.add_membership_func("x2", "high", "gaussian", [5, 2])
# Y: 2 constant (Sugeno 0-го порядка)
e.add_membership_func("y", "lo", "constant", [10.0])
e.add_membership_func("y", "hi", "constant", [30.0])
Формат параметров:
| Type | params |
|---|---|
constant |
[value] |
triangular |
[a, b, c] — left, peak, right |
trapezoidal |
[a, b, c, d] |
gaussian |
[center, sigma] |
polynomial |
отложен |
Шаг 4: Добавляем правила¶
# Правило 1: AND (t-norm по умолчанию = Min)
e.add_rule('IF x1 IS "low" AND x2 IS "low" THEN y IS "lo"')
# Правило 2: OR (s-norm по умолчанию = Max)
e.add_rule('IF x1 IS "high" OR x2 IS "high" THEN y IS "hi"')
# Правило 3: AND с явной t-нормой ProdAnd (умножение весов)
e.add_rule('IF x1 IS "low" AND[prod_and] x2 IS "high" THEN y IS "lo"')
Грамматика:
Доступные нормы: min, prod_and, bounded_diff, drastic_prod, einstein_prod, hamacher_prod
(t-нормы для AND); max, algebraic_sum, bounded_sum, drastic_sum, einstein_sum, hamacher_sum
(s-нормы для OR).
Шаг 5: Сборка и расчёт¶
e.build() # компилирует модель
e.set_input("x1", 5.0) # входы
e.set_input("x2", 0.0)
e.calculate() # нечёткий вывод
print(e.get_output("y")) # → 16.667
После build() нельзя добавлять переменные, MF или правила — будет RuntimeError.
Ожидаемый результат¶
Это WTAver Sugeno: правило 1 (AND, оба MF ~0.5 при (5,0)) даёт вес 0.5 и выход 10, правило 2 (OR) даёт 0. Итог: (0.5·10 + 0.5·30) / 1.0 = 20… или другие интерпретации, зависит от того, как сходятся MF.
Точный ответ зависит от формы MF. Запустите
tests/python/test_sugeno_smoke.pyи сверьтесь сBASELINE.mdдля воспроизводимости.
Что дальше¶
- Бо
льше правил и переменных — см. [tests/python/test_sugeno_smoke.py`](https://github.com/SPARS-TUSUR/fuzzy-logic-library/blob/main/tests/python/test_sugeno_smoke.py) - Динамическая модель (компрессор) — туториал 02
- API reference — SugenoEngine