Перейти к содержанию

Явные операции над нечёткими множествами

  • Статус: исполняемый контракт задач #71, #72 и #74
  • Связанные ADR: ADR-0004 и ADR-0008
  • Публичный модуль: fuzzyroutines.fuzzysets

Представление множества

ScalarFuzzySet — упорядоченная пара

A = (X, mu_A)
mu_A: X -> [0, 1]

где X — явное ContinuousUniverse или DiscreteUniverse. Вычисление принадлежности отклоняет координаты вне X, а также логические, неконечные и выходящие за диапазон степени принадлежности, не преобразуя их.

Поля объекта-значения неизменяемы. Операция строит новый вычислитель принадлежности на том же универсальном множестве и не меняет ни один операнд. При пользовательском вычислителе вызывающий отвечает за возможность повторного входа и отсутствие внешне изменяемой семантики.

Совместимость универсальных множеств

Бинарные операции требуют точного равенства универсальных множеств: значений непрерывных границ, их включения, вида представления и дискретных точек. Начальный API не выводит объединение, пересечение, сетку пересэмплирования или преобразование координат разных областей. Такое согласование было бы отдельной математической операцией со своей политикой.

Дополнение

При явно заданном отрицании N дополнение вычисляется поточечно:

mu_complement(A)(x) = N(mu_A(x))

NegationPolicy поддерживает только семейства, принятые в ADR-0004:

  • standard: N(x) = 1 - x, без параметра;
  • parametric: историческое кусочно-линейное сильное отрицание с явным alpha из (0, 1);
  • parabolic: принятая аналитическая ветвь с явным alpha из [1/4, 3/4].

Нет значения по умолчанию или общей для процесса настройки отрицания. Даже стандартное дополнение требуется запросить через NegationPolicy("standard").

Пересечение и объединение

При явно заданных t-норме T и s-норме S:

mu_intersection(A, B)(x) = T(mu_A(x), mu_B(x))
mu_union(A, B)(x)        = S(mu_A(x), mu_B(x))

TNormPolicy и SNormPolicy принимают logic, algebraic, boundary и drastic. Формулы точно соответствуют ADR-0004. Ни Intersection, ни Union не имеют скрытого семейства по умолчанию.

Направленная разность

Разность — пересечение с явно выбранным дополнением правого операнда:

mu_Difference(A, B)(x) = T(mu_A(x), N(mu_B(x)))

Поэтому Difference требует и TNormPolicy, и NegationPolicy. Универсальные множества операндов должны точно совпадать; результат сохраняет эту область. Операция направленна и не меняет ни один операнд.

Стандартное отрицание и логическая t-норма воспроизводят классическую разность для чётких степеней принадлежности. Произвольные нечёткие степени сохраняют семантику выбранных операторов; в частности, пустота Difference(A, A) не гарантируется. ADR-0008 не определяет симметрическую разность: композиция двух направленных разностей требует ещё и s-нормы и не сохраняет все классические законы при произвольных политиках операторов.

Пример

from fuzzyroutines import (
    Complement,
    ContinuousUniverse,
    Difference,
    Intersection,
    NegationPolicy,
    ScalarFuzzySet,
    SNormPolicy,
    TNormPolicy,
    Union,
)

universe = ContinuousUniverse(0.0, 1.0, leftClosed=True, rightClosed=True)
increasingSet = ScalarFuzzySet(universe, lambda coordinate: coordinate)
decreasingSet = Complement(increasingSet, NegationPolicy("standard"))

overlap = Intersection(increasingSet, decreasingSet, TNormPolicy("logic"))
envelope = Union(increasingSet, decreasingSet, SNormPolicy("logic"))
directedDifference = Difference(
    increasingSet,
    decreasingSet,
    TNormPolicy("logic"),
    NegationPolicy("standard"),
)

Проверенные законы

Исполняемые тесты свойств охватывают все четыре принятые пары двойственных семейств:

  • замкнутость в [0, 1];
  • коммутативность;
  • ассоциативность;
  • нейтральный элемент t-нормы T(x, 1) = x;
  • нейтральный элемент s-нормы S(x, 0) = x;
  • оба закона де Моргана при стандартном отрицании;
  • эквивалентность направленной разности T(mu_A(x), N(mu_B(x)));
  • совместимость с чёткими множествами, направленность и явное отклонение несовместимых универсальных множеств или отсутствующих политик.

Современные скалярные политики также сравниваются с защищёнными историческими скалярными функциями на детерминированной контрольной сетке. Равенство и включение используют отдельный контракт с явной ошибкой при неподдерживаемом запросе, описанный в главе «Равенство и включение нечётких множеств». Контрольные сетки операторов не переиспользуются неявно как области сравнения.

Источники