fuzzy логика что такое
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Что такое нечеткая логика (fuzzy logic): принцип работы, примеры, применение
Введение в нечеткую логику
Нечеткая логика – это логическая или управляющая система n-значной логической системы, которая использует степени состояния («степени правды») входов и формирует выходы, зависящие от состояний входов и скорости изменения этих состояний. Это не обычная «истинная или ложная» (1 или 0), булева (двоичная) логика, на которой основаны современные компьютеры. Она в основном обеспечивает основы для приблизительного рассуждения с использованием неточных решений и позволяет использовать лингвистические переменные.
Нечеткая логика была разработана в 1965 году профессором Лотфи Заде в Калифорнийском университете в Беркли. Первым приложением было выполнение обработки компьютерных данных на основе естественных значений.
Если говорить проще, состояниями нечеткой логики могут быть не только 1 или 0, но и значения между ними, то есть 0.15, 0.8 и т.д. Например, в двоичной логике, мы можем сказать, что мы имеем стакан горячей воды (то есть 1 или высокий логический уровень) или стакан холодной воды, то есть (0 или низкий логический уровень), но в нечеткой логике, мы можем сказать, что мы имеем стакан теплой воды (ни горячий, ни холодный, то есть где-то между этими двумя крайними состояниями). Четкая логика: да или нет (1, 0). Нечеткая логика: конечно, да; возможно, нет; не могу сказать; возможно да и т.д.
Базовая архитектура нечеткой логической системы
Система нечеткой логики состоит из следующих модулей:
Фазифаер (Fuzzifier или оператор размытия). Он принимает измеренные переменные в качестве входных данных и преобразует числовые значения в лингвистические переменные. Он преобразует физические значения, а также сигналы ошибок в нормализованное нечеткое подмножество, которое состоит из интервала для диапазона входных значений и функций принадлежности, которые описывают вероятность состояния входных переменных. Входной сигнал в основном разделен на пять состояний, таких как: большой положительный, средний положительный, малый, средний отрицательный и большой отрицательный.
Контроллер. Он состоит из базы знаний и механизма вывода. База знаний хранит функции принадлежности и нечеткие правила, полученные путем знания работы системы в среде. Механизм вывода выполняет обработку полученных функций принадлежности и нечетких правил. Другими словами, механизм вывода формирует выходные данные на основе лингвистической информации.
Дефазифаер (Defuzzifier или оператор восстановления чёткости). Он выполняет обратный процесс фазифаера. Другими словами, он преобразует нечеткие значения в нормальные числовые или физические сигналы и отправляет их в физическую систему для управления работой системы.
Принцип работы системы нечеткой логики
Нечеткая операция предполагает использование нечетких множеств и функций принадлежности. Каждое нечеткое множество представляет собой представление лингвистической переменной, которая определяет возможное состояние вывода. Функция принадлежности является функцией общего значения в нечетком множестве, так что и общее значение, и нечеткое множество принадлежат универсальному множеству.
Степени принадлежности в этом общем значении в нечетком множестве определяют выход, основанный на принципе IF-THEN. Принадлежность назначается на основе предположения о выходе с помощью входов и скорости изменения входных данных. Функция принадлежности в основном представляет собой графическое представление нечеткого множества.
Рассмотрим такое значение «х», что x ∈ X для всего интервала [0,1] и нечеткого множества A, которое является подмножеством X. Функция принадлежности «x» в подмножестве A задается как: fA (x), Обратите внимание, что «x» обозначает значение принадлежности. Ниже приводится графическое представление нечетких множеств.
В то время как ось x обозначает универсальный набор, ось y обозначает степени принадлежности. Эти функции принадлежности могут быть треугольными, трапециевидными, одноточечными или гауссовыми по форме.
Практический пример системы на основе нечеткой логики
Давайте разработаем простую систему нечеткого управления для управления работой стиральной машины, так чтобы нечеткая система контролировала процесс стирки, водозабор, время стирки и скорость отжима. Входными параметрами здесь являются объем одежды, степень загрязнения и тип грязи. В то время как объем одежды определял бы водозабор, степень загрязнения в свою очередь определялась бы прозрачностью воды, а тип грязи определялся временем, когда цвет воды остается неизменным.
Первым шагом будет определение лингвистических переменных и терминов. Для входных данных лингвистические переменные приведены ниже:
Для вывода лингвистические переменные приведены ниже:
Второй шаг включает в себя построение функций принадлежности. Ниже приведены графики, определяющие функции принадлежности для двух входов. Функции принадлежности для качества грязи:
Функции принадлежности для типа грязи:
Третий шаг включает разработку набора правил для базы знаний. Ниже приведен набор правил с использованием логики IF-THEN (если-тогда):
IF качество грязи Small И Тип грязи Greasy, THEN Время стирки Long.
IF качество грязи Medium И Тип грязи Greasy, THEN Время стирки Long.
IF качество грязи Large и тип грязи Greasy, THEN Время стирки Very Long.
IF качество грязи Small И Тип грязи Medium, THEN Время стирки Medium.
IF качество грязи Medium И Тип грязи Medium, THEN Время стирки Medium.
IF качество грязи Large и тип грязи Medium, THEN Время стирки Medium.
IF качество грязи Small и тип грязи Non-Greasy, THEN Время стирки Very Short.
IF качество грязи Medium И Тип грязи Non-Greasy, THEN Время стирки Medium.
IF качество грязи Large и тип грязи Greasy, THEN Время стирки Very Short.
Фазифаер, который первоначально преобразовал входные данные датчиков в эти лингвистические переменные, теперь применяет вышеуказанные правила для выполнения операций нечеткого набора (например, MIN и MAX) для определения выходных нечетких функций. На основе выходных нечетких множеств разработана функция принадлежности. Последним шагом является этап дефазификации, в котором дефазифаер использует выходные функции принадлежности для определения времени стирки.
Области применения нечеткой логики
Системы нечеткой логики могут использоваться в автомобильных системах, таких как автоматические коробки передач. Приложения в области бытовых приборов включают в себя микроволновые печи, кондиционеры, стиральные машины, телевизоры, холодильники, пылесосы и т. д.
Введение в теорию нечеткой логики
Введение
Свое начало математическая теория нечетких множеств (fuzzy sets) и сама нечеткая логика (fuzzy logic) ведет с 1965 года. Ее отцом-основателем является профессор Лотфи Заде (Lotfi Zadeh) из университета Беркли, именно он в своей статье «Fuzzy Sets» в журнале Information and Control и ввел оба этих понятия. Данный математический аппарат позволил ввести в такую точную науку, как математика, нечеткие (размытые) понятия, которыми оперирует любой человек, и заложил основу принципиально новым методам решения задач на основе мягких вычислений. Все эти нововведения, при правильном их использовании, могут значительно облегчить процесс решения задач классификации, создания экспертных систем и построения нейронных сетей.
Однако практическое применение нечеткой логики этим не ограничилось, в действительности свое наибольшее распространение данный математический аппарат получил в теории автоматического управления. Именно с этим и можно связать появление еще одного нового понятия — нечеткой модели. Нечеткая модель — это частный случай математической модели.
1. Теория нечетких множеств и нечеткой логики
Новая теория Лотфи Заде в некотором роде расширяет привычные нам границы математической логики и теории множеств. Математическая логика способна работать только со строго формализованными данными, а принадлежность объекта к тому или иному множеству определяется лишь двумя понятиями, то есть само понятие «принадлежность» — дискретная величина, способная принимать два значения:
В своей теории нечетких множеств Лотфи Заде отошел от дискретного понятия «принадлежности» и ввел новое — «степень принадлежности», а привычные «множества» были заменены на «нечеткие множества».
1.1. Основные термины и определения
Определение 1. Нечетким множеством (fuzzy set) на универсальном множестве
называется совокупность пар
, где
— степень принадлежности элемента
нечеткому множеству.
Определение 2. Степень принадлежности — это число из диапазона [0, 1]. Чем выше степень принадлежности, тем в большей мере элемент универсального множества соответствует свойствам данного нечеткого множества. Так, если степень принадлежности равна 0, то данный элемент абсолютно не соответствует множеству, а если равна 1, то можно говорить, наоборот, о полном соответствии. Эти два случая являются краевыми и в отсутствии иных вариантов представляли бы из себя обычное множество. Наличие всех остальных вариантов и есть ключевое отличие нечеткого множества.
Определение 3. Функцией принадлежности (membership function) называется функция, которая позволяет вычислить степень принадлежности произвольного элемента универсального множества нечеткому множеству. Следовательно, область значений функций принадлежности должна принадлежать диапазону [0, 1]. В большинстве случаев функция принадлежности — это монотонная непрерывная функция.
Определение 4. Лингвистической (нечеткой) переменной (linguistic variable) называется переменная, значениями которой могут быть слова или словосочетания некоторого естественного или искусственного языка. Именно из лингвистических переменных и состоят нечеткие множества. При определении нечеткого множества количество и характер нечетких переменных субъективны для каждой отдельной задачи.
Определение 5. Терм–множеством (term set) называется множество всех возможных значений, которые способна принимать лингвистическая переменная.
Определение 6. Термом (term) называется любой элемент терм–множества. В теории нечетких множеств терм формализуется нечетким множеством с помощью функции принадлежности. Функция принадлежности для каждого термина индивидуальна и зачастую уникальна. Существуют различные методы построения этих функций: прямые, косвенные и методы относительных частот. В их основе зачастую лежат характерные точки функции принадлежности или эмпирические данные эксперта данной предметной области.
Определим некоторую лингвистическую переменную с названием «Возраст». По определению «Возраст» — период, ступень в развитии и росте человека, животного, растения. Минимальное значение этой переменной равно 0, то есть человеку не исполнилось и года. В качестве максимального значения возьмем 80. В зависимости от конкретного возраста человека мы можем дать оценку: «новорожденный», «юный», «молодой», «среднего», «старый», «пожилой» и так далее. Этот список может вместить в себя довольно большое количество элементов. Он будет являться терм-множеством для нашей лингвистической переменной, а его элементами — термами.
На рисунке ниже приведен пример нечеткой переменной «Возраст», для которой задали терм-множество только из трех термов: «Юный», «Средний», «Старый». Каждый из термов имеет свою функцию принадлежности.
Рассмотрим случай, когда возраст человека равен 30 годам, что на рисунке будет соответствовать перпендикуляру, проведенному из точки (30, 0). Эта прямая будет пересекать все три функции принадлежности в точках:
Из координат этих трех точек можно сделать вывод, что человека в 30 лет никак нельзя назвать старым, а если выбирать между юным и средним возрастом, то преобладает второе. Степень принадлежности к терму «Средний» равна 0.29, что довольно мало, и в действительности для человека в 30 лет куда лучше подошел бы иной терм, например «Молодой».
Определение 7. Дефаззификацией (defuzzification) называется процедура преобразования нечеткого множества в четкое число. На данный момент выделяют более двадцати методов, причем их результаты могут весьма значимо отличаться друг от друга. Следует отметить, что лучшие результаты дает дефаззификации по методу центра тяжести (center of gravity).
1.2. Нечеткая логика
Нечеткая логика — это обобщение традиционной аристотелевой логики на случай, когда истинность рассматривается как лингвистическая переменная. Как и в классической логике, для нечеткой логики определены свои нечеткие логические операции над нечеткими множествами. Для нечетких множеств существуют все те же операции, что и для обычных множеств, только их вычисление на порядок сложнее. Отметим также, что композиция нечетких множеств — есть нечеткое множество.
Основными особенностями нечеткой логики, отличающими ее от классической, являются максимальная приближенность к отражению реальности и высокий уровень субъективности, вследствие чего могут возникнуть значительные погрешности в результатах вычислений с ее использованием.
Нечеткая модель — математическая модель, в основе вычисления которой лежит нечеткая логика. К построению таких моделей прибегают в случае, когда предмет исследования имеет очень слабую формализацию, и его точное математическое описание слишком сложное или просто не известно. Качество выходных значений этих моделей (погрешность модели) напрямую зависит только от эксперта, который составлял и настраивал модель. Для минимизации ошибки лучшим вариантом будет составление максимально полной и исчерпывающей модели и последующая ее настройка средствами машинного обучения на большой обучающей выборке.
Ход построения модели можно разделить на три основных этапа:
От первого этапа непосредственно зависят два других, и именно он определяет будущее функционирование модели. База знаний или, как по-другому ее называют, база правил — это совокупность нечетких правил вида: «если, то», определяющих взаимосвязь между входами и выходами исследуемого объекта. Количество правил в системе не ограниченно и также определяется экспертом. Обобщенный формат нечетких правил такой:
Если условие (посылка) правила, то заключение правила.
Условие правила характеризует текущее состояние объекта, а заключение — то, как это условие повлияет на объект. Общий вид условий и заключений нельзя выделить, так как они определяются нечетким логическим выводом.
Каждое правило в системе имеет вес — данный параметр характеризует значимость правила в модели. Весовые коэффициенты присваиваются правилу в диапазоне [0, 1]. Во многих примерах нечетких моделей, которые можно встретить в литературе, данные веса не указаны, но это не означает, что их нет, в действительности для каждого правила из базы в таком случае вес фиксирован и равен единице. Условия и заключения для каждого правила могут быть двух видов:
В зависимости от созданной базы знаний для модели определяется система нечеткого логического вывода. Нечетким логическим выводом называется получение заключения в виде нечеткого множества, соответствующего текущим значениях входов, с использованием нечеткой базы знаний и нечетких операций. Двумя основными типами нечеткого логического вывода являются Мамдани и Сугено.
1.3. Нечеткий логический вывод Мамдани
Нечеткий логический вывод по алгоритму Мамдани выполняется по нечеткой базе знаний:
Значения входных и выходной переменной в ней заданы нечеткими множествами.
Эту базу также можно записать как:
Введем новое обозначение: — функция принадлежности входной или выходной нечеткой переменной v нечеткому терму t.
Степени принадлежности входного вектора нечетким термам из базы знаний рассчитываются следующим образом:
— данная функция будет характеризовать результат работы j-го правила из базы знаний;
где — операция из s-нормы (t-нормы), т.е. из множества реализаций логической операции ИЛИ (И). Наиболее часто используются следующие реализации: для операции ИЛИ — нахождение максимума и для операции И — нахождение минимума.
После нахождения для
мы получим m новых функций принадлежности, которые в совокупности будут образовывать новое нечеткое множество, обозначим его
, соответствующее входному вектору
.
Особенностью этого нечеткого множества является то, что универсальным множеством для него является терм-множество выходной переменной .
Иными словами, используя термины нечеткой логики, произвести импликацию и агрегацию условий. Импликация моделируется двумя методами: нахождением минимума или произведения множеств, агрегация — нахождением максимума или суммы множеств.
После этого мы получим результирующее нечеткое множество, дефаззификация которого и даст нам точный выход системы.
1.4. Нечеткий логический вывод Сугено
Нечеткий логический вывод по алгоритму Сугено выполняется по нечеткой базе знаний:
База знаний Сугено аналогична базе знаний Мамдани за исключением заключений правил , которые задаются не нечеткими термами, а линейной функцией от входов:
Эту базу также можно записать как:
Введем новое обозначение: — функция принадлежности входной или выходной нечеткой переменной v нечеткому терму t.
Степени принадлежности входного вектора нечетким термам из базы знаний рассчитываются следующим образом:
— данная функция будет характеризовать результат работы j-го правила из базы знаний;
где — операция из s-нормы (t-нормы), т.е. из множества реализаций логической операции ИЛИ (И). В нечетком логическом выводе Сугено наиболее часто используются следующие реализации треугольных норм: вероятностное ИЛИ как s-норма и произведение как t-норма.
После нахождения для
мы получим m новых функций принадлежности, которые в совокупности будут образовывать новое нечеткое множество, обозначим его
, соответствующее входному вектору
.
2. Библиотека нечеткой логики FuzzyNet
На практике создание и работа даже с очень простой нечеткой моделью — весьма непростая задача, однако имеется множество различных программных средств и библиотек, которые существенно ее упрощают. Рассмотрим на примерах тестовых скриптов из библиотеки FuzzyNet для MQL5 процесс создания и работы с двумя нечеткими моделями.
2.1. Проектирование систем типа Мамдани
Первый пример — скрипт Tips_Sample_Mamdani.mq5 из библиотеки FuzzyNet для MQL5. В нем реализована нечеткая модель для вычисления чаевых, которые посетителю заведения предпочтительнее оставить, опираясь на свою оценку качества обслуживания и еды. Данная система имеет два нечетких логических входа, один выход, базу знаний из трех правил и систему логического вывода типа Мамдани.
Входными параметрами будут нечеткие переменные «еда» (food) и «сервис» (service), обе переменные оцениваются по шкале от 0 до 10 — это их минимальные и максимальные значения. Переменная «еда» состоит из двух термов: «невкусная» (rancid), «вкусная» (delicious). Переменная «сервис» будет состоять из трех нечетких термов: «плохой» (poor), «хороший» (good), «отличный» (excellent).
На выходе получим нечеткую переменную «чаевые» (tips). Определим диапазон значений оставляемых чаевых от 5 до 30% процентов от суммы в чеке и заведем для этой переменной три терма: «маленькие» (cheap), «средние» (average), «большие» (generous).
База знаний этой системы будет состоять из трех правил:
Теперь, имея общие представления о системе, рассмотрим процесс ее создания:
Теперь мы имеем готовую модель вычисления чаевых на основе системы нечеткого логического вывода Мамдани.
2.2. Проектирование систем типа Сугено
Примером реализации системы типа Сугено будет скрипт для вычисления необходимого управления системой круиз-контроля автомобиля. Этот скрипт описан в файле Cruise_Control_Sample_Sugeno.mq5 библиотеки FuzzyNet для MQL5 и является одним из примеров применения нечетких моделей для решения задач автоматического управления.
Именно для таких одномерных задач в системах автоматического управления (САУ) и нашла наибольшее распространение нечеткая логика. Постановка этих задач звучит примерно так: некий объект в момент времени находится в состоянии «A», необходимо, чтобы за время
он пришел в состояние «B». Для решения задач такого типа весь временной участок разбивают на
частей, находят шаг по времени, равный
, и далее САУ необходимо вырабатывать управление в каждой точке
, где i=0,1,2. n.
С данной задачей легко справляются различные ПИД-регуляторы, но у них есть один существенный недостаток — они не могут выработать, скажем так, «плавное» управление. То есть если построить систему круиз-контроля автомобиля на основе ПИД-регулятора, при изменении скорости эта система выведет вас на заданную, но при этом могут быть различные рывки и толчки. Нечеткий регулятор сможет выполнить все гораздо плавнее и комфортнее с точки зрения человека.
Становится очевидным, что на выходе нашего нечеткого регулятора будет необходимое изменение скорости в виде ускорения, а на входе будет ошибка и первая производная по ошибке. Ошибка — отклонение текущего состояния от желаемого. Иными словами, на вход системы будут поступать следующие сведения:
Поскольку наша модель имеет систему логического вывода Сугено, выходное значение «ускорение» (Accelerate) не будет иметь максимального и минимального значения, а вместо нечетких терминов будут линейные комбинации входных переменных, которые также будут иметь имена: «не изменять» (zero), «увеличить» (faster), «уменьшить» (slower), «поддерживать» (func). Распишем все четыре линейные комбинации. Для этого обозначим переменные SpeedError как , SpeedErrorDot как
, а Accelerate как
, тогда получим уравнения:
База знаний этой системы будет состоять из девяти правил:
Рассмотрим непосредственно ход создания системы:
Создадим переменную «ошибка скорости» и добавим ее в систему:
Создадим переменную «изменение ошибки скорости» и также добавим ее в систему:
Формирование линейной функции осуществляется следующим образом: каждая входная переменная будет являться неизвестной уравнения с коэффициентом, полученным из массива коэффициентов. Таким образом, коэффициенты в массиве должны располагаться в том порядке, в котором заносились входные переменные. Так, при первой входной переменной будет коэффициент с индексом 0, при второй — с индексом 1 и так далее. Поэтому длина массива коэффициентов должна быть больше на единицу или равна количеству входных переменных. Если длины равны, то коэффициент при свободном члене будет равен нулю, иначе его значение будет равно последнему элементу массива.
2.3. Расчет систем типа Мамдани и Сугено
На вход нечеткой системы должна подаваться нечеткая переменная и ее значение. Как говорилось выше, нечеткие переменные принимают значения из их терм-множества. Следовательно, результат вычисления системы будет зависть от функций принадлежности, которые соответствуют термам, поданным на вход, при нечетких входных переменных. Однако в большинстве случаев на вход системы посылают нечеткие переменные в виде простых числовых значений и на выходе хотят получить точный результат в таком же виде. В этом случае получается так, что нечеткий терм не имеет явного объявления, а его функция принадлежности представляется как константная функция принадлежности. Именно с этим частным случаем и работают системы, написанные с использованием библиотеки FuzzyNet.
Что же именно нужно подавать на вход системы и в каком виде мы получим результат от нее?
Сформируем входной список для нашей системы типа Мамдани:
В описанных выше примерах обе системы, как Мамдани так и Сугено, имеют лишь по одному выходу, хотя в общем случае, как и на входы, никаких ограничений на их количество нет. Структура входа и выхода ничем не отличается.
Выход для системы типа Мамдани:
Теперь для каждой системы вызываем функцию Calculate, которая принимает один параметр — список входов, а возвращает список выходов. По индексу 0 из этого списка получим значения выхода системы, который представлен как объект класса Dictionary_Obj_Double. Используя методы Key и Value для данного объекта, можно получить переменную и ее результат соответственно.
Выполним расчет для системы Мамдани и выведем на экран полученное число при нечеткой выходной переменной fvTips:
Проделаем то же самое с системой типа Сугено:
Заключение
Более подробно ознакомиться со скриптами, описанными выше, а также создать свою нечеткую модель вы можете, скачав библиотеку FuzzyNet для MQL5 или MQL4. Важно понимать, что построение «боевых» нечетких моделей — это довольно непростая работа, даже с использованием каких-либо вспомогательных библиотек, а каждая готовая модель требует обязательной доскональной проверки и настройки.