Типизированное представление лингвистического терма¶
Область действия¶
Современный API представляет один лингвистический терм как неизменяемую связь:
LinguisticTerm(name, fuzzySet)
name — непустая строка, сохраняемая точно в объявленном виде. fuzzySet — современный
ScalarFuzzySet; представление не адаптирует исторический изменяемый FuzzySet неявно.
Упорядоченная шкала представляется так:
LinguisticScale((term1, term2, ...))
Явный кортеж сохраняется без сортировки или нормализации. Он должен быть непустым,
содержать только LinguisticTerm и использовать уникальные при регистронезависимом сравнении
Unicode имена. Объявления, различающиеся только регистром, например Low и LOW,
отклоняются: они сделали бы регистронезависимый поиск неоднозначным.
GetTermByName(termName, exactMatching=True) ищет по полному имени. По умолчанию имена
сравниваются точно, включая регистр. При exactMatching=False сравниваются имена после
свёртки регистра Unicode. Оба режима возвращают исходный объявленный объект LinguisticTerm
или None; ни один не ищет по подстроке, префиксу, приблизительному совпадению или принадлежности.
Фаззификация и уверенность¶
Fuzzify(coordinate, policy) вычисляет каждый терм ровно один раз и возвращает
FuzzificationResult. Упорядоченный кортеж memberships сохраняет каждый терм и степень,
а confidence — максимальная степень принадлежности, не вероятность.
FuzzificationPolicy явно задаёт оба неопределённых случая:
minimumConfidenceотклоняет классификацию, если максимальная степень меньше или равна порогу; нулевое значение по умолчанию отклоняет нулевое покрытие, положительное — также близкое к нулю;tieToleranceзадаёт абсолютное расстояние от максимума, считающееся равенством;tiePolicyвыбираетfirst,lastилиallсреди равных термов в объявленном порядке шкалы.
Нулевой допуск равенства сравнивает проверенные степени напрямую. Различные значения
Fraction остаются различными, даже если преобразование в float дало бы одно значение.
Положительный допуск использует нестрогое сравнение расстояния; рациональные степени
и смеси рациональных и float сохраняют свои точные представленные значения при сравнении.
Значения, записанные в результате и политике, не преобразуются.
Когда обе степени и явно положительный допуск имеют тип float, существующее правило
граничного округления также принимает расстояние, относительно близкое к допуску
(rel_tol=1e-12, abs_tol=0). Например, степени 0.7 и 0.75 считаются равными
при допуске 0.05, несмотря на округление вычитания. Это правило не применяется
к нулевому допуску или рациональным значениям.
Полный кортеж принадлежностей доступен даже при отсутствии совпадения. Координата должна принадлежать универсальному множеству каждого терма; частичные векторы оценок отклоняются. Семантика зафиксирована в ADR-0013.
Выборочная диагностика шкалы¶
Diagnose(analysisDomain, policy) вычисляет явную сетку с сохранением концов
на конечной IntegrationDomain. Каждый терм должен использовать ContinuousUniverse,
содержащее всю область анализа. Для каждой координаты выборки \(x_j\)
результат записывает все упорядоченные степени принадлежности и
При явном пороге активности \(\tau\) терм активен только при \(\mu_{L_i}(x_j)>\tau\). Точка выборки является пробелом, если активных термов нет, и перекрытием, если активны хотя бы два. Свидетельства качества разбиения используют
ScaleDiagnosticsResult предоставляет все точки выборки, экстремумы и среднее покрытия,
доли пробелов и перекрытий, максимальное число одновременно активных термов,
среднюю и максимальную ошибки разбиения. partitionTolerance определяет, допустимы ли
все выборочные ошибки. Наблюдения воспроизводимы для объявленных области, размера сетки
и допусков, но не доказывают непрерывное свойство между координатами.
ADR-0014 фиксирует полную границу свидетельств.
Совместимость¶
Исторический fuzzyroutines.FuzzyRoutines.FuzzyScale остаётся доступным.
Его свойство levels по-прежнему предоставляет и принимает исходный изменяемый список
словарей с обязательными ключами name и fSet. Сохраняется защищённая форма вызова
GetLevelByName(levelName, exactMatching=True): по умолчанию поиск точный по полному имени,
при False — регистронезависимый по полному имени через историческую таблицу верхнего регистра.
Имена, совпадающие без учёта регистра, отклоняются для сохранения однозначности.
Современные типы дополняют, а не заменяют изменяемый словарный фасад совместимости.
Исторический Fuzzy() по-прежнему выбирает более поздний уровень при точном равенстве.
Современный эквивалент — явная FuzzificationPolicy(tiePolicy="last"), а не скрытое значение по умолчанию.
Пример¶
from fuzzyroutines import (
ContinuousUniverse,
FuzzificationPolicy,
IntegrationDomain,
LinguisticScale,
LinguisticTerm,
ScaleDiagnosticsPolicy,
ScalarFuzzySet,
)
universe = ContinuousUniverse(0.0, 1.0, leftClosed=True, rightClosed=True)
low = LinguisticTerm("Low", ScalarFuzzySet(universe, lambda value: 1.0 - value))
high = LinguisticTerm("High", ScalarFuzzySet(universe, lambda value: value))
scale = LinguisticScale((low, high))
assert scale.GetTermByName("Low") is low
assert scale.GetTermByName("high", exactMatching=False) is high
result = scale.Fuzzify(
0.5,
FuzzificationPolicy(tiePolicy="all", minimumConfidence=0.1),
)
assert result.confidence == 0.5
assert result.selectedTerms == (low, high)
diagnostics = scale.Diagnose(
IntegrationDomain(0.0, 1.0),
ScaleDiagnosticsPolicy(sampleCount=101),
)
assert diagnostics.minimumCoverage == 0.5
assert diagnostics.gapPoints == ()