ИИС. ИИС ПЗ4 Архипова К.С.. Российский государственный социальный университет практическое задание 4 по дисциплине Интеллектуальные информационные системы
Скачать 3.48 Mb.
|
ПРАКТИЧЕСКОЕ ЗАДАНИЕ 4 по дисциплине «Интеллектуальные информационные системы» Работа с нечеткой логикой (тема практического задания)
Москва 2022 Программная реализация моделей нечеткой логикиВ настоящее время существует огромное количество программных продуктов, позволяющих реализовывать нейросетевые структуры, но значительно меньше программ, работающих с моделями нечеткой логики (и они пока практически недоступны отечественным специалистам). Для решения задач нечеткой логики можно использовать математическую систему MATLAB, а конкретнее пакет нечеткой логики FuzzyLogicToolbox. Fuzzy Logic Toolbox – это пакет расширения MATLAB, содержащий инструменты для проектирования систем нечеткой логики. Пакет позволят создавать экспертные системы на основе нечеткой логики, проводить кластеризацию нечеткими алгоритмами, а также проектировать нечеткие нейросети. Пакет включает графический интерфейс для интерактивного пошагового проектирования нечетких систем, функции командной строки для разработки программ, а также специальные блоки для построения систем нечеткой логики в Simulink. Все функции пакета написаны на открытом языке MATLAB, что позволяет контролировать исполнение алгоритмов, изменять исходный код, а также создавать свои собственные функции и процедуры. Ключевые особенности: 1 Графический интерфейс для интерактивного пошагового проектирования нечетких систем; 2 Функции для создания экспертных систем на основе нечеткой логики; 3 Поддержка логики И, ИЛИ и НЕ в настраиваемых правилах; 4 Стандартные типы экспертных систем нечеткой логики (Mamdani, Sugeno); 5 Функции для нейроадаптивной и нечеткой кластеризации с обучением; 6 Включение нечетких систем в Simulink-модели; 7 Генерация С-кода и независимых приложений, реализующих системы нечеткой логики. Рисунок 1 – FuzzyLogicToolbox Пример использования инструмента для конкретной задачиНеобходимо создать экспертную систему, которая позволит определить сколько следует дать официанту на чай за обслуживание в ресторане, при заданной оценке качества еды и обслуживания по 10 бальной шкале где 0 наихудшая и 10 наилучшая оценка. В среднем в ресторанах чаевые составляют 15% но эта величина может быть изменена в зависимости от оценки качества еды и обслуживания. Будем также предполагать, что у нас есть представления о малых чаевых, средних чаевых и щедрых. Мы хотим отобразить связь между двумя входами (качество еды и обслуживание) и выходом - количество чаевых. Чаевые должны быть щедрыми если еда и обслуживание были отличными иначе чаевые должны быть не высокими, при этом можно выделить некую плоскую область со значением 15%. Подход на базе нечеткой логики: Если еда и обслуживание плохие, то чаевые малые; Если еда и обслуживание среднее, то чаевые средние; Если еда и обслуживание хорошие, то чаевые большие. Смоделируем систему нечеткого вывода по этой задаче: Определим входы и выходы; Зададим функции принадлежности для нечетких переменных; Определим правила работы системы. Для начала необходимо вызвать FIS редактор набрав в командной строке fuzzy. Рисунок 2 – FIS Editor Через меню Edit => Add Variable => Input добавляем еще один вход. Рисунок 3 – Добавление входа В строке Name указываем наименования входов сервис и еда (service, food) также указываем в сроке Name имя вывода – чаевые (tip). Рисунок 4 – Поименованные элементы Присвоим имя всей системе через меню File => Export => To Workspace => TipExpert. Рисунок 5 – Наименование системы Рисунок 6 – Именованная система Теперь зададим функции принадлежности. Переходим в меню Edit => Membership Functions. Рисунок 7 – Переход в режим редактирования функций принадлежности Теперь отредактируем функцию принадлежности переменной service. В строке Range и Display Range устанавливаем значения от [0 10]. Зададим 3 функции принадлежности гауссового типа. Меню Edit =>Add MFs=>gaussmf. Рисунок 8 – Добавление функций гауссового типа В строке Name для функций укажем имена poor (плохой), good (хороший) и excellent (отличный). Рисунок 9 – Именование функций принадлежности Аналогично создадим 2 функции для food только теперь это будут функции трапецеидальной формы trapmf. Рисунок 10 – Функции принадлежности food Функции назовем good (хорошая еда) и bad (плохая еда). Установим параметры Range [0 10], Display Range [0 10] и Params [7 9 10 10]. Рисунок 11 – Функции принадлежности food Отредактируем переменную tip. Зададим 3 функции принадлежности треугольной формы cheap (малые чаевые), average(средние) и generous (большие чаевые). Установим параметры Range [0 30], Display Range [0 30] и Params [20 25 30]. Рисунок 12 – Функции принадлежности tip Теперь создаём правила. Меню Edit => Rules. Установим следующие правила. Рисунок 13 – Правила Посмотрим, как работает наша система. В текущем меню нажмём View => Rules. Сдвинем бегунок service на 0 и food на 10. Видим, что рекомендованное значение tip = 15, если оба значения ставим в 0, то tip = 6.08, если service 10 и food 9,95, то tip = 23.9 и так далее. В зависимости от изменения значений в переменных service и food будут и изменяться рекомендуемые значения tip. Рисунок 14 – Рекомендуемые чаевые при обслуживании 0 и еде 10 Рисунок 15 – Рекомендуемые чаевые при обслуживании 0 и еде 0 Рисунок 16 – Рекомендуемые чаевые при обслуживании 10 и еде 9,95 Можем также отобразить поверхность отклика что бы отобразить зависимости выходной переменной от входных. В этом же меню View => Surface. В выпадающем списке X (input) можно выбрать по какому входу будет строиться фигура service или food. Рисунок 17 – Поверхность отклика |