Контракт универсального множества и множества поддержки¶
- Статус: справочный контракт задач #9 и #67
- Связанный ADR: ADR-0002
- Текущие исполняемые интерфейсы:
fuzzyroutines.domain,fuzzyroutines.propertiesи исторический адаптерfuzzyroutines.FuzzyRoutines.FuzzySet
Каноническая терминология¶
| Термин | Значение | Допускается неограниченность? | Правило точности |
|---|---|---|---|
| Универсальное множество | Координаты, на которых функция принадлежности определяет нечёткое множество | Да | Объявляется, не выводится из выборки |
| Область интегрирования | Конечный рабочий интервал непрерывного численного метода | Нет в начальном численном API | Объявляется для множества или операции |
| Множество поддержки | Координаты универсального множества со строго положительной принадлежностью | Да | Выводится из точной геометрии семейства либо явно помечается приближённым |
| Замыкание множества поддержки | Замыкание множества поддержки относительно универсального множества | Да | Требует объявленной топологии или семантики интервалов |
| Ядро нечёткого множества | Координаты с принадлежностью ровно один | Да | Пусто у ненормального множества, которое нигде не достигает единицы |
| Граница | Координаты с принадлежностью строго между нулём и единицей | Да | Нечёткая переходная область, а не топологическая граница |
| Высота | Супремум степеней принадлежности на универсальном множестве | Нет; скаляр из [0, 1] |
Точная при наличии доказательства, иначе явно приближённая |
Историческое имя supportSet обозначает только область интегрирования.
Оно никогда не утверждает, что задано множество поддержки или его замыкание.
Примеры совместимости¶
| Семейство функций принадлежности | Математический результат на вещественной прямой | Пример исторического supportSet |
Интерпретация |
|---|---|---|---|
Треугольник с опорными точками 0, 2 |
Множество поддержки (0, 2) |
(-1, 3) |
Более широкое окно численного интегрирования |
Возрастающее плечо на 0, 1 |
Множество поддержки (0, +infinity), ядро [1, +infinity) |
(0, 1) |
Конечное численное окно, не множество поддержки |
Гауссова функция с центром 0 |
Множество поддержки — вещественная прямая | (-4, 4) |
Выбранное окно усечения для численных расчётов |
Изменение FuzzySet.supportSet должно менять интервал исторической дефаззификации,
не меняя вычислитель функции принадлежности. Тесты совместимости защищают это поведение,
пока фасад делегирует работу современной модели областей.
Правило представления¶
Аналитическая функция принадлежности и выборочное нечёткое множество — разные представления. Сканирование сетки может дать ответ на ограниченный приближённый запрос, но не устанавливает точное множество поддержки непрерывного семейства. Каждый приближённый результат вычисления должен сохранять область, разрешение или допуск и метод, которым он получен.
Это правило не позволяет принимать численное округление к нулю из-за потери представимости, границы графика или выбранное пользователем окно центроида за математические метаданные.
Исполняемые типы областей¶
Современный скалярный API предоставляет три неизменяемых объекта-значения:
from fuzzyroutines import ContinuousUniverse, DiscreteUniverse, IntegrationDomain
realLine = ContinuousUniverse()
boundedUniverse = ContinuousUniverse(0.0, 1.0, leftClosed=True, rightClosed=True)
sampledUniverse = DiscreteUniverse((0.0, 0.5, 1.0))
integrationDomain = IntegrationDomain(0.1, 0.9).ValidateWithin(boundedUniverse)
ContinuousUniverse использует None только для неограниченного конца и явно хранит
включение границ. DiscreteUniverse требует явного непустого строго возрастающего
кортежа различных конечных координат. IntegrationDomain всегда является конечным
замкнутым интервалом и может быть проверен на согласованность с непрерывным
универсальным множеством до начала численной операции.
IntegrationDomain.FromLegacyInterval(...) и ToLegacyInterval() образуют единственный
адаптер совместимости исторических кортежей supportSet. Фасад FuzzySet теперь хранит
этот объект-значение внутри, сохраняя историческую форму кортежа в публичных геттере и сеттере.
Вычисление свойств через API¶
DeriveProperties(membershipFunction, universe) возвращает один из двух точных типов результата:
ContinuousFuzzyPropertiesиспользует аналитическую геометрию современногоMembershipFunctionили известного исторического семействаMFunctionи представляет множества неизменяемыми объединениями компонентовContinuousInterval;DiscreteFuzzyPropertiesвычисляет каждую координату объявленногоDiscreteUniverse. В дискретной топологии любое подмножество замкнуто, поэтому множество поддержки и его замыкание совпадают.
Каждый результат предоставляет positiveSupport, supportClosure, core, boundary,
height и isExact == True. Области ограничиваются объявленным универсальным множеством;
замыкание множества поддержки вычисляется в его относительной топологии.
Поэтому предельная точка вне универсального множества не может быть добавлена как одноточечная компонента.
from fuzzyroutines import ContinuousUniverse, DeriveProperties
from fuzzyroutines.FuzzyRoutines import MFunction
membershipFunction = MFunction("triangle", a=0.0, b=2.0, c=1.0)
properties = DeriveProperties(membershipFunction, ContinuousUniverse())
assert properties.positiveSupport.Contains(0.5)
assert properties.core.Contains(1.0)
assert properties.height == 1.0
SampleProperties(membershipFunction, analysisDomain, sampleCount) — другой API
с другим типом результата. SampledFuzzyProperties записывает конечную область анализа,
число точек, координаты, степени принадлежности и method="uniform-grid";
его свойство isExact всегда ложно. Поля называются positiveSupportSamples,
coreSamples, boundarySamples и heightEstimate, чтобы конечная сетка
не могла выдаваться за точную непрерывную геометрию.
Множество поддержки гауссовой функции аналитически определяется как вещественная прямая, даже если вычисление в удалённой точке с плавающей точкой округляется к нулю из-за потери представимости. Логистическая функция и функция Харрингтона имеют пустое ядро на вещественной прямой при высоте один: супремум приближается, но не достигается ни в одной конечной координате.