КАК ПРОГРАММИРОВАТЬ РОБОТА-УБИЙЦУ

Иван Скляров

Xakep, номер #053, стр. 053-048-3


Фаззификация

Как перейти к нечеткости, ведь показания, снимаемые с датчиков, поступают в четких числовых значениях? Для этого мы должны эти значения преобразовать в значения ЛИНГВИСТИЧЕСКИХ ПЕРЕМЕННЫХ с помощью специальных ФУНКЦИЙ ПРИНАДЛЕЖНОСТИ (мы с тобой не колхозники, поэтому будем разговаривать научным языком, привыкай). Нечеткая логика не оперирует числовыми значениями, а только словами естественного языка (у нас это будет русский язык), которые называются ТЕРМАМИ. Введем для нашего робота три лингвистические переменные:

1. ДИСТАНЦИЯ (расстояние до препятствия) со следующими термами: ДАЛЕКО, СРЕДНЯЯ, БЛИЗКО и ОЧЕНЬ БЛИЗКО.

2. НАПРАВЛЕНИЕ (угол между направлением движения робота и направлением на помеху) с термами: ПРАВОЕ, ПРЯМО, ЛЕВОЕ.

3. РУЛЕВОЙ УГОЛ (угол, на который будет поворачиваться робот, меняя направление движения) с термами: РЕЗКО ВПРАВО, ВПРАВО, ПРЯМО, ВЛЕВО, РЕЗКО ВЛЕВО.

Лингвистические переменные ДИСТАНЦИЯ и НАПРАВЛЕНИЕ являются входными переменными, т.е. переменными, в термы которых преобразуются показания с датчиков, а лингвистическая переменная РУЛЕВОЙ УГОЛ является выходной переменной, т.е. переменной, значение которой после дефаззификации передается на привод робота. Замечу, что, в зависимости от поставленной задачи, лингвистических переменных и термов в них, можно описывать любое множество (максимальное количество термов рекомендуется выбирать от 3 до 7). Однако увеличение числа входных переменных увеличивает по экспоненциальному закону количество нечетких правил (их разработку мы рассмотрим ниже), что усложняет систему. Мы обойдемся минимальным числом переменных и термов, однако при создании реальной модели подобные усложнения сделать желательно.

Теперь необходимо привязать все возможные показания с датчиков к нашим термам, т.е. определить точные физические значения термов для каждой лингвистической переменной. Допустим, переменная ДИСТАНЦИЯ может принимать значения от нуля до бесконечности. Согласно положениям теории нечетких множеств, каждому значению расстояния из указанного диапазона может быть поставлено в соответствие некоторое число от нуля до единицы, которое определяет СТЕПЕНЬ ПРИНАДЛЕЖНОСТИ данного физического расстояния (например, 1 метр) к тому или иному терму лингвистической переменной ДИСТАНЦИЯ. Степень принадлежности определяется, как я уже говорил выше, по функциям принадлежности. Существуют стандартные функции принадлежности (см. рис.1), любую из которых можно произвольно выбирать в зависимости от задачи.

В этих функциях множество значений, при которых F=1, характеризуют полную принадлежность, а при F=0 полную непринадлежность, соответственно значения, лежащие между [0;1] характеризуют нечеткую принадлежность («0» и «1» являются экстремальными значениями). Можно также (а в некоторых случаях даже желательно) подбирать собственную, более подходящую форму функции принадлежности. Построим функцию принадлежности для терма ОЧЕНЬ БЛИЗКО. Будем рассуждать. Расстояние в 1 метр до помехи можно считать точно принадлежащим терму ОЧЕНЬ БЛИЗКО, следовательно, все значения расстояний от 0 до 1 метра примем с принадлежностью «1» (полная принадлежность). Расстояние свыше 2 метров точно нельзя считать принадлежащим терму ОЧЕНЬ БЛИЗКО, т.е. все значения расстояний свыше 2 метров примем полностью не принадлежащими данному терму (принадлежность «0»). Соответственно значения, лежащие между 1 и 2 метрами, являются нечеткими (вроде как и очень близко, но и не совсем очень близко). Наиболее подходящей для наших рассуждений является стандартная функция принадлежности Z. Продолжая подобные рассуждения, мы с тобой построим функции принадлежности для всех термов лингвистической переменной ДИСТАНЦИЯ. Разместим все полученные функции на одном графике (Рис.2). Термы БЛИЗКО и СРЕДНЯЯ представлены П-функциями, а терм ДАЛЕКО S-функцией.

Назад на стр. 053-048-2  Содержание  Вперед на стр. 053-048-4