Равенство и включение нечётких множеств¶
- Статус: исполняемый контракт задачи #73
- Публичный модуль:
fuzzyroutines.relations
Математические отношения¶
Для нечётких множеств A и B на одном универсальном множестве X
поточечное равенство и включение определяются как
A = B iff for every x in X: mu_A(x) = mu_B(x)
A <= B iff for every x in X: mu_A(x) <= mu_B(x)
Публичный API никогда не сравнивает идентичность объектов функций принадлежности.
Поэтому разные Python-вычислители могут представлять одинаковое поведение принадлежности.
Оба отношения требуют точного равенства универсальных множеств до вычисления любой степени.
Равенство Python-объектов ScalarFuzzySet остаётся проверкой идентичности и не является
математическим отношением; необходимо вызывать явные функции отношений.
Полный перебор и выборочная область¶
DiscreteUniverse конечно, поэтому EqualOnDomain и IncludedOnDomain вычисляют каждую
объявленную точку. Нельзя передать частичную область сравнения и случайно выдать такой
результат за равенство на всём универсальном множестве.
В общем случае конечным числом вычислений нельзя доказать глобальное равенство произвольного
Python-вычислителя на ContinuousUniverse другому вычислителю. Поэтому непрерывные отношения
требуют явный ComparisonDomain с конечными упорядоченными точками внутри универсального множества.
Булев результат действителен только в этих объявленных точках; он не доказывает равенство
функций или включение между точками.
Это намеренная граница. Аналитические доказательства отношений известных семейств функций принадлежности потребовали бы отдельного символьного представления и контракта.
Точный режим и режим с допуском¶
Каждое отношение требует ComparisonPolicy:
ComparisonPolicy("exact")использует точное численное равенство степеней принадлежности и точный поточечный порядок;ComparisonPolicy("tolerance", absoluteTolerance=..., relativeTolerance=...)используетmath.iscloseдля равенства и допускает нарушение включения только при близости двух степеней по этим явным допускам.
Режим с допуском требует оба поля допуска; хотя бы одно должно быть положительным. Точный режим отклоняет аргументы допусков. Нет общего для библиотеки или неявного epsilon.
Близость с допуском в общем случае нетранзитивна. Её нельзя использовать как отношение эквивалентности для хеширования, канонизации или идентичности.
Примеры¶
Полное дискретное сравнение:
from fuzzyroutines import (
ComparisonPolicy,
DiscreteUniverse,
EqualOnDomain,
IncludedOnDomain,
ScalarFuzzySet,
)
universe = DiscreteUniverse((0.0, 0.5, 1.0))
leftSet = ScalarFuzzySet(universe, lambda coordinate: coordinate)
rightSet = ScalarFuzzySet(universe, lambda coordinate: coordinate**1)
policy = ComparisonPolicy("exact")
assert EqualOnDomain(leftSet, rightSet, policy)
assert IncludedOnDomain(leftSet, rightSet, policy)
Явное выборочное сравнение непрерывных множеств:
from fuzzyroutines import ComparisonDomain, ContinuousUniverse
universe = ContinuousUniverse(0.0, 1.0, leftClosed=True, rightClosed=True)
leftSet = ScalarFuzzySet(universe, lambda coordinate: coordinate * coordinate)
rightSet = ScalarFuzzySet(universe, lambda coordinate: coordinate**2)
samplePoints = ComparisonDomain((0.0, 0.25, 0.5, 0.75, 1.0))
assert EqualOnDomain(leftSet, rightSet, policy, samplePoints)
Проверенные свойства¶
Исполняемые тесты покрывают:
- полное дискретное равенство и включение;
- равенство разных по идентичности вызываемых представлений;
- рефлексивность и точную антисимметричность;
- явное поведение абсолютного и относительного допусков;
- обязательность области непрерывного сравнения;
- отклонение частичных дискретных областей;
- отклонение несовместимых универсальных множеств и недопустимых точек выборки.
Источники¶
- L. A. Zadeh, “Fuzzy Sets,” Information and Control, 8(3), 338–353,
- https://doi.org/10.1016/S0019-9958(65)90241-X
- G. J. Klir and B. Yuan, Fuzzy Sets and Fuzzy Logic: Theory and Applications, Prentice Hall, 1995. ISBN 978-0-13-101171-7.