Здравствуйте, Sender219, Вы писали:
S>Здравствуйте, vadimcher, Вы писали:
V>>А какие функции принадлежности для посылок и импликаций, т.е. для левых и правых частей правил, и как Вы их задаете?
S>Принадлежность всех термов для лингв. переменных задаю 4 точками a, b, c, d.
S>Крайние задают носитель множества, две центральные (b, c) — ядро.
S>Т.е. функции принадлежности кусочно-линейные: либо трапецеидальная, либо треугольная (в случае b==c).
S>Рассматриваю пример с тремя продукционными правилами, выводы которых соответствуют трем различным термам для результирующей лингв. переменной.
S>Каждое правило состоит из двух посылок, со связкой либо "И", либо "ИЛИ". Для каждой посылки определяю степень уверенности, затем, в зависимости от связки между посылками в правиле, нахожу либо min, либо max. Так для каждого правила.
S>Т.о. получаю три числа, например: 0.37, 0.94 и 0.11.
Тогда, проблем с фазификацией быть не должно: все входные легко преобразуются по четырех-точечным функциям в нечеткие входные предпосылки правил.
Далее для &&-правила берем min, для ||-правила -- max. Так?
В итоге три числа.
На самом деле, у Вас три степени уверенности для трех термов. На сколько я помню, Вам требуется еще три соответствующие функции принадлежности для выходной переменной.
Например, выходная переменная -- угол, на который надо повернуть руль. Измеряется от -1 до +1. Три терма: налево, прямо, направо. Им соответствуют три функции принадлежности, например (в виде ваших четверок чисел (a, b, c, d)): (-1, -1, -0.5, 0), (-0.5, 0, 0, 0.5), (0, 0.5, 1, 1).
Вы получили из правил, к примеру, 0.7 налево, 0.5 прямо, 0.1 направо. Вам нужен теперь конкретный угол.
Далее для каждой из функций принадлежности каждого терма выходной переменной Вы берете минимум между ней и степенью уверенности, полученному из соответствующего правила. Т.е. Вы "обрезаете" трапеции по степени уверенности, а затем берете максимум обрезанных трапеций. После этого полученная многоступенчатая функция должна быть преобразована к единому числу. Например, методом среднего. В этом случае, Вам только надо научится интегрировать эту функцию, помноженную или нет на значение выходной переменной. Пытаться представить итоговую функцию, которую вы интегрируете, в каком-либо виде -- самоубийство. Лучше брать максимум трапеций по ходу интегрирования.
Разобьем весь интервал [-1,1] на много-много кусочков. Для каждого из них Вы смотрите максимум по всем термам выходной переменной минимума между уверенностью для этого терма и значением функции принадлежности в данной точке. После этого Вы это число умножаете на значение в этой точке, делите на длину интервала и суммируете по всем точкам -- получаем интеграл yf(y). Если не умножать на значение -- интеграл f(y). Делим первый на второй. Вроде ничего сложного.
В примере выше. Максимум обрезанных трапеций проходит через точки (-1, 0.7), (-0.35, 0.7), (-0.25, 0.5), (0.25, 0.5), (0.45, 0.1), (1, 0.1). Интегрируем умножая на значение, затем без умножения, делим одно на другое и получаем около -0.3. Рулим слегка влево.