Нечеткая логика
Omi-io
Нечеткая логика — это одно из величайших достижений математики XX-ого века, если критерием брать практическую пользу. В этой статье я попытаюсь показать, насколько это простой и мощный инструмент программирования — настолько же простой, но гораздо более мощный, чем система обычных логических операций.
Самым замечательным фактом о нечеткой логике является то, что это прежде всего логика. Из начал мат-логики известно, что любая логическая функция может быть представлена дизъюнктивной или конъюнктивной нормальной формой, из чего следует, что для реализации исчисления высказываний достаточно всего трех операций: конъюнкции (&&), дизъюнкции (||) и отрицания (!).
Эпименид Кносский с острова Крит – полумифический поэт и философ, живший в VI в. до н.э., однажды заявил: «Все критяне – лжецы!». Так как он и сам был критянином, то его помнят как изобре тателя так называемого критского парадокса.
В терминах аристотелевой логики, в которой утверждение не может быть одновременно истинным и ложным, и подобные самоотрицания не имеют смысла. Если они истинны, то они ложны, но если они ложны, то они истинны.
И здесь на сцену выходит нечеткая логика, где переменные могут быть частичными членами множеств. Истинность или ложность перестают быть абсолютными – утверждения могут быть частично истинными и частично ложными. Использование подобного подхода позволяет строго математически доказать, что парадокс Эпименида ровно на 50% истинен и на 50% ложен.
Таким образом, нечеткая логика в самой своей основе несовместима с аристотелевой логикой, особенно в отношении закона Tertium non datur («Третьего не дано» – лат.), который также называют законом исключе ния среднего1. Если сформулировать его кратко, то звучит он так: если утверждение не является истинным, то оно является ложным. Эти постулаты настолько базовые, что их часто просто принимают на веру.
Более банальный пример пользы нечеткой логики можно привести в контексте концепции холода. Большинство людей способно ответить на вопрос: «Холодно ли вам сейчас?». В большинстве случаев (если вы разговариваете не с аспирантом-физиком) люди понимают, что речь не идет об абсолютной температуре по шкале Кельвина. Хотя температуру в 0 K можно, без сомнения, назвать холодом, но температуру в +15 C многие холодом считать не будут.
Но машины не способны проводить такую тонкую градацию. Если стандартом определения холода будет «температура ниже +15 C», то +14,99 C будет расцениваться как холод, а +15 C – не будет.
Решение задач методами нечеткой логики
Лишь немногие клапаны способны открываться «чуть-чуть». При работе оборудования обычно используются четкие значения (например, в случае бимодального сигнала 0-10 В), которые можно получить, используя так называемое «решение задач методами нечеткой логики». Подобный подход позволяет преобразовать семантические знания, содержащиеся в нечеткой системе, в реализуемую стратегию управления2.
Это можно сделать с использованием различных методик, но для иллюстрации процесса в целом рассмотрим всего один пример.
В методе height defuzzification результатом является сумма пиков нечетких множеств, рассчитываемая с использованием весовых коэффициентов. У этого метода есть несколько недостатков, включая плохую работу с несимметричными функциями принадлежности к множествам, но у него есть одно преимущество – этот метод наиболее простой для понимания.
Предположим, что набор правил, управляющих открытием клапана, даст нам следующий результат:
«Клапан частично закрыт»: 0,2
«Клапан частично открыт»: 0,7
«Клапан открыт»: 0,3
Если мы используем метод height defuzzification для определения степени открытости клапана, то получим результат:
«Клапан закрыт»: 0,1
(0,1*0% + 0,2*25% + 0,7*75% + 0,3*100%)/ /(0,1 + 0,2 + 0,7 + 0,3) =
= (0% + 5% + 52,5% + 30%)/(1,3) = = 87,5/1,3 = = 67,3%,
т.е. клапан необходимо открыть на 67,3%.
Хотя использование нечеткой логики может действительно стать следующим шагом в создании систем автоматического управления коммунальными системами в зданиях (building automation systems / BAS), важно помнить, что для осмысленного
применения нечеткой логики необходимо, чтобы программное обеспечение, управляющее работой BAS, с самого начало создавалось с учетом возможности использования этих функций. Не достаточен только лишь условный язык, используемый для задания правил, его интегрированность в программное обеспечение и соответствие принципам его работы. Еще нужно установить четкое разграничение между стандартными ресурсами и способами управления (например, ПИД-регулированием, использованием расписаний, предупреждающих сообщений и т.д.) и методами управления на основе нечеткой логики. Неполная интеграция или неправильно построенные правила взаимопреобразований между стандартной и нечеткой логикой могут привести к появлению в программах ошибок, причину которых будет очень сложно установить.
Кроме того, большая часть информации, необходимой для эффективной работы систем, основанных на методах нечеткой логики, должна автоматически собираться во время первоначального запуска программного обеспечения, управляющего работой системы. Если возложить программирование системы на инженеров-строителей, то это будет неосмотрительным со стороны разработчиков BAS и приведет к тому, что в большинстве зданий BAS не будут использоваться надлежащим образом. Например, необходимо задать функции принадлежности к множествам (см. рис. 1 и 2) для величин, часто используемых в BAS. Если добавить датчики температуры воздуха или контроллеры для систем кондиционирования с переменным расходом воздуха, то компьютерная программа должна быть способной автоматически задавать соответствующие функции принадлежности к множествам для различных контрольных точек.
Вобщем, область применения нечеткой логики весьма обширна. В любом алгоритме, в любой системе правил попробуйте заменить истину и ложь на степень истинности и, возможно, эта система правил или алгоритм станут более точно отражать реальность. В конце концов, мы живем в мире, который фундаментально нечеток.