Пример построения нечеткой экспертной системы
Рассмотрим методику построения нечеткой экспертной системы, которая должна помочь пользователю с ответом на вопрос: сколько дать «на чай» официанту за обслуживание в ресторане?[2]. Основываясь на каких-то устоявшихся обычаях и интуитивных представлениях, примем, что задача о чаевых может быть описана следующими предложениями. 1. Если обслуживание плохое или еда подгоревшая, то чаевые – малые. 2. Если обслуживание хорошее, то чаевые – средние. 3. Если обслуживание отличное или еда превосходная, то чаевые – щедрые. Качество обслуживания и еды будем оценивать по 11-балльной системе (0 – наихудшая оценка, 10 – наилучшая). Будем предполагать, далее, что малые чаевые составляют около 5% от стоимости обеда, средние – около 15% и щедрые – примерно 25%. Заметим, что представленной информации, в принципе, достаточно для проектирования нечеткой экспертной системы. Такая система будет иметь 2 входа (которые условно можно назвать «сервис» и «еда»), один выход («чаевые»), три правила типа «если… то» (в соответствии с тремя приведенными предложениями) и по три значения (соответственно, 0 баллов, 5 баллов, 10 баллов и 5%, 15% и 25%) для центров функций принадлежности входов и выхода. Построим данную систему, используя алгоритм вывода Mamdani. При конструировании нечеткой экспертной системы применяем пакет нечеткой логики Fuzzy Toolbox системы MatLab. 1. Командой (функцией) Fuzzy из режима командной строки запускается основная интерфейсная программа пакета Fuzzy Logic – редактор нечеткой системы вывода (Fuzzy Inference System Editor, FIS Editor, FIS – редактор). Вид открывающегося при этом окна приведен на рисунке. Главное меню редактора содержит позиции: File – работа с файлами моделей (их создание, сохранение, считывание и печать);
Edit – операции редактирования (добавление и исключение входных и выходных переменных); View – переход к дополнительному инструментарию.
2. По умолчанию, исходный алгоритм вывода - типа Mamdani и здесь никаких изменений не требуется, но в системе должно быть два входа, поэтому через пункт меню Edit/Add Variable…->Input добавляем в систему этот второй вход (в окне редактора появится второй желтый блок с именем input2). Делая далее однократный щелчок левой кнопкой мыши по блоку input1, меняем в поле имени его имя на service, завершая ввод нового имени нажатием клавиши Enter. Аналогичным образом устанавливаем имя food блоку input2 и tips – выходному блоку output1. Присвоим сразу же и имя всей системе, например Tips, выполнив это через пункт меню File/Export -> To Workspace… Вид окна редактора после указанных действий приведен на рисунке. 3. Зададим теперь функции принадлежности переменных. Напомним ещё раз, что программу-редактор функций принадлежности можно открыть тремя способами: · через пункт меню Edit/Membership Functions…, · двойным щелчком левой кнопки мыши по иконке, отображающей соответствующую переменную, · нажатием клавиш Ctrl+2. Любым из приведённых способов перейдём к данной программе. Задание и редактирование функции принадлежности начнем с переменной «service». Сначала в полях Range и Display Range установим диапазон изменения и отображения этой переменной – от 0 до 10 (баллов), подтверждая ввод нажатием клавиши Enter. Затем через пункт меню Edit/MFs… перейдем к диалоговому окну вида и зададим в нем функции принадлежности гауссова типа (gaussmf) с общим числом 3. Нажмем кнопку ОК и возвратимся в окно редактора функций принадлежности. Не изменяя размах и положение заданных функций, заменим только их имена на bad, good и excellent. Щелчком левой кнопки мыши по иконке food войдем в окно редактирования функций принадлежности для этой переменной. Зададим сначала диапазон ее изменения от 0 до 10, а затем, поступая как ранее, зададим две функции принадлежности трапецеидальной формы (trapmf) с параметрами, соответственно, [0 0 1 3] и [7 9 10 10] и именами burning и fantastic.
Для выходной переменной tips укажем сначала диапазон изменения от 0 до 30, потом зададим три функции принадлежности треугольной формы (trimf) с именами small, middle, large так, как это представлено на рисунке. Заметим, что можно, разумеется, задать и какие-либо другие функции или выбрать их другие параметры. 4. Перейдем к конструированию правил. Для этого выберем пункт меню Edit/Rules… Далее ввод правил производится в соответствии с предложениями, описывающими задачу. Итоговый набор правил отображен на рисунке и выглядит следующим образом: 1. If (service is bad) or (food is burning) then (tips is small) (1) 2. If (service is good) then (tips is middle) (1) 3. If (service is excellent) or (food is fantastic) then (tips is large) (1) Такая запись представляется достаточно понятной; единица в скобках после каждого правила указывает его «вес», т.е. значимость правила. Данный вес можно менять, используя соответствующее поле в левой нижней части окна редактора правил. Правила представимы и в других формах: символической и индексной, при этом переход от одной формы к другой происходит через опции пункта меню редактора правил Options/Format. На этом, собственно, конструирование экспертной системы закончено. 5. Самое время проверить систему в действии. Откроем окно просмотра правил (View/Rules) и установим значения переменных: service=0 (плохой), food=10 (превосходная). Увидим ответ: tips=15 (средние). Подтверждением отмеченной зависимости выходной переменной от входных может служить вид поверхности отклика, который представляется при выборе пункта меню View/Surface; обратите внимание, что с помощью мышки график можно поворачивать во все стороны. В открывшемся окне, меняя имена переменных в полях ввода, можно задать и просмотр одномерных зависимостей, например tips от food. 4. ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ 1. Что такое нечеткое множество? 2. Что такое нечеткая логика? 3. Что такое нечеткая переменная? 4. Что такое лингвистическая переменная? 5. Что такое функция принадлежности? 6. Что является основой для проведения операции нечеткого логического вывода?
7. Что является результатом нечеткого вывода? 8. Какие разработаны модели нечеткого вывода? 9. В чем заключается алгоритм Mamdani?
5. ГЛОССАРИЙ
1. Нечеткое множество(fuzzy sets)- множество упорядоченных пар A ={ m A(х)/ х }, где m A(х) - характеристическая функция (или просто функция принадлежности), принимающая значения из некоторого упорядоченного множества M =[0,1]. Функция принадлежности указывает степень (уровень) принадлежности элемента x подмножеству A. Если M ={0,1}, то нечеткое подмножество A может рассматриваться как обычное или четкое множество. 2. Нечеткая логика (fuzzy logic)-раздел математики, представляющий собой обобщение классической логики и теории множеств. В основе нечеткой логики лежит описание объектов и процессов с помощью нечетких множеств. 3. Характеристическая функция нечеткого множества (мembership function) указывает на степень (уровень) принадлежности некоторого элемента x множеству A. Нечеткое множество отличается от обычного тем, что для любого его элемента нельзя однозначно утверждать, что он принадлежит или не принадлежит некоторому подмножеству, а говорят, что принадлежит, но в той или иной степени. 4. Лингвистическая переменная(Linguistic variable)-переменная, которая может принимать значения понятий (фраз) естественного языка и используется при описании объектов и явлений с помощью нечетких множеств. Значения, которые принимает сама лингвистическая переменная, в свою очередь являются нечеткими переменными и принимают значения из некоторого диапазона числовых значений. 5. Фазификация- введение нечеткости в нечеткий логический вывод. 6. Дефазификация- композиция и приведение к четкости в нечетком логическом выводе.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|