Высота и нормализация нечёткого множества¶
- Статус: исполняемый контракт задачи #76
- Связанная Feature: #25
- Связанный ADR: ADR-0002
- Публичный модуль:
fuzzyroutines.fuzzysets
Математический контракт¶
Для скалярного нечёткого множества A = (X, mu_A) высота и нормальность определяются как
height(A) = sup({mu_A(x) | x in X})
isNormal(A) = height(A) = 1
При height(A) > 0 нормализация строит новое множество на том же универсальном множестве:
mu_Normalize(A)(x) = mu_A(x) / height(A)
Результат имеет точную высоту один, поскольку супремум масштабируется положительной
константой 1 / height(A). При нулевой высоте частное не определено;
Normalize выбрасывает ValueError, не возвращая пустое множество без изменений
и не создавая искусственную единичную принадлежность.
Граница точности¶
Height следует существующим контрактам свойств и не создаёт второй набор формул семейств:
DiscreteUniverseконечно; каждая объявленная координата вычисляется полностью;ContinuousUniverseподдерживается, если множество использует современный аналитическийMembershipFunctionили поддерживаемый исторический вычислительMFunction; высота получается изDerivePropertiesи точной геометрии семейства;- нормализованный результат сохраняет внутреннее точное свидетельство высоты один;
- произвольный непрерывный вычислитель отклоняется: его глобальный супремум нельзя доказать конечным числом вычислений.
SampleProperties(...).heightEstimate остаётся приближённым наблюдением на одной
конечной IntegrationDomain. Оно намеренно не принимается как точное обоснование нормализации.
Увеличение числа точек может улучшить оценку, но не доказывает супремум произвольной
непрерывной функции, особенно на неограниченном универсальном множестве.
Точность вычислений¶
Height возвращает точное значение контракта в скалярном численном представлении.
IsNormal(fuzzySet, tolerance=1e-12) сравнивает его с единицей при нулевом относительном
и явно доступном вызывающему абсолютном допуске. Логические, отрицательные и неконечные
допуски отклоняются. Допуск влияет только на предикат нормальности; он не превращает
малую положительную высоту в ноль и не меняет делитель нормализации.
Вычислитель принадлежности по-прежнему проверяет каждую возвращаемую степень в [0, 1].
Нормализация не обрезает выход за диапазон из-за арифметики с плавающей точкой.
Произвольные пользовательские непрерывные функции отклоняются; поддерживаемые аналитические
и дискретные определения фиксируются снимком, не сохраняя изменяемую семантику источника.
Неизменяемость и область вычисления¶
Normalize всегда возвращает отдельный замороженный ScalarFuzzySet, не редактируя источник.
Для дискретного универсального множества исходные степени вычисляются по одному разу в порядке
координат; результат использует этот полный неизменяемый снимок. Для непрерывного аналитического
источника при нормализации фиксируются канонический идентификатор семейства и неизменяемый
кортеж параметров. Ленивое вычисление использует общее ядро аналитических формул с этим
снимком и делит результат на точную вычисленную высоту. Последующее изменение исходного
MFunction.parameters не может нарушить свидетельство высоты один у нормализованного результата.
Нормальность использует супремум, а не наличие точки ядра. Поэтому непрерывное множество может быть нормальным, даже если ни одна конечная координата не даёт принадлежность один.
Пример¶
from fuzzyroutines import (
ContinuousUniverse,
Height,
IsNormal,
Normalize,
ScalarFuzzySet,
)
from fuzzyroutines.FuzzyRoutines import MFunction
membershipFunction = MFunction("logistic", a=2.0, b=0.0)
universe = ContinuousUniverse(-1.0, 1.0, leftClosed=True, rightClosed=True)
fuzzySet = ScalarFuzzySet(universe, membershipFunction.mju)
assert Height(fuzzySet) < 1.0
normalizedSet = Normalize(fuzzySet)
assert IsNormal(normalizedSet)
assert normalizedSet.universe == fuzzySet.universe
Источники¶
- 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. https://books.google.com/books?id=AOhQAAAAMAAJ