...Плюс фаззификация всей страны (ещё о логике)

Бесконечнозначная логика (БЗЛ, она же непрерывная логика) в чистом виде способна решать самые сложные задачи, но только в условиях определённости значности аргументов. А это невозможно за редчайшими исключениями. Жизнь коротка, и, естественно, не позволяет бесконечно экспериментировать. Поэтому в чистом виде БЗЛ на практике не применяется. Что же тогда применяется?

В БЗЛ аргумент функции (то, что на входе логического исполнителя) – это точка на непрерывном отрезке [0...1]. Она определяется путём усреднения громадного количества экспертных оценок или косвенными путями. Разумеется, чем точнее аргументы на входе логического исполнителя, тем точнее выход. Получается, что для нахождения входных точек нужен суперкомпьютер, а выходное значение можно рассчитать и вручную.

К счастью во многих случаях ту же точность выхода можно получить не прибегая к дорогостоящему повышению точности входных аргументов. Достаточно обработать по законам БЗЛ выборки из сведений, которые бы использовались для повышения точности входных аргументов. Однако доказать правомочность применения такого трюка удалось далеко не сразу.

Что такое фаззификация

Короче, точную значность входного аргумента допустимо расщепить внутри отрезка [0...1] на множество А неточных (fuzzy, «пушистых») значностей. Такое расщепление называется фаззификацией. Примечательно, что при этом энтропия знаний возрастает несущественно. Фаззификация, конечно, – это тоже операция, но менее ресурсоёмкая, чем достоверизация одной-единственной точной входной значности.

 

Результат фаззификации – это степени соответствия элементов x универсума U некоторому терму (понятию, высказыванию, утверждению). Так как элементы множества A не являются абсолютными истинами, то множество A называют нечётким. Зависимость значений x от элементов упорядоченного универсума U называют функцией соответствия и обозначают ?A(х). Функция соответствия – это не вероятность, поскольку неизвестна функция распределения и нет повторяемости экспериментов.

Как и всякая функция, ?A(х) может быть представлена таблично, аналитически и графически. То же относится и к представлению нечёткого множества. Вот известный пример нечёткого множества «несколько» в табличном представлении:

А = {1/0; 0,1/2; 0,5/3; 0,8/4; 1/5; 0,9/6; 0,8/7;0,5/8; 0,2/9; 0/10}.

Это множество нормализовано: максимальный элемент (т.н. «высота») приведена к единице, остальные – пропорционально уменьшены. Вот так выглядит этот же пример в графическом представлении:

А вот так в аналитическом представлении:

y=kx+a, где:

a=?(i+1)-k(i+1); k=?(i+1)-?(i); i=[1,2,...9].

Рассмотренное нечёткое множество нормализовано, унимодально (имеет единственный абсолютно истинный элемент) и выпуклое. Именно такие нечёткие множества пригодны для дальнейшей логической обработки. Несмотря на термин «нечёткое», множество имеет вполне чёткие значения элементов, которые выдаёт функция соответствия. Их-то и подают на входы логического исполнителя.

В чём достоинство такого подхода? Фишка в том, что нечёткое множество допускает примитивную кусочную аппроксимацию, что далее может быть обработано простыми малоразрядными контроллерами, да ещё и параллельно для каждого интервала. Воистину гениально, потому что сверхбыстро и дёшево!

Логика, работающая с нечёткими множествами, называется нечёткой логикой (НчЛ), а контроллеры, обрабатывающие нечёткие множества, получили название нечётких логических контроллеров (НЛК). В результате работы НЛК, естественно, получается также нечёткое множество. На практике, конечно, нужно не оно, а вывод, на основании которого может быть принято решение. Но об этом чуть позже.

Операции над нечёткими множествами.

Нечёткие множества – это истинностные множества, элементы которых – это точки внутри непрерывного отрезка [0...1]. Следовательно, к этим множествам можно применить правила, известные из БЗЛ.

Основные логические операции над нечёткими множествами – это традиционные дизъюнкция, конъюнкция и отрицание. Их также называют операциями объединения, пересечения и дополнения. Согласно БЗЛ Лукасевича это выборка максимумов, минимумов и дополнение до единицы. Такие операции называют максиминными. Оговорка «согласно БЗЛ Лукасевича» опять же чрезвычайно важна, так как существуют и альтернативные определения этих операций, например, алгебраические: дизъюнкция по Шортлиффу (см. пример в предыдущей статье), и конъюнкция, как произведение элементов. Но в большинстве случаев используется интерпретация именно по Лукасевичу, так как она нетребовательна к аппаратным ресурсам НЛК, вписывается в отработанную теорию и даёт правдоподобные результаты.

Ниже на рисунке приведено: отрицание понятия «несколько» – жёлтая область, дизъюнкция этого понятия с собственным отрицанием – красная ломаная и конъюнкция с собственным отрицанием – синяя ломаная. Примечательно, что в отличие от ортодоксальной чёткой логики дизъюнкция с отрицанием на даёт абсолютной истины, а конъюнкция – абсолютной лжи. Однако конъюнкция нечёткого множества с пустым множеством даёт пустое множество, дизъюнкция же ничего не изменяет. Понятно, что ни конъюнкция, ни дизъюнкция нечёткого множества с самим собой тоже ничего не изменяет.

Перечисленные логические операции, как максиминные, так и алгебраические, подчиняются известным логическим законам коммутативности, ассоциативности, дистрибутивности, а также правилу де-Моргана.

Импликация в НчЛ играет особую роль. Ортодоксальная импликация («если-то») x?y = ¬x?y в НчЛ выглядит несколько иначе: X?Y = min((1-X),Y). Это означает, что при импликации функция соответствия X исключает из функции соответствия Y значения, превышающие X. Т.е. импликация в НчЛ выглядит, как отсечение самых ненадёжных выходных оценок. Это положено в основу всех алгоритмов НЛК.

Другие часто встречающиеся определения операций над нечёткими множествами – включение, равенство, разность, концентрация и размытие. Первые два определения тривиальны. Разность – это максиминная конъюнкция между уменьшаемым и отрицанием вычитаемого. Концентрация – поэлементное возведение в квадрат, а размытие – поэлементное извлечение квадратного корня.

Вышеупомянутые операции – это чёткие операции. Кроме них НчЛ работает и с нечёткими аналогами: нечёткая дизъюнкция (s-норма), нечёткая конъюнкция (t-норма), нечёткое отрицание, примерное равенство. Эти расширения операций пришли в НчЛ из теории вероятностных метрик. Сейчас они достаточно хорошо изучены и лежат в основе решения нечётких уравнений. Нечёткие операции используются при подозрении на наличие скрытых отношений между множествами, используемыми в качестве входных аргументов. О нечётких операциях и приближённых рассуждениях на их базе я попробую рассказать в одной из следующих статей.

Что такое дефаззификация

Итак, в результате работы НЛК получилось нечёткое множество, но нужно принимать решение. Дефаззификация – это преобразование нечёткого множества в чёткое число. Наиболее известные методы дефаззификации (в порядке убывания адекватности для унимодальных нечётких множеств): по центру тяжести (ЦТ) плоской фигуры, ограниченной осями координат и графиком функции принадлежности, по медиане, делящей пополам площадь этой плоской фигуры, и по среднеарифметическому значению максимумов. Обычно результирующая функция соответствия аппроксимируется кусочным набором простых функций, и дефаззификация методом ЦТ не затрудняет взятие интегралов. Однако метод ЦТ даёт большую погрешность при многоэкстремальном результате (доказано экспериментально), в таких случаях применяют среднеарифметическое максимумов.

ЦТ – это отношение интеграла (или суммы) произведений значений функций соответствия на выборки универсума к интегралу (сумме) значений функций соответствия. Для нашего примера нечёткого множества «несколько» абсцисса ЦТ:

(0,1*2+0,5*3+0,8*4+1*5+0,9*6+0,8*7+0,5*8+0,2*9)/(0,1+0,5+0,8+1+0,9+0,8+0,5+0,2) = 5,56.

Вывод: под понятием «несколько» люди обычно понимают количество из пяти-шести предметов.

Существуют методы получения вывода и без применения дефаззификации. Всё зависит от алгоритма работы НЛК.

Как работают чёткооперационные НЛК

Совокупность функций соответствия универсумов рабочих параметров НЛК термам, связанными между собой импликациями «если … то ...» называют продукционными правилами. Если к этому добавить датчики текущих значений параметров, то получится то, что называют базой знаний. Применение НЛК имеет смысл при неполноте базы в части текущего значения выходного параметра, используемого в цепи обратной связи для регулирования. Работа НЛК сводится к нахождению значения этого параметра по различным алгоритмам.

Пусть мы имеем три универсума A,B,C, каждый из которых является областью возможных значений параметров a,b,c. При этом датчики установлены только для параметров a и b. Однако мы знаем границы изменений всех трёх параметров и нам известны функции соответствия параметров термам «малый», «средний», «высокий» в аналитическом представлении, как кусочно-линейные аппроксимации. Обозначим соответствующие термам нечёткие множества, как A1,A2,A3; B1,B23; C1,C2,C3. См. рисунок 3а.

Установлены следующие правила:

правило 1: если a?A1 & b?B1, то c?C1,

правило 2: если a?A2 & b?B2 , то c?C2,

правило 3: если a?A3 | b?B3, то c?C3.

Факт: a0=35, b0=4,5. Определить c0.

Алгоритм Мамдани

На «хабре» выложена статья http://habrahabr.ru/post/113020/ , описывающая алгоритм Мамдани на языке Java. Язык программирования не нагляден, графика доходчивее. Термы «малый», «средний», «высокий» я обозначил чёрным, красным и синим цветом. Понимающий алгоритм напишет программу на любом языке.

Шаг 1: фаззификация. По известным значениям входных аргументов находим степени истинности предпосылок (левых частей импликаций) для каждого правила (см. ниже рисунок а и рисунок б):

По правилу 1: µ1 = min( µA1(a0), µB1(b0) ) = min(0,25; 0,1) = 0,1.

По правилу 2: µ2 = min( µA2(a0), µB2(b0) ) = min(0,5; 0,75) = 0,5.

По правилу 3: µ3 = max( µA3(a0), µB3(b0) ) = max(0; 0,3) = 0,3.

Шаг2: отсечение. Текущее значение функции соответствия выходной переменной (правые части правил) не может превышать истинности предпосылки – таково свойство импликации. Это позволяет построить из каждого из нечётких множеств C1,C2,C3 новые множества C01,C02,C03, отсечением «верхушек» множеств C1,C2,C3 уровнями истинности µ1,µ2,µ3, как показано залитыми областями на рисунке в.

Шаг3: композиция. Нечёткие множества C01,C02,C03 объединяют в одно нечёткое множество C0, представляющее собой фаззифицированное значение c0 выходного параметра c. Объединение производится по максимальной огибающей отсеченных областей – это вся затемнённая область на рисунке 3в.

Шаг4: дефаззификация. Вычисляют подходящим методом (обычно по интегральному ЦТ плоской фигуры) значение выхода c0. В приведенном примере дефаззификация множества C0 по ЦТ даёт c0=0,61.

В 1995 году Кастро (Castro) показал, что при симметричных треугольных функциях соответствия алгоритм Мамдани универсален.

Алгоритм Цукамото

Алгоритм Цукамото применяют только для монотонных функций соответствия выходного параметра, поэтому этот алгоритм не универсален, зато прост. Шаг1 и шаг2 – те же, что и в алгоритме Мамдани, однако правило 2 участвовать не может, так как алгоритм Цукамото не предполагает наличия терма «среднее» для выходного универсума С из-за возникающей немонотонности.

Шаг3: определение чётких значений абсцисс с1 и с3 из уравнений (см. рисунок ниже):

с1 = µС1(µ1);

с3 = µС3(µ3);

Шаг4: дефаззификация. Вычисляют по методу дискретного ЦТ значение выхода по формуле:

c0 = (c1µ1+ c3µ3)/(µ1+ µ3)

В данном случае c0 = 0,63.

Алгоритм Цукамото менее точен, чем алгоритм Мамдани, среднее отличие – около одного процента.

Алгоритм Сугено

Алгоритм Сугено применяется, когда известна не форма функции соответствия выходного параметра, а весовые коэффициенты, через которые входные параметры вносят  свою «лепту». При для разных нечётких множеств A1,A2,A3; B1,B23; C1,C2,C3 значений входных параметров a,b,c применяются свои коэффициенты. Правила выглядят так:

правило 1: если a?A1 & b?B1 , то c = ka1a + kb1b;

правило 2: если a2 & b?B2 , то c = ka2a + kb2b;

и т.д для других входных параметров.

В отличие от алгоритма Мамдани, не используются правила, содержащие дизъюнкции в левых частях импликаций.

Шаг1: дефаззификация. На этом шаге по чётким значениям входных параметров a0 и b0 определяют значения функций соответствия µA1(a0), µB1(b0), µA2(a0), µB2(b0) (и так далее для других параметров). Затем определяют уровни отсечения выхода:

µ1 = min( µA1(a0), µB1(b0) );

µ2 = min( µA2(a0), µB2(b0) ).

И так далее для других входных параметров.

Шаг2: находят индивидуальные результаты выполнения правил:

c1 = ka1a0 + kb1b0;

c2 = ka2a0 + kb2b0;

И так далее для других входных параметров.

Шаг3: по c1, с1 µ1, µ2 и т.д. находят выход по методу дискретного ЦТ, как и в алгоритме Цукамото: в числителе сумма произведений сiµi, в знаменателе – сумма µi.

Чтобы построить НЛК Сугено, если неизвестны весовые коэффициенты, экспериментально изменяют каждый входной параметр по отдельности, зафиксировав остальные, и смотрят, как изменяется выходной параметр. Находят интервал, в котором изменение выходного параметра можно аппроксимировать линейной зависимостью от входного параметра в пределах приемлемой погрешности. Этот i-ый интервал образует одно из подмножеств Ai параметра a. И так далее для остальных параметров.

Алгоритм Ларсена

Алгоритм Ларсена применяется в тех же случаях, что и алгоритм Мамдани. В ряде случаев оказываетс точнее алгоритма Мамдани (при немонотонных входных нечётких множествах), но требует больше операций умножения.

Шаг 1: дефаззификация, как и в алгоритме Мамдани.

Шаг 2: алгебраическое понижение значности частных выходных нечётких множеств путём умножения каждого из них на уровни отсечения µ1, µ2, µ3 и т.д. В результате образуются уменьшенные копии частных выходных нечётких множеств C01,C02,C03 и т.д.

Шаг3: композиция. Нечёткие множества C01,C02,C03 объединяют в одно нечёткое множество C0, представляющее собой фаззифицированное значение c0 выходного параметра c. Объединение производится по максимальной огибающей отсеченных областей – всё аналогично алгоритму Мамдани.

Шаг4 аналогично алгоритму Мамдани.

Через тернии к...

Творцу НчЛ Лотфи Заде (университет Беркли, США) понадобилось 8 лет с 1965 по 1973 год, чтобы доказать право НчЛ на жизнь. Сразу же нашлось (и до сих пор находится) много критиков НчЛ. Национальное научное общество США в 1990 году всерьёз ставило вопрос об исключении НчЛ из учебных материалов. Но время шло, и в 1994 году Бартоломью Коско строго доказал теорему о нечеткой аппроксимации, согласно которой любая математическая система может быть представлена средствами НчЛ (Bart Kosko, Fuzzy Approximation Theorem, IEEE Trans, on Computers. 1994. Vol. 43. №11. P. 1329-1333).

В конце-концов возникла анекдотическая ситуация – не признаваемая академической наукой США, НчЛ вошла в список передовых технологий, запрещённых комитетом COCOM к ...вывозу. Дело в том, что НчЛ может быть использована в управлении. Управление, реализованное с помощью НчЛ, так и называют – нечёткое управление, которое, тем не менее, позволяет получить вполне конкретные результаты там, где процессы не поддаются математическому моделированию.

Началом практического применения НчЛ считают 1975 г., когда Мамдани предложил нечеткий контроллер для подачи воздуха в камеру внутреннего сгорания. Сейчас функциональная схема этого контроллера стала классикой. В 1982 г. Холмблад и Остергад (Holmblad and Osregaad) разрабатывают первый промышленный нечеткий контроллер обжига цемента. Появились и другие успешные применения. Однако европейские и американские инженерные сообщества всё ещё скептически относились к инженерной НчЛ. В отличие от них, японцам сразу показалась заманчивой формализация бизнес-процессов без неповоротливого матанализа. В 1990 году правительство Японии профинансировало 5-летнюю программу по НчЛ, включающую разные проекты – от экологии и предсказания землетрясений до АСУТП. 48 компаний объединёнными усилиями создали LIFE (Laboratory for International Fuzzy Engineering).

Однако НчЛ вошла в инженерию не так стремительно, как экзальтированно об этом пишут некоторые журналисты. В течение 90-ых годов в мире появилось всего 40 патентов, касающихся НчЛ. Но к концу 90-ых НчЛ превратилась в настоящее маркетинговое оружие на японском рынке – fuzzy-товары хорошо продавались. Ещё Лотфи Заде заметил: «Почти всегда можно сделать то же без нечеткой логики, но с ней будет быстрее и дешевле». НЛК нередко «обставляет» обычный ПИД-регулятор. Последний на вычисления тратит время, а это задержка в цепи обратной связи, приводящая к рысканию системы. Сейчас Япония по-прежнему лидирует в области использования НчЛ и имеет более 5000 "нечетких" патентов (США – менее 2000). В США развитие НчЛ в основном пошло по пути создания систем для большого бизнеса и военных.

НчЛ успешно используются в финансировании, логистике, прогнозировании, диагностике, управлении персоналом, распознавании образов, георазведке, юриспруденции, здравохранении, соцобеспечении – всего не перечислить. Когда вы «гуглите», вас обслуживают методами НчЛ. Для некоторых профессий знание основ НчЛ является обязательным. Если бизнес-аналитик не владеет методами НчЛ – на зарубежном рынке труда он не востребован. Играть на бирже без поддержки софта, обрабатывающего нечёткие сведения – значит продуться в пух и прах.

Для реализации нечеткого моделирования в среде MATLAB, имеется специальный пакет расширения Fuzzy Logic Toolbox.

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Читайте также

 

Комментарии

Аватар пользователя mike

Извините, зрение плохое, поэтому опечатки.

В алгоритме Ларсена, шаг 2 -- не "частых", а "частных".

3-ий абзац снизу: надо не "экзальтпрованно", а "экзальтированно".

После "однако" (3-ий абзац снизу) запятая не нужна.

Наверное, есть и др. опечатки. 

Моё форматирование пропало, читается тяжеловато.  

 

Аватар пользователя mike

Спасибо за исправления. В первом предложении раздела про алгоритм Сугено в конце предложения перед точкой лишние предлог и слово "в выход". Если можно, удалите.

В 4-ом абзаце снизу глагол "отнеслись" следует заменить на "относились". Если можно, исправьте, пожалуйста.

Нда, сыроватый материал я отправил...

Аватар пользователя Petro42

Насчёт систем для бизнеса может быть интересно. Наверняка. Только уверен, что наши белорусские разработчики не утруждают себя использованием таких идей.

Аватар пользователя mike

наши белорусские разработчики не утруждают себя использованием таких идей.

Нашим белорусским разработчикам сперва бы поучиться элементарной культуре партнёрства. Пару ПОСЛЕДНИХ примеров.

Питающие подстанции обвязываются софтом. Как со стороны энергосистемы, так и со стороны потребителя. Поэтому разрабатываются 2 проекта. Чтобы их увязать, необходимо сотрудничать. Обращаюсь к партнёрской стороне -- ПОСЛАЛИ. Закрылись, короче, промокашкой. Пришлось выезжать в командировку и разбираться на месте.

Другой пример. Изготовитель оборудования, с которым 10 лет работаю, внёс фишки в протокол обмена. Звоню, представляюсь, прошу сообщить об изменениях. Человек на другом конце провода: "Если каждый жук и жаба будет что-то лепить..."

Таких примеров легион.

Это не от водки, это проходит не быстро.