Разработка системы нечеткого вывода для задачи «Чаевые в ресторане» в среде fuzzyTECH
Пример "Чаевые в ресторане".
Рассмотрим ситуацию в ресторане: после окончания обслуживания посетителя принято оставлять официанту чаевые.
Задача состоит в том, чтобы разработать некоторую экспертную систему, которая была бы реализована в виде системы нечеткого вывода и позволяла бы определять величину чаевых на основе субъективных оценок посетителей качества обслуживания и качества приготовления заказанных блюд.
Эмпирические знания о рассматриваемой проблемной области могут быть представлены в форме следующих эвристических правил продукций:
- Если обслуживание плохое или ужин подгоревший, то чаевые малые.
- Если обслуживание хорошее, то чаевые средние.
- Если обслуживание отличное или ужин превосходный, то чаевые щедрые.
В качестве входных параметров системы нечеткого вывода будем рассматривать 2 нечеткие лингвистические переменные: "Service" (качество обслуживания) и “Food” (качество приготовления заказанных блюд или сокращенно - качество ужина), а в качестве выходных параметров нечеткую лингвистическую переменную “Tip” (величина чаевых).
В качестве терм-множества первой лингвистической переменной "Service" будем использовать множество Т1={"poor" (плохое), "good" (хорошее), "excellent" (отличное)}, а в качестве терм-множества второй лингвистической переменной "Food" будем использовать множество Т2={"rancid" (подгоревший), "delicious" (превосходный)}. В качестве терм-множества выходной лингвистической переменной "Tip" будем использовать множество Т3={"cheap" (малые), "average" (средние), "generous" (щедрые)}. При этом каждый из термов первой и второй входной переменной (качество обслуживания и приготовления заказанных блюд) будем оценивать по 10балльной порядковой шкале, при которой цифре 0 соответствует наихудшая оценка, а цифре 10 наилучшая оценка. Что касается термов выходной переменной, то будем предполагать, что .малые чаевые составляют около 5% от стоимости заказанных блюд, средние чаевые около 15%, а щедрые чаевые около 25%.
С учетом сделанных уточнений, рассмотренная субъективная информация о величине чаевых может быть представлена в форме 3-x правил нечетких продукций следующего вида (система нечеткого вывода типа Мамдани):
ПРАВИЛО_1: IF ("Service is poor") OR ("Food is rancid ") THEN ("Tip is cheap")
ПРАВИЛО_2: IF ("Service is good") THEN ("Tip is averаgе")
ПРАВИЛО_3: IF ("Service is excellent") OR ("Food is delicious") THEN ("Tip is generous")
Разработка системы нечеткого вывода для задачи «Чаевые в ресторане» в среде fuzzyTECH
Откроем мастер нечеткого проекта FWD, воспользовавшись специальной кнопкой на панели инструментов программы fuzzy TECH . С помощью мастера нечеткого проекта вы сможете создать новы проект за несколько шагов.
1) На первом шаге мастера оставляем выбранный по умолчанию режим создания нового проекта (Create New System).
2) На втором шаге мастера зададим количество входных (Input LVs = 2), выходных (Output LVs = 1) и промежуточных (Intermediate LVs = 0) лингвистических переменных, а так же общее количество значений терм-множеств входных (Input Terms/LVs = 3), выходных (Output Terms/LVs = 3) и промежуточных (Interm. Terms/ LVs = 2) лингвистических переменных:
Примечания:
- В Input Terms/LVs указывается 3 терма – максимальное количество термов во входных переменных (для второй входной переменной "Food" впоследствии количество термов будет отредактировано до двух);
- Промежуточных лингвистических переменных в нашем примере нет, как нет и термов промежуточных переменных. Количество термов – 2 указывается, для нормальной работы Мастера.
3) В следующих диалоговых окнах мастера нечеткого проекта изменим имена входных и выходной лингвистических переменных, предлагаемые программой fuzzyTECH по умолчанию, и диапазоны изменения их значений.
4)
В последующих диалоговых окнах оставим без изменения свойства, предложенные программой fuzzyTECH по умолчанию: метод дефаззификации центр максимума (Best Compromize, СоМ) и количество блоков правил, равное 1.
После окончания работы с мастером нечеткого проекта будет создан прототип системы нечеткого вывода. Структура системы нечеткого вывода с измененными значениями текстовых блоков:
Примечание:
- Для добавления текстовых блоков в окно редактора проекта использовать кнопку Text
расположенную на панели инструментов.
5) Далее необходимо более точно специфицировать термы и их функции принадлежности для входных и выходной лингвистических переменных разрабатываемой системы нечеткого вывода, для чего следует воспользоваться редактором лингвистической переменной. Для первой входной лингвистической переменной изменим имена заданных ранее по умолчанию термов. Новые имена термов вводятся в окне свойств терма, которое может быть открыто с помощью соответствующей операции контекстного меню.
Вид редактора лингвистической переменной в процессе изменения имени первого терма для первой из входных переменных:
6) Далее изменим форму и значения функций принадлежности термов первой входной линrвистической переменной. Для этоrо следует выбрать S-образную форму кривых В окне свойств каждоrо терма и задать коэффициент кривизны кривой равным 0.8.
Вид редактора функций принадлежности после внесенных изменений для первой входной линrвистической переменной :
7) Аналогичным образом изменим названия термов второй входной переменной "Food" и удалим один из термов с соответствующей функцией принадлежности. Для удаления терма следует выделить удаляемую функцию принадлежности и нажать клавишу <Delete> на клавиатуре. Вид редактора лингвистической переменной после внесенных изменений для второй входной лингвистической переменной:
8)
Наконец, изменим названия термов и вид функций принадлежности для выходной переменной "Tip", оставив без изменения треугольный тип функций принадлежности, предложенный программой fuzzyTECH. Вид редактора лингвистической переменной после сделанных изменений для выходной переменной "Tip":
9) Теперь можно определить базу правил для разрабатываемой системы нечеткого вывода. Для этой цели можно воспользоваться табличным редактором блока правил. Поскольку первоначально база правил нечеткого вывода пуста, то после вызова табличного редактора правил центральное окно этого редактора не содержит никаких правил. Для их определения следует использовать воспользоваться пунктом контексным меню Spreadsheet Full Editor, после выбора которого будет сгенерирована база из 18 правил нечетких продукций.
Удалим избыточные правила и один из термов подусловий для лингвистической переменной "Food".
Примечание:
- Для смены значения термов, вызвать контекстное меню терма.
- Для удаления правила, выделить строку правила щелком левой кнопки мыши по номеру правила и нажать на клавишу <Delete> на клавиатуре.
Вид табличного редактора блока правил после его определения для разрабатываемой системы нечеткого вывода:
В столбце DoS указывается ценность каждого правила. По умолчанию ценности всех правил должны быть равны.
10) Поскольку процесс нечеткоrо моделирования предполаrает анализ результатов нечеткоrо вывода при различных значениях входных переменных с цeлью установления адекватности разработанной нечеткой модели, перейдем в интерактивный режим отладки (пункт меню Debug ® Interactive). После появления rрафическоrо окна режима отладки откроем также окна редакторов всех линrвистических переменных проекта (пункт меню Window ® Open All Variable Editors of Variable Group ® All Variables) и rрафическое окно анализатора правил(пункт меню Analizer ® New Rule Analizer). Для того, чтобы упорядочить открытые окна , используем пункт меню Window® Title (Окно Project Editors можно предварительно свернуть).
Внешний вид рабочеrо интерфейса пporpaммы fuzzyTECH в режиме отладки проекта :
Для окончательного анализа разработанной нечеткой модели можно воспользоваться графическим окном просмотра поверхности нечеткого вывода на плоскости(пункт меню Analizer ® New Transfer Plot)
и графическим окном просмотра трехмерной поверхности нечеткого вывода (пункт меню Analizer ® New 3D Plot):