Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

И вы можете соответствующим образом запрограммировать, основываясь на этой информации.

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

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

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

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

Существует несколько шагов для обработки нечеткой логики (рис. 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- как быстро

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

image009

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

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

image012

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

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

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

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

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

 (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 удовлетворено.

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

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

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

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


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

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

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


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

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

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

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

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

Очень хорошее объяснение, с помощью Стиральные Машины с нечеткой Логикой.

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

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

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

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

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

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

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

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

Следующее является своего рода эмпирическим ответом.

Простой (возможно, упрощенный ответ) заключается в том, что "нечеткая логика" - это любая логика, которая возвращает значения, отличные от прямых true / false или 1/0.Существует множество вариаций на этот счет, и они, как правило, сильно зависят от предметной области.

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

Прямо сейчас Netflix проводит конкурс, чтобы найти лучший алгоритм предложения для своей компании.Видишь http://www.netflixprize.com/.Фактически все алгоритмы можно охарактеризовать как "нечеткую логику".

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top