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

Контракт универсального множества и множества поддержки

  • Статус: справочный контракт задач #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, чтобы конечная сетка не могла выдаваться за точную непрерывную геометрию.

Множество поддержки гауссовой функции аналитически определяется как вещественная прямая, даже если вычисление в удалённой точке с плавающей точкой округляется к нулю из-за потери представимости. Логистическая функция и функция Харрингтона имеют пустое ядро на вещественной прямой при высоте один: супремум приближается, но не достигается ни в одной конечной координате.