Skip to content

Нечеткая логика

  • Название: Нечеткая логика (Fuzzy Logic — FL);
  • Применение: Моделирование сложных процессов с высокой долей неопределенности;
  • Уровень: очень сложный;
  • Входные параметры: параметры с высокой долей неопределенности;
  • Результат: Количественное представление выходного результата

Пример из жизни:

Человеку очень трудно преодолеть, а иногда невозможно, субъективные суждения или оценки чего-либо, которые зависят от многих факторов, которые выходят за рамки предложенной темы. Их можно называть такими терминами как: вкус, предпочтение, личный выбор и т.д. Например, кому-то может показаться холодной погода при температуре в 18 °С, а кому-то теплой. Для кого-то скорость автомобиля в 120 км/ч будет очень высокой, а для кого-то низкой. И даже при покупке вещей нельзя с полной уверенностью утверждать, что они понравятся вашим близким или друзьям. Но, что самое удивительное, все рассмотренные субъективные суждения являются равнозначными – то есть нельзя считать, что кто-то прав, а кто-то неправ. Поэтому можно говорить о некой нечеткости или размытости условий.

Представьте, что требуется спроектировать систему климат-контроля для обеспечения комфортной температуры в помещении, где будет находиться рабочий персонал. Первая трудность с которой может столкнуться разработчик – это формирование сложной математической модели, которая будет учитывать различные технические особенности оборудования и физические характеристики среды (сложные вычисления могут потребовать дополнительные производительные ресурсы). С течением времени, может возникнуть потребность учесть новые факторы, что может привести к полной переработке существующей модели. Более того, если разработчика попросят учесть температурные предпочтения сотрудников, то сложность системы существенно возрастает и станет практически неразрешимой в рамках классического подхода.

Но как обойтись без сложных математических рассчетов и учесть неопределенные (и даже субъективные) требования ? Давайте мысленно превратимся в “мозги” климат-контроля и попробуем смоделировать его работу. Допустим, температура существенно возросла – это можно определить, как по ощущениям, так и по показателям термометра. После этого события необходимо принять какие-то действия, например, усилить напор холодного воздуха примерно до комфорного температурного уровня. При понижении температуры логично ослабить или уменьшить работу системы.

Таким образом, набор действий в контексте различных условий можно рассматривать, как соотвествующие правила. Этот подход можно легко реализовать в любой программной среде, на основе набора деклараций, например – (ЕСЛИ T > 30 °С, ТО НУЖНО ПОНИЗИТЬ ТЕМПЕРАТУРУ ДО 20 °С и т.д.). Стоит отметить, что существует декларативный подход при разработке программного обеспечения. Действительно, этот подход ближе к человеческой интерпретации событий и явлений, поэтому совокупность правил гораздо легче и проще сопровождать , чем сложные системы уравнений на основе циклов и наборов вложенный условий (а значит менее затратней для вычислений). Но как задать точные количественные ограничения? Ведь тепература в 28.5°С по ощущениям не намного будет отличаться от пороговой в  30 °С ( можно сформировать интервал температур, но когда дело касается не одного, а сотни параметров, то такой прием сильно усложнит сопровождение и добавление новых параметров в условия). А значит наша модель просто не сработает!

Как видно, в процессе принятия решений возникло много грубых допущений. Возникает закономерный вопрос, как их учитывать? Можно задействовать группу людей, в нашем случае, сотрудники, которые будут использовать климат-контроль. Они выступят в роли экспертов и детализируют или приведут количественную интерпретацию таких понятий как : “примерно”, “по ощущениям”, “комфортный”, “тепло”, “холодно” и т.д. Теперь наши правила можно преобразовать к следующему виду – ЕСЛИ СТАЛО ЖАРКО, ТО НУЖНО ПОНИЗИТЬ ТЕМПЕРАТУРУ.

Основная трудность возникает, когда необходимо перенести указанные декларации на машинный язык. Даже, если это сделать, то как работать с такими необычными предикатами – ЖАРКО, ХОЛОДНО? Более того, не совсем понятно как проводить процедуры перевода предиктов в количественные значения и обратно. Если использовать более двух предиктов, то какие логические операторы использовать – логические AND, OR? Ответы на эти вопросы будут рассмотрены далее.

Краткая история:

Вплоть до середины XX века доминировала классическая теория множеств. Наивная теория множеств (разработанная Г. Кантором) гласит, что элементы объединяются в единое целое и это делается по определенному закону. Отсюда следует два важных следствия:

  • Обладает определенным смыслом или семантикой;
  • Элементы объединяются в множество по определенному закону, что позволяет отделить одни элементы от других.

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

  • Задача: Одной из таких задач – автоматическая классификация, когда производится разделение объектов на различные подмножества;
  • Цель: автоматически определять класс объектов по описывающим эти объекты признакам.  Метод обучения с учителем – показывается объект и его принадлежность к тому или иному подмножеству;
  • Проблемы: Для количественных элементов (которые можно описать количественными параметрами т.е. измерить) устанавливают вероятность принадлежности объекта множеству, например, порог >= 0.5. (в данном случае терялась часть информации и оценка элементов сильно угрублялась). Так же оставалась неразрешенная проблема, как оперировать категориальными элементами (которые описываются качественными и даже субъективными характеристиками: высокий/низкий, теплый/холодный, красивый/страшный), как переводить их в количественные значения.

Проблема разрешения количественных элементов:

Проблема разрешения категориальных элементов:

Для решения вышеизложенных проблем, во второй половине XX века, была разработана теория “нечетких множеств” авторы Лотфи А.Заде и Рональд Р.Ягер. Суть данной теории сводилась к тому, что каждому элементу ставится в соотвествии некоторая степень уверености, что элемент принадлежит множеству. Например, 1 – однозначно принадлежит и 0 – одназначно не принадлежит. Соотвественно, диапазон значений между 0 и 1 определяет эту степень уверенности. Как оказалось, стало возможным описывать отдельное значение в рамках нечеткого множества. Например, если на улице “тепло“, то это не значит, что в данный момент действую все температуры из множества “тепло” – действует только одна температура, которая имеет высокую степень соотвествия понятию “тепло“.

В целом, нечеткое моделирование оказалось полезным, когда в описании технических систем или бизнес-процессов присутствует неопределенность, которая затрудняет или даже исключает применение точных количественных методов или подходов. Забегая вперед – процесс моделирования намного упрощается, потому что описывается с помощью лингвистического аппарата (набора правил).

Долгое время некоторые специалисты в области математической статистики и теории вероятностей, отрицали саму возможность применения нечеткой логики в приложениях. Они утверждали, что все виды неопределенности могут быть выражены только в рамках вероятности. Так в чем же отличие вероятности от степени уверенности? Во-первых, теория вероятностей позволяет дать ответ на вопрос произойдет или нет некоторое хорошо описанное событие в будущем. Лингвистическая неопределенность связана с самой неточностью описания ситуации или события, которые даже могут не наступить в будущем. Во-вторых, само моделирование неопределенности связано с различными аспектами неопределенности – в теории вероятностей (объективные), нечеткой логике (субъективные). Для полного понимания приведем наглядный пример: рассмотрим первый случай, изображенный на рисунке а. Допустим есть две бутылки с жидкостью – A (в ней есть степень уверенности наличия безопасной для здоровья человека жидкости – 0.91 ) и Б (аналогично, но с вероятностью 0.91 ).  Вопрос, что пить? Если человек испытывающий жажду, знаком с нечеткой логикой и теорией вероятности, то наверняка выпьет жидкость из бутылки – A. 


Произойдет это потому, что в бутылке, скорей всего, чистая или почти чистая вода т.к. степень соответствия близка к единице. В противном случае, если степень соответствия была равна или близка нулю, то жидкость  была бы непригодной для питья (может даже была не водой а опасной кислотой). Таким образом, человек делает вывод, что вода не совсем чистая, но безопасная для жизни. В противоположность этому, вероятность говорит о том, что примерно в 9 случаях из 10 вода, будет пригодна для употребления – как интерпретировать этот тезис? Есть риск, даже небольшой, что жидкость совершенно не пригодна для питья т.е. в ней может находиться опасная для жизни человека кислота и т.д. Рассмотрим ситуацию (б). В данном случае, все кардинальным образом меняется – теперь есть полная гарантия, что в бутылке не уксус. Но нет полной уверенности, что в ней пригодная для употребления вода (может быть не уксус, но соляная кислота). В бутылке А -есть высокая степень уверенности, что в ней находится джин-тоник. Если это даже не так, то точно какой-то напиток, который напоминает джин-тоник или содержит алкоголь – значит можно пить. Если резюмировать вышеизложенное, то основное отличие от классической вероятности – это наличие лингвистической неопределенности (субъективности), которая может помогать решать различные задачи, связанные с принятием решений.

Основные определения:

Нечеткое множество – представляет собой совокупность элементов произвольной природы, относительно которых нельзя с полной уверенностью утверждать – принадлежит ли тот или иной элемент рассматриваемой совокупности данному множеству или нет. Таким образом, нечеткое множество строится на базе универсального множестваU (т.е. совершенно обычного множества) и может оперировать не только количественными (непрерывные=температура и дискретные=веса гирь), но и качественными (термами) параметрами элементов. Рассмотрим подробнее:

Терм – качественное описание значения параметра (пр-р: девушка симпотичная, стол тяжелый, холодно, жарко и т.д.). Если какой-то элемент(ы) описывается совокупностью термов (например, температура: холодно, очень холодно, тепло, жарко и т.д.), то необходимо определить лингвистическую переменную.  Под лингвистической переменной  понимается совокупность всех терм, используя которые можно описать значение одного параметра. Таким образом, для задания нечеткого множества осуществляются следующие этапы:

  • Определение универсального множества U. Определение количественных и качественных параметров, описывающих данное множество;
  • Сформировать совокупность терм, описывающих лингвистическую переменную. Например, температура {“тепло“, “холодно“, “жарко“};
  • Для каждого терма  A формируется функциональная зависимость, обозначим – μA(x), определяющую степень соотвествия элементов универсального множества U соотвествующему терму (данная процедура назвается – задание функции принадлежности на области универсального множества, где каждый элемент имеет свою степень соотвествия принадлежности этому универсальному множеству).

Функция принадлежности является ключевым элементом. С одной стороны, обеспечивает удобный инструмент для представления в аналитическом виде степени принадлежности заданного терма (т.е. по оси ординат – f(x) всегда откладывается диапазон от 0(однозначно не принадлежит)  до 1(однозначно принадлежит) – степень принадлежности, а по оси абсцисс- x количественные показатели соотвествующего терма). С другой стороны, дает возможность производить различные операции над нечеткими множествами.

Функции принадлежности бывают разных видов:

Как задается функция принадлежности? Эксперт или группа экспертов задают для каждого аргумента x (м.б. скорость, температура, давление и т.д.) значение принадлежности (от 0 до 1).  Такой метод актуален для свойств объекта, которые могут быть измерены в количественной шкале (скорость, расстояние, температу и т.д.). При этом целесообразно ограничить рассмотрение параметров только теми значениями величин, которые имеют физический смысл в контексте решаемой задачи. Затем функция принадлежности может быть уточнена опытным путем. Рассмотрим пример – скорость автомобиля около 50 км/ч для первого приближения можно построить нечеткое множество треугольной формы (a = 45 км/ч, b =50 км/ч, c = 60 км/ч), если задан “нечеткий” интервал – “скорость движения автомобиля находится в пределах примерно 50-60 км/ч”, тогда можно построить функцию трацепеивидной формы (a = 45 км/ч, b =50 км/ч, c = 60 км/ч, d = 65 км/ч).

Так же необходимо учесть саму закономерность (плавность) моделируемых величин – например,  рассмотрим дни недели в части наступления выходных дней. Для кого-то выходные могут принимать степень соотвествия плавно, начиная с пятницы и чем ближе к субботе, тем это степень соотвестия будет больше стремиться к единице. С другой стороны, в воскресенье степень соотвествия будет стремиться к нулю, потому что часть дня будет потрачена на подготовку к рабочей неделе.

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

Таким образом, можно сказать, что существует ряд закономерностей, которые носят “плавный переход”(кривая) или “резкий” (кусочно-линейный). В первом случае,  плавное увеличие или уменьшение должно учитываться при принятии решения,где малейшие изменения параметра могут привести к плавному изменению всей системы (увеличие угла поворота крана к постепенному увеличинию воды, уменьшее температуры в помещении к плавному увеличению обогрева и т.д.).Во втором случае, есть ряд примеров, когда резкий переход необходим в силу логической целесообразности ( весовая категория спорсмена – 85(средний вес) 93 (тяжелый), 95 (сверхтяжелый)  даже малейшее увеличение веса приводит к “резкому” переходу в другую спортивную категорию и т.д.).  

Основные операции в нечеткой логике:

Логические операции. Существуют различные способы обработки нечетких множеств: минимаксный (наиболее часто используется), вероятностный и ограниченный(об этих подходах можно почитать тут). Далее, будет рассматриваться минимаксный способ обработки. На основе этого подхода, определяют три базовые операции над множествами: отрицание (исключение – “НЕ”), конъюкция ( пересечение – “И” ) и дизъюнкция ( объединение – “ИЛИ” ). В данном контексте, можно провести аналогию с бинарными операторами. Но в бинарной логике однозначно задаются значения операндов в виде: 0 и 1. В нечетких множествах, могут существовать значения из диапазона ( от 0 до 1 ), поэтому, строгая бинарные логика не подходят. Вместо этого используются следующие операции ( рассмотрим значения элементов из нечеткого множества – μA, μ):

  1. Отрицание 1-μA (Пример: μ0.3, 1-0.3 = 0.7);
  2. Конъюкция  ∧ (AND) : min (μA, μB(Пример: μA 0.3, μ= 0.2, min(0.3, 0.2) = 0.2);
  3. Дизъюнкция ∨  (OR) : max (μA, μB(Пример: μA 0.3, μ= 0.2, max(0.3, 0.2) = 0.3);

Квантификаторы. Позволяют осуществлять операции над значениями нечетких множеств в следующих случаях:

  1. Очень  AA(x) )2 (Пример: μA 0.2, ОЧЕНЬ_А = 0.22 = 0.04);
  2. Наверное A: (√μA(x) (Пример: μA 0.2, НАВЕРНОЕ_А = square(0.2) ≈ 0.45 );

ФаззификацияВысказывание (предикат) – предложение, выражающее суждение м.б. ложным или истинным. Однако для части предикатов трудно определить некоторую однозначность. Пример: на улице тепло, стол тяжелый. Важную задачу которую позволяет решать нечеткие множества, которая и называется нечеткая логика задача фаззификации – по изветному значению предиката определить степень увернности (0, 1) принадлежности элемента универсальному множеству – U.  Например, по температуре – T определить истинность заданных предикатов  μ(T).

Деффазификация операция обратная фаззификации. Классический способ деффазификации определение центра тяжести – СGr данного нечеткого множества. В идеальном случае центр тяжести должен совпадать с максимальной степенью соответствия или с максимумом. Существуют различные способы определения центра тяжести:

  1. Центр тяжести. Cумма произведений значений μA(x) на аргументы x деленная на сумму всех значений  μA(x) . СGr = ∑  (μA(x) * x) / ∑  μA(x)В идеальном случае центр тяжести должен совпадать с максимальной степенью соответствия или с максимумом. (Однако бывают ситуации, когда центр тяжести попадает в область, где степень уверенности равна 0, соотвественно данное нечеткое множество лучше всего характеризиует элемент, который вообще не входит в это нечеткое множество);
  2. Для преодоления этой проблемы осуществляют поиск простого максимума нечеткого множества (правого, левого или центрального) или их средннее значение (если максимумов больше двух). Пример: левое модальное значение = -10, правое модальное значение = 10 и среднее модальное значение 0.

Необходимо проводить оценку дефаззифицированного значения: степень соответствия и момент интерции (разброс значений элементов нечеткого множества относительно центра тяжести):

  • μA(center) низкое, то такой центр брать не стоит (приближается к нулю) только определяет (насколько центр тяжести соотвествует нечеткому множеству). Необходимо воспользоваться другим методом;
  • IM (Center) = ∑u μA(x) (x – Center)2  – момент инерции оценивает насколько остальные значение разрбросаны относительно заданного центра

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

  • min – активизация ( min( ci,  μ(x) ), где ci – значения после применения логический операций, i – правила )
  • prod – активизация  ci * μ(x),  где ci – значения после применения логический операций, i – правила
  • average – активизация  0.5 ( ci + μ(x) ),  где ci – значения после применения логический операций, i – правила

Пример: min – активизации  min( 0.65,  μ(x) )

Операции над нечеткими множествами. Взаимосвязь между термами и нечеткими множествами определяется двумя типами это – пересечение T∧ T⇒ A ∩ B и объединение  T∨ T⇒ A ∪ B . 

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

Основные характеристики нечетких множеств (геометрическая интерпретация):

  • Высота hA  = sup μA(x) – максимальная тепень уверенности для всех элементов универсального множества:

  • Мощность/диапозон значений: количество элементов для которых степень увернности больше нуля – это для непрерывных, а для дискрентных диапазон значений:

  • Альфа срез – выбор всех элементов универсального множества для которых степень увернности больше, чем альфа. Если α = 0  (носитель множества), α = 0.5 (ближайшее множество = наиболее похоже на наше нечеткое множество), α = h (срез по высоте = множесто всех элементов, которые имеют максимальную степень уверенности) :

  • Размытость – соотвествие нечеткого множества α – срезу. Энтропия = 0  строго соотвествует универсальному множеству и максимальна, когда универсальное множество максимально размыто.

Лингвистическое описание алгоритма:

Рассмотрим задачу принятия душа.

Постановка: При принятии душа на вход сместителя подается холодная и горячая вода по соотвестивующим трубопроводам. Наиболее комфортные условия для душа создаются при наличии на входе сместителя теплой воды постоянной температуры. Посколько подача воды может быть неравномерной, температура воды может колебаться, что приводит к необходимости ручного изменения подачи холодной или горячей воды. Необходимо сделать регулировку температуры воды автоматической (а не ручной), обеспечивая постоянную температуру воды на выходе сместителя. Рассмотрим пример для случая температуры воды на выходе сместителя = 55 °С, и давления воды = 10  (условные единицы). На сколько градусов необходимо повернуть вентиль крана?

Классическая задача нечеткого вывода (Мамдани) включает в себя следующие этапы:

1. Формирование базы правил систем нечеткого вывода: Опыт принятия душа может включать следующие эвристические правила (эти правила очень условные и некоторых из них упрощены для простоты объяснения алгоритма):

  1. ЕСЛИ вода горячая, ТО следует повернуть вентиль крана горячей воды на большой угол вправо;
  2. ЕСЛИ вода не очень горячая И давление низкое, ТО следует повернуть вентиль крана rорячей воды на небольшой угол вправо (активировано);
  3. ЕСЛИ вода прохладная ИЛИ давление низкое, ТО следует повернуть вентиль крана горячей воды на небольшой угол влево (активировано);
  4. ЕСЛИ вода холодная, ТО следует повернуть вентиль крана горячей воды на большой угол влево.

Данные правила закладывают фундамент построения базы правил нечеткого вывода, которая позволяет реализовать модель нечеткого управления. Определим входные и выходные лингвистические переменные. Для этого произведем семантический анализ эвристических правил ( обычно входные лингвистические переменные находятся в условии – ЕСЛИ, а выходные в условии ТО ). Из правил видно, что за входные лингвистические переменные можно принять β1 = “температура воды”, β= “давление низкое”, за выходную  β= “угол поворота”.

2. Фаззификация входных переменных:

В начале процедуры фаззификации требуется определить для входной лингвистической переменной терм-множество в виде T = {“горячая”, “не очень горячая”, “прохладная”, “холодная”} и определить соотвествуюущую функцию принадлежности:

Определим еще одну входную лингвистическую переменной терм-множество в виде P = {“давление низкое”} и определить соотвествуюущую функцию принадлежности:

Проделаем аналогичную процедуру для выходной лингвистической переменной в виде ALPHA= {“большой угол вправо”, “небольшой угол вправо”, “небольшой угол влево”, “большой угол влево”} и определить соотвествуюущую функцию принадлежности:

Для данного случая активируются два правила 2 (вода не очень горячая и давление низкое) и 3 (прохладная или давление низкое). На этом этапе определим входные параметры для температуры, чтобы продолжить детальную работу алгоритма.

Для второго активированного правила: при температуре воды на выходе сместителя = 55 °С – фаззификация приводет к степени истинности 0.48. А при давлении в 10 степень принадлежности равна примерно 0.65. 

Для третьего активированного правила: при температуре воды на выходе сместителя = 55 °С – фаззификация приводет к степени истинности 0.35. А при давлении в 10 степень принадлежности равна примерно 0.65. 

3. Агрегирование подусловий в нечетких правилах продукций:

На этом этапе производится оценка значений по каждому из активированных правил: применяются логические операторы.

Для второго активированного правила: ЕСЛИ вода не очень горячая И давление низкое. Подставляем соотвествующие значения, определенные на этапе фаззификации. не очень горячая = 0.48 И давление низкое = 0.65. MIN(0.48, 0.65) = 0.48

Для третьего активированного правила: ЕСЛИ вода прохладная ИЛИ давление низкое. Подставляем соотвествующие значения, определенные на этапе фаззификации. прохладная = 0.38 И давление низкое = 0.65. MAX(0.48, 0.65) = 0.65

4. Активизация или композиция подзаключений в нечетких правилах продукций: В системах нечеткого вывода представляет собой процедуру или процесс нахождения степени истинности каждого из подзаключений правил нечетких продукций (т.е. нахождение нечеткой области). Для нахождения этой области используются различные методы. В данном алгоритме используется – min – активизация ( min( ci,  μ(x) ), где ci – значения агрегирования, i – правила ).

Для второго активированного правила: ТО следует повернуть вентиль крана rорячей воды на небольшой угол вправо. Значения агрегирования для данного правила (см.выше) = 0.48. min – активизацияmin(0.48,  μ(x) ) изображено на рисунке

Для третьего активированного правила: ТО следует повернуть вентиль крана rорячей воды на небольшой угол влево. Значения агрегирования для данного правила (см.выше) = 0.65. min – активизацияmin(0.65,  μ(x) )

5. Аккумулирование заключений нечетких правил продукий (дефаззификация): осталось получить конкретное значение (или нечеткий вывод в числовое представление). Цель аккумуляции заключается в объединении всех степеней истинности в одну интегральную функцию принадлежности. Объединение в данном алгоритме осуществляется по методу объединения ( max(μA(x),μB(x)) ) нечетких множеств –   T∨ T⇒ A ∪ B . В нашем случае два множества: небольшой угол вправо и небольшой угол вправо. После объединения необходимо произвести дефаззификацию по методу центра тяжести.

Соотвественно, значение угла поврота примерно = 16 °С. 

Для полного представления всех этапов алгоритма приведем общую структурную схему:

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

Приведем блок-схему алгоритма нечеткого вывода Мамдани:

Реализция:

Данный пример является показательным, существует много готовых библиотек для работы с нечеткими множествами, например – https://www.phpclasses.org/package/9316-PHP-Analyze-variable-based-on-fuzzy-logic-rules.html. А так же реализация – http://www.thegeekstuff.com/2014/09/fuzzy-logic-cpp/

Определим треугольную функцию принадлежности, которая на вход принимает заданные ограничения $a, $b и $x – для операции фаззификации.

function fuzzyfication($a,$b,$x){
    $m = ($a+$b)/2;
    if ($a<$x && $x<=$m)
        return ($x-$a)/($m-$a);
    if ($m<$x && $m<$b)
        return ($b-$x)/($b-$m);
    if ($x>=$b)
        return;
    if ($x<=$a)
        return;
}

Определим логические операторы для работы с нечеткими множествами.

function fuzzyAND($a,$b){
    return min($a,$b);
}

function fuzzyOR($a,$b){
    return max($a,$b);
}

Функция min - активизации определяет по агрегированным значениям

function activization ($c, $a, $b){
    $res = [];
    $y = fuzzyfication($a,$b,($a+$b)/2);
    array_push( $res, min($c,$y), $a, $b );
    return $res;
}

При аккумуляции происходит объединение множеств и определение максимального значения из двух множеств для поиска центрального максимума.

function accumulation($a1,$a2){
    return current($a1)>current($a2) ? $a1 : $a2;
}

При дефаззификации для простоты будем использовать метод центрального максимума.

function defuzzyfication($res){
    list($sum, $a,$b) = $res;
    return ($a+$b)/2;
}

Общий вызов функции, согласно алгоритму, выглядит следующим образом.

$c1 = fuzzyAND(fuzzyfication(50,70,55), fuzzyfication(0,15,10));
$c2 = fuzzyOR(fuzzyfication(5,65.5,55), fuzzyfication(0,15,10));
$a1 = activization($c1,10,60); 
$a2 = activization($c2,-20,20);
$a  = accumulation($a1,$a2);
$angle = defuzzyfication($a);

Выводы:

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

Что посмотреть:

Очень хороший курс лекций (опубликованный Artem Denisov) для начинающих - https://www.youtube.com/watch?v=6R4jKWgdXQA&t=6s

Список источников:

  1. Заде Л. Понятие лингвистической переменной и его применение к принятию приближенных решений. — М.: Мир, 1976. — 166 с.
  2. Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы: Пер. с польского И. Д. Рудинского. М.: Горячая линия — Телеком, 2004. — 452 с.
  3. Штовба С. Д. Проектирование нечетких систем средствами MATLAB. М.: Горячая линия — Телеком.- 2007.- 288 c.
  4. Fuzzy Logic by Steven D. Kaehler http://www.seattlerobotics.org/encoder/mar98/fuz/flindex.html

3 Comments

  1. Western Western

    Круто, все понятно!

  2. Антон Антон

    Посоветуйте хорошую литературу по этой тематике?

    • admin admin

      Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы: Пер. с польского И. Д. Рудинского. М.: Горячая линия — Телеком, 2004. — 452 с.

Leave a Reply

Your email address will not be published. Required fields are marked *