Что такое нечеткая логика? - PullRequest
42 голосов
/ 30 декабря 2008

Я работаю с парой алгоритмов ИИ в школе, и я нахожу, что люди используют слова Fuzzy Logic, чтобы объяснить любую ситуацию, которую они могут решить с помощью пары случаев. Когда я возвращаюсь к книгам, я просто читаю о том, что вместо состояния, переходящего из состояния «Вкл» в «Выкл.», Это диагональная линия, и что-то может находиться в обоих состояниях, но на разных «уровнях».

Я прочитал статью в Википедии, пару уроков и даже запрограммированные материалы, в которых «используется нечеткая логика» (детектор контуров и робот с 1 колесом), и все же я нахожу это очень запутанным, переходя от теории к Код ... для вас, в менее сложном определении, что такое нечеткая логика?

Ответы [ 11 ]

36 голосов
/ 30 декабря 2008

Я хотел бы добавить к ответам (которые были изменены), что хороший способ визуализации нечеткой логики заключается в следующем:

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

1|
 |   /\
 |  /  \
 | /    \
0|/      \
 ------------
   a  b c   d

Предположим на секунду, что функция "любит арахис"

a. kinda likes peanuts
b. really likes peanuts
c. kinda likes peanuts
d. doesn't like peanuts

Сама функция не обязательно должна быть треугольной, а часто и нет (проще с ascii art).

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

1|   A    B
 |   /\  /\      A = Likes Peanuts
 |  /  \/  \     B = Doesn't Like Peanuts
 | /   /\   \
0|/   /  \   \
 ------------
  a  b  c d

так что теперь c "добрый любит арахис, вроде не любит арахис", а d "действительно не любит арахис"

И вы можете программировать соответственно на основе этой информации.

Надеюсь, это поможет визуальным ученикам.

36 голосов
/ 30 декабря 2008

Нечеткая логика - это логика, в которой членство в состоянии - это, по сути, число с плавающей запятой с диапазоном 0..1 вместо целого 0 или 1. Вы получаете от него километраж, например такие вещи, как изменения, которые вы вносите в система управления естественным образом более точно настроена, чем то, что вы получаете с наивной бинарной логикой.

Примером может служить логика, которая ограничивает системную активность на основе активных соединений TCP. Скажем, вы определяете «немного слишком много» TCP-соединений на вашей машине как 1000, а «слишком много» как 2000. В любой момент времени ваша система имеет состояние «слишком много TCP-соединений» от 0 (<= 1000) до 1 (> = 2000), который вы можете использовать в качестве коэффициента при применении любых доступных механизмов дросселирования. Это гораздо более прощающее и реагирующее на поведение системы, чем наивная двоичная логика, которая знает только, как определить «слишком много», и полностью и полностью или «не слишком много», и вообще не регулировать.

10 голосов
/ 26 октября 2011

Лучшее определение нечеткой логики дано ее изобретателем Лотфи Заде :

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

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

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

image004

Рисунок 1 - Нечеткие шаги процесса (Дэвид М. Бур, стр. 192)

Чтобы проиллюстрировать нечеткие этапы процесса, можно использовать предыдущую ситуацию в баскетбольной игре. Как упоминалось в примере, у соперника высокий рост 1,87 метра, что довольно высоко по сравнению с нашим игроком, и он может вести мяч со скоростью 3 м / с, что медленно по сравнению с нашим игроком. В дополнение к этим данным необходимо учитывать некоторые правила, которые называются нечеткими правилами, такими как;

if player is short but not fast then guard,
if player is fast but not short then don’t guard
If player is tall then don’t guard
If player is average tall and average fast guard

image005

Рисунок 2 - какой рост

image007

Рисунок 3 - как быстро

В соответствии с правилами и входными данными, выход будет создан нечеткой системой, такой как; степень защиты - 0,7, степень защиты - 0,4, а степень защиты - 0,2.

image009

Рисунок 4-х выходных нечетких множеств

На последнем шаге defuzzication используется для создания четкого вывода, которое представляет собой число, которое может определять энергию, которую мы должны использовать для защиты игрока во время игры. Центр масс является распространенным методом создания выходных данных. На этом этапе веса для вычисления средней точки полностью зависят от реализации. В этом заявлении считается, что он дает большой вес охраннику или не охранник, но низкий вес, который иногда предоставляется охраннику. (David M. Bourg, 2004)

image012

Рисунок 5 - нечеткий вывод (Дэвид М. Бур, стр. 204)

  Output = [0.7 * (-10) + 0.4 * 1 + 0.2 * 10] / (0.7 + 0.4 + 0.2) ≈ -3.5

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

Для получения дополнительной информации и ее возможного применения в игре я написал небольшую статью Проверьте это

6 голосов
/ 30 декабря 2008

Чтобы построить ответ хаоса, формальная логика - это не что иное, как индуктивно определенный набор, который отображает предложения в оценку. По крайней мере, так думает модельный теоретик о логике. В случае логической логики предложения:

 (basis clause) For all A, v(A) in {0,1}
 (iterative) For the following connectives,
   v(!A) = 1 - v(A)
   v(A & B) = min{v(A), v(B)}
   v(A | B) = max{v(A), v(B)}
 (closure) All sentences in a boolean sentential logic are evaluated per above.

А нечеткие логические изменения будут определяться индуктивно:

 (basis clause) For all A, v(A) between [0,1]
 (iterative) For the following connectives,
   v(!A) = 1 - v(A)
   v(A & B) = min{v(A), v(B)}
   v(A | B) = max{v(A), v(B)}
 (closure) All sentences in a fuzzy sentential logic are evaluated per above.

Обратите внимание, что единственной разницей в базовой логике является разрешение оценивать предложение как имеющее «значение истинности» 0,5. Важным вопросом для модели нечеткой логики является порог, который имеет значение для удовлетворения истины. Спрашивается: для оценки v (A), для какого значения D это тот случай, когда v (A)> D означает, что A удовлетворяется.

Если вы действительно хотите узнать больше о неклассических логиках, таких как нечеткая логика, я бы порекомендовал либо Введение в неклассическую логику: от If к Is или Возможности и парадокс

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

4 голосов
/ 30 декабря 2008

Может быть, пример проясняет, какие выгоды могут быть:

Допустим, вы хотите сделать термостат и хотите, чтобы он был на 24 градуса.


Вот как вы бы это реализовали, используя логическую логику:

  • Правило1: нагрев при полной мощности, когда холоднее 21 градуса.
  • Rule2: остыть на полную мощность, когда это теплее 27 градусов.

Такая система будет время от времени иметь 24 градуса, и она будет очень неэффективной.


Теперь, используя нечеткую логику, это было бы примерно так:

  • Правило 1: для каждого градуса, который ниже 24 градусов, поднимите нагреватель на одну ступень (0 на 24).
  • Правило 2: Для каждого градуса, который теплее 24 градусов, поднимите кулер на одну ступень (0 на 24).

Эта система всегда будет где-то около 24 градусов, и только один раз, и только один раз будет вносить небольшие изменения. Это также будет более энергоэффективным.

3 голосов
/ 30 декабря 2008

Очень хорошее объяснение, с помощью стиральных машин Fuzzy Logic .

3 голосов
/ 30 декабря 2008

Ну, вы могли бы прочитать произведения Барта Коско , одного из «отцов-основателей». ' Нечеткое мышление: новая наука нечеткой логики ' с 1994 года читаема (и доступна довольно дешево из вторых рук через Amazon). Очевидно, у него есть более новая книга ' Noise ' с 2006 года, которая также вполне доступна.

Хотя, по сути (в моем перефразировании - я не читал первую из этих книг уже несколько лет), нечеткая логика заключается в том, как поступить с миром, где что-то прохладно на 10%, тепло - на 50%, а жарко - на 10% где разные решения могут быть приняты относительно степени, в которой различные состояния являются истинными (и нет, не было полностью случайным, что эти проценты не складываются до 100% - хотя я принял бы исправление в случае необходимости).

2 голосов
/ 30 декабря 2008

Я знаю, что вы имеете в виду, когда трудно переходить от концепции к коду. Я пишу систему скоринга, которая рассматривает значения sysinfo и / proc в системах Linux и предлагает число от 0 до 10, причем 10 является абсолютным худшим. Простой пример:

У вас есть 3 средних значения нагрузки (1, 5, 15 минут) с (как минимум) тремя возможными состояниями: хорошее, плохое, плохое. Расширяя это, вы можете иметь в среднем шесть возможных состояний, добавляя «около» к трем, которые я только что отметил. Тем не менее, результат всех 18 возможностей может вычесть только 1 из балла. Повторите это при использовании swap, фактической виртуальной памяти, выделенной (выделенной) памяти и других вещей ... и у вас есть одна большая чаша условных спагетти:)

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

Мне было бы очень легко сказать, что load1 <2 вычитает 1, но не очень точно. </p>

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

1 голос
/ 05 июля 2012

Fuzzy Logic - это методология решения проблем, которая может применяться в системах, начиная от простых, небольших встроенных микроконтроллеров и заканчивая большими сетевыми многоканальными ПК или системами сбора и управления данными на базе рабочих станций. Это может быть реализовано в аппаратном, программном или в комбинации того и другого. Нечеткая логика предоставляет простой способ прийти к определенному выводу на основе неопределенной, неоднозначной, неточной, шумной или отсутствующей входной информации. Подход Fuzzy Logic к управлению проблемами имитирует то, как человек будет принимать решения, только намного быстрее.

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

Чтобы узнать больше, просто проверьте: http://en.wikipedia.org/wiki/Fuzzy_logic.

0 голосов
/ 28 января 2014

Нечеткая логика - алгоритм вычисления, основанный на человеческом образе мышления. Это особенно полезно, когда имеется большое количество входных переменных. Один онлайн калькулятор нечеткой логики для ввода двух переменных дается:

http://www.cirvirlab.com/simulation/fuzzy_logic_calculator.php

...