Открыто
16.03.2015, 08:31
Реализовать класс, моделирующий булеву переменную в нечёткой логике.
Если обычная булева переменная может иметь лишь одно из двух значений (ИСТИНА или ЛОЖЬ), то её нечёткий аналог вместо этого оперирует целым множеством значений с разной степенью принадлежности.
Например, можно задать три разновидности истины:
истинно = 0/0 + 0/0.2 + 0.25/0.4 + 0.5/0.6 + 0.9/0.8 + 1/1.
более-менее истинно = 0/0 + 0/0.2 + 0.5/0.4 + 0.7/0.6 + 0.95/0.8 + 1/1.
почти истинно = 0/0 + 0.05/0.2 + 0.4/0.4 + 0.7/0.6 + 1/0.8 + 0.8/1.
Подобная запись означает, что величина, истинная с вероятностью p=0.6, принадлежит нечёткому множеству «истинно» со степенью принадлежности 0.5, «более-менее истинно» — 0.7 и «почти истинно» — также 0.7 (соответствующие члены выделены курсивом выше).
Для булевых переменных, заданных на нечётком множестве, можно определить различные операции.
Операция И: взять минимум функции принадлежности в интервале [0,1].
Операция ИЛИ: взять максимум функции принадлежности в интервале [0,1].
Операция НЕ: вычесть из единицы значение функции принадлежности на интервале [0,1].
Перейти к чёткому представлению: вычислить «центр масс», просуммировав вероятности с соответствующими весами. Например, для «более-менее истинно» это значение будет равно
(0 * 0 + 0 * 0.2 + 0.5 * 0.4 + 0.7 * 0.6 + 0.95 * 0.8 + 1 * 1) / (0 + 0 + 0.5 + 0.7 + 0.95 + 1)=0.75
Аппроксимация: подобрать для результата операции наиболее близкий вариант из множества заданных. Например, при вычислении «почти истинно» ИЛИ «истинно» получим следующее нечёткое множество:
0/0 + 0.05/0.2 + 0.4/0.4 + 0.7/0.6 + 1/0.8 + 1/1. Оно почти совпадает с «более-менее истинно».
Необходимо создать класс, который бы инкапсулировал нечёткое множество так, как описано выше, и реализовывал бы все перечисленные операции.
Обратите внимание, что множество интервалов значений вероятности у разных переменных может отличаться. В приведенных выше примерах оно было фиксировано: { 0, 0.2, 0.4, 0.6, 0.8, 1 }, но в общем случае это может быть не так и потребуется дополнительное разделение интервалов.