|
КАК ПРОГРАММИРОВАТЬ РОБОТА-УБИЙЦУ Иван Скляров Xakep, номер #053, стр. 053-048-4 Теперь рассмотрим лингвистическую переменную НАПРАВЛЕНИЕ. Т.к. угол обзора у нашего робота аналогичен человеку, примем его равным 180 градусов (с учетом бокового зрения). Для удобства будем считать, что угол в 0 градусов лежит по продольной оси направления движения робота, тогда расположение помехи с правой стороны от оси будет соответствовать положительному углу (от 0 до 90 градусов), а с левой — отрицательному (от 0 до -90 градусов), см. рис.3. Таким образом, угол между направлением движения робота и помехой от 0 до 30 градусов и от 0 до -30 градусов, можно отнести к терму ПРЯМО, а угол от 20 до 90 градусов - к терму ПРАВОЕ. Аналогично угол от -20 до -90 градусов - к терму ЛЕВОЕ. Я не буду строить функции принадлежности для данных термов, т.к. думаю, тебе сейчас это не составит особого труда, также я не буду определять степени принадлежности для термов переменной РУЛЕВОЙ УГОЛ, с ними все аналогично. Разработку этапа фаззификации на этом можно считать законченной, переходим к обработке. Обработка Обработка основана на работе нечетких правил, поэтому мы должны разработать эти самые правила. Нечеткие правила представляют собой обычные операторы условий if... then... (ЕСЛИ... ТОГДА...), с возможностью применения логических связок AND(И), OR(ИЛИ) или NOT(НЕ). Например: ЕСЛИ ДИСТАНЦИЯ=близко И НАПРАВЛЕНИЕ=левое ТОГДА РУЛЕВОЙ УГОЛ=резко вправо. Для удобства составим таблицу, в которой будут отражены все наши правила (см. рис.4). Наш робот будет действовать на основе нечетких правил, представленных в таблице. После применения нечетких правил мы должны сделать заключительный логический вывод. Для этого используются операторы MIN() или MAX(). Ясно, что первый вычисляет минимальные значения, а второй максимальные. Какой из них применять, зависит от того, какой логической связкой объединены переменные в правиле. Если связкой И, применяется оператор MIN(), если связкой ИЛИ — MAX(). Ну а если в правиле всего одна входная переменная, то операторы вовсе не нужны. Допустим, в нашем примере терм БЛИЗКО лингвистической переменной ДИСТАНЦИЯ имеет степень принадлежности 0,7, а терм ЛЕВОЕ переменной НАПРАВЛЕНИЕ — 0,4. Т.к. использована связка И, то применим оператор MIN(): |