Основные сведения

Лабораторная работа №3

Проектирование нечетких систем двух типов - Мамдани и Сугэно

Цель: Изучить свойства нечетких систем двух типов – Мамдани и Сугэно

 

Задача: Решить задачу при помощи спроектированной ситемы Мамдани или Сугэно

Основные сведения

Fuzzy Logic Toolbox - это пакет прикладных программ, входящих в состав среды MatLab. Он позволяет создавать системы нечеткого логического вывода и нечеткой классификации в рамках среды MatLab, с возможностью их интегрирования в Simulink. Базовым понятием Fuzzy Logic Toolbox является FIS-структура - система нечеткого вывода (Fuzzy Inference System). FIS-структура содержит все необходимые данные для реализации функционального отображения “входы-выходы” на основе нечеткого логического вывода согласно схеме, приведенной на рис. 1.

Рисунок 1. Нечеткий логический вывод
Обозначения:
X - входной четкий вектор;
- вектор нечетких множеств, соответствующий входному вектору X;
- результат логического вывода в виде вектора нечетких множеств;
Y - выходной четкий вектор.

Модуль fuzzy позволяет строит нечеткие системы двух типов - Мамдани и Сугэно. В системах типа Мамдани база знаний состоит из правил вида “Если x1=низкий и x2=средний, то y=высокий”. В системах типа Сугэно база знаний состоит из правил вида “Если x1=низкий и x2=средний, то y=a0+a1x1+a2x2". Таким образом, основное отличие между системами Мамдани и Сугэно заключается в разных способах задания значений выходной переменной в правилах, образующих базу знаний. В системах типа Мамдани значения выходной переменной задаются нечеткими термами, в системах типа Сугэно - как линейная комбинация входных переменных.

 

Прядок выполнения работы

Проектирование систем типа Мамдани

Рассмотрим основные этапы проектирования систем типа Мамдани на примере создания системы нечеткого логического вывода, моделирующей зависимость , . Проектирование системы нечеткого логического вывода будем проводить на основе графического изображения указанной зависимости.

Для построения трехмерного изображения функции в области составим следующую программу:

%Построение графика функции y=x1^2*sin(x2-1)
%в области x1є[-7,3] и x2є[-4.4,1.7].
n=15;
x1=-7:10/(n-1):3;
x2=-4.4:6.1/(n-1):1.7;
y=zeros(n,n);
for j=1:n
y(j,:)=x1.^2*sin(x2(j)-1);
end
surf(x1,x2,y)
xlabel('x1')
ylabel('x2')
zlabel('y')
title('Target');

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

Рис. 2. Эталонная поверхность

Шаг 1. Для загрузки основного fis-редактора напечатаем слова fuzzy в командной строке. После этого откроется нового графическое окно, показанное на рис. 3.

Рис. 3. Окно редактора FIS-Editor

Шаг 2. Добавим вторую входную переменную. Для этого в меню Edit выбираем команду Add input.

Шаг 3. Переименуем первую входную переменную. Для этого сделаем один щелчок левой кнопкой мыши на блоке input1, введем новое обозначение x1 в поле редактирования имени текущей переменной и нажмем <Enter>.

Шаг 4. Переименуем вторую входную переменную. Для этого сделаем один щелчок левой кнопкой мыши на блоке input2, введем новое обозначение x2 в поле редактирования имени текущей переменной и нажмем <Enter>.

Шаг 5. Переименуем выходную переменную. Для этого сделаем один щелчок левой кнопкой мыши на блоке output1, введем новое обозначение y в поле редактирования имени текущей переменной и нажмем <Enter>.

Шаг 6. Зададим имя системы. Для этого в меню File выбираем в подменю Exportкоманду To diskи вводим имя файла, например, first.

Шаг 7. Перейдем в редактор функций принадлежности. Для этого сделаем двойной щелчок левой кнопкой мыши на блоке x1.

Шаг 8. Зададим диапазон изменения переменной x1. Для этого напечатаем -7 3в поле Range(см. рис. 3.3) и нажмем <Enter>.

Шаг 9. Зададим функции принадлежности переменной x1. Для лингвистической оценки этой переменной будем использовать 3 терма с треугольными функциями принадлежности. Для этого в меню Editвыберем команду Add MFs...В результате появиться диалоговое окно выбора типа и количества функций принадлежностей. По умолчанию это 3 терма с треугольными функциями принадлежности. Поэтому просто нажимаем <Enter>.

Шаг 10. Зададим наименования термов переменной x1. Для этого делаем один щелчок левой кнопкой мыши по графику первой функции принадлежности (см. рис. 3.3). Затем вводим наименование терма, например, Низкий, в поле Nameи нажмем <Enter>. Затем делаем один щелчок левой кнопкой мыши по графику второй функции принадлежности и вводим наименование терма, например, Средний, в поле Nameи нажмем <Enter>. Еще раз делаем один щелчок левой кнопкой мыши по графику третьей функции принадлежности и вводим наименование терма, например, Высокий, в поле Nameи нажмем <Enter>. В результате получим графическое окно, изображенное на рис. 4.

Рис.4. Функции принадлежности переменной x1

Шаг 11. Зададим функции принадлежности переменной x2. Для лингвистической оценки этой переменной будем использовать 5 термов с гауссовскими функциями принадлежности. Для этого активизируем переменную x2с помощью щелчка левой кнопки мыши на блоке x2.Зададим диапазон изменения переменной x2. Для этого напечатаем -4.4 1.7в поле Range(см. рис. 5) и нажмем <Enter>. Затем в меню Editвыберем команду Add MFs.... В появившимся диалоговом окне выбираем тип функции принадлежности gaussmfв поле MF type и 5термов в поле Number of MFs. После этого нажимаем <Enter>.

Рис 5. Функции принадлежности переменной x2

Шаг 12. По аналогии с шагом 10 зададим следующие наименования термов переменной x2: Низкий, Ниже среднего,Средний,Выше среднего,Высокий. В результате получим графическое окно, изображенное на рис. 5.

Шаг 13. Зададим функции принадлежности переменной y. Для лингвистической оценки этой переменной будем использовать 5 термов с треугольными функциями принадлежности. Для этого активизируем переменную yс помощью щелчка левой кнопки мыши на блоке y.Зададим диапазон изменения переменной y. Для этого напечатаем -50 50в поле Range(см. рис. 6) и нажмем <Enter>.Затем в меню Editвыберем команду Add MFs.... В появившимся диалоговом окне выбираем 5термов в поле Number of MFs. После этого нажимаем <Enter>.

Рис 6. Функции принадлежности переменной y

Шаг 14. По аналогии с шагом 10 зададим следующие наименования термов переменной y: Низкий, Ниже среднего,Средний,Выше среднего,Высокий. В результате получим графическое окно, изображенное на рис. 3.5.

Шаг 15. Перейдем в редактор базы знаний RuleEditor. Для этого выберем в меню Editвыберем команду Edit rles....

Шаг 6. На основе визуального наблюдения за графиком, изображенным на рис. 2 сформулируем следующие девять правил:

1. Если x1=Средний, то y=Средний;

2. Если x1=Низкий и x2=Низкий, то y=Высокий;

3. Если x1=Низкий и x2=Высокий, то y=Высокий;

4. Если x1=Высокий и x2=Высокий, то y=Выше Среднего;

5. Если x1=Высокий и x2=Низкий, то y=Выше Среднего;

6. Если x1=Высокий и x2=Средний, то y=Средний;

7. Если x1=Низкий и x2=Средний, то y=Низкий;

8. Если x1=Высокий и x2=Выше Среднего, то y=Средний;

9. Если x1=Высокий и x2=Ниже Среднего, то y=Средний.

Для ввода правила необходимо выбрать в меню соответствующую комбинацию термов и нажать кнопку Add rule. На рис. 7 изображено окно редактора базы знаний после ввода всех девяти правил. Число, приведенное в скобках в конце каждого правила представляет собой весовым коэффициент соответствующего правила.

Рис 7 База знаний в RuleEditor

Шаг 17. Сохраним созданную систему. Для этого в меню File выбираем в подменю Exportкоманду To disk.

На рис. 8 приведено окно визуализации нечеткого логического вывода. Это окно активизируется командой View rules... меню View.В поле Input указываются значения входных переменных, для которых выполняется логический вывод.

Рис 7. Визуализация нечеткого логического вывода в RuleViewer

На рис. 9 приведена поверхность “входы-выход”, соответствующая синтезированной нечеткой системе. Для вывода этого окна необходимо использовать команду View surface... меню View.Сравнивая поверхности на рис. 2 и на рис. 9 можно сделать вывод, что нечеткие правила достаточно хорошо описывают сложную нелинейную зависимость.

Рис 9. Поверхность “входы-выход” в окне SurfaceViwer

Проектирование систем типа Сугэно

Рассмотрим основные этапы проектирования систем типа Сугэно на примере создания системы нечеткого логического вывода, моделирующей зависимость , (рис. 2). Моделирование этой зависимости будем осуществлять с помощью следующей базы знаний:

1. Если x1=Средний, то y=0;

2. Если x1=Высокий и x2=Высокий, то y=2x1+2x2+1;

3. Если x1=Высокий и x2=Низкий, то y=4x1-x2;

4. Если x1=Низкий и x2=Средний, то y=8x1+2x2+8;

5. Если x1=Низкий и x2=Низкий, то y=50;

6. Если x1=Низкий и x2=Высокий, то y=50.

Проектирование системы нечеткого логического вывода типа Сугэно состоит в выполнении следующей последовательности шагов.

Шаг 1. Для загрузки основного fis-редактора напечатаем слова fuzzy в командной строке. После этого откроется нового графическое окно, показанное на рис. 3.2.

Шаг 2. Выберем тип системы. Для этого в меню File выбираем в подменю New fis…команду Sugeno.

Шаг 3. Добавим вторую входную переменную. Для этого в меню Edit выбираем команду Add input.

Шаг 4. Переименуем первую входную переменную. Для этого сделаем один щелчок левой кнопкой мыши на блоке input1, введем новое обозначение x1 в поле редактирования имени текущей переменной и нажмем <Enter>.

Шаг 5. Переименуем вторую входную переменную. Для этого сделаем один щелчок левой кнопкой мыши на блоке input2, введем новое обозначение x2 в поле редактирования имени текущей переменной и нажмем <Enter>.

Шаг 6. Переименуем выходную переменную. Для этого сделаем один щелчок левой кнопкой мыши на блоке output1, введем новое обозначение y в поле редактирования имени текущей переменной и нажмем <Enter>.

Шаг 7. Зададим имя системы. Для этого в меню File выбираем в подменю Exportкоманду To diskи введем имя файла, например, FirstSugeno.

Шаг 8. Перейдем в редактор функций принадлежности. Для этого сделаем двойной щелчок левой кнопкой мыши на блоке x1.

аг 9. Зададим диапазон изменения переменной x1. Для этого напечатаем -7 3в поле Range(см. рис. 10) и нажмем <Enter>.

Рис 10. Функции принадлежности переменной x1

Шаг 10. Зададим функции принадлежности переменной x1. Для лингвистической оценки этой переменной будем использовать, 3 терма с треугольными функциями принадлежности, которые установлены по умолчанию. Зададим наименования термов переменной x1. Для этого делаем один щелчок левой кнопкой мыши по графику первой функции принадлежности (см. рис. 3.9). Затем напечатаем наименование терма Низкий в поле Name. Затем делаем один щелчок левой кнопкой мыши по графику второй функции принадлежности и вводим наименование терма Средний в поле Name. Еще раз делаем один щелчок левой кнопкой мыши по графику третьей функции принадлежности и вводим наименование терма Высокий в поле Nameи нажмем <Enter>. В результате получим графическое окно, изображенное на рис. 3.9.

Шаг 11. Зададим функции принадлежности переменной x2. Для лингвистической оценки этой переменной будем использовать 3 терма с треугольными функциями принадлежности, которые установлены по умолчанию. Для этого активизируем переменную x2с помощью щелчка левой кнопки мыши на блоке x2.Зададим диапазон изменения переменной x2. Для этого напечатаем -4.4 1.7в поле Range(см. рис. 11) и нажмем <Enter>. По аналогии с предыдущим шагомзададим следующие наименования термов переменной x2: Низкий, Средний,Высокий. В результате получим графическое окно, изображенное на рис. 11.

Рис 11. Функции принадлежности переменной x2

Шаг 12. Зададим линейные зависимости между входами и выходом, приведенные в базе знаний. Для этого активизируем переменную yс помощью щелчка левой кнопки мыши на блоке y.В правом верхнем угле появилось обозначение трех функций принадлежности, каждая из которых соответствует одной линейной зависимости между входами и выходам. В базе знаний, приведенной в начале подраздела указаны 5 различных зависимостей: y=50; y=4x1-x2; y=2x1+2x2+1; y=8x1+2x2+8; y=0. Поэтому добавим еще две зависимости путем выбора команды Add Mfs…меню Edit.В появившимся диалоговом окне в поле Number of MFsвыбираем 2 и нажимаем кнопку OK.

Шаг 13. Зададим наименования и параметры линейных зависимостей. Для этого делаем один щелчок левой кнопкой мыши по наименованию первой зависимости mf1. Затем печатаем наименование зависимости, например 50, в поле Name, и устанавливаем тип зависимости – константа путем выбора опции Сonstantв меню Type. После этого вводим значение параметра – 50в поле Params.

Аналогично для второй зависимости mf2введем наименование зависимости, например 8+8x1+2x2. Затем укажем линейный тип зависимости путем выбора опции Linearв меню Typeи введем параметры зависимости 8 2 8в поле Params. Для линейной зависимости порядок параметров следующий: первый параметр – коэффициент при первой переменной, второй – при второй и т.д., и последний параметр – свободный член зависимости.

Аналогично для третьей зависимости mf3введем наименование зависимости, например 1+2x1+2x2, укажем линейный тип зависимости и введем параметры зависимости 2 2 1.

Для четвертой зависимости mf4введем наименование зависимости, например 4x1-x2, укажем линейный тип зависимости и введем параметры зависимости 4 -1 0.

Для пятой зависимости mf5введем наименование зависимости, например 0, укажем тип зависимости - константа и введем параметр зависимости 0.

В результате получим графическое окно, изображенное на рис. 12.

Рис 12. Окно линейных зависимостей “входы-выход”

Шаг 14. Перейдем в редактор базы знаний RuleEditor. Для этого выберем в меню Editкоманду Edit rules.... и введем правила базы знаний. Для ввода правила необходимо выбрать соответствующую комбинацию термов и зависимостей и нажать кнопку Add rule. На рис. 13 изображено окно редактора базы знаний после ввода всех шести правил.

Рис 13. Нечеткая база знаний для системы типа Сугэно

На рис. 14 приведено окно визуализации нечеткого логического вывода. Это окно активизируется командой View rules... меню View.В поле Input указываются значения входных переменных, для которых выполняется логический вывод. Как видно из этого рисунка значение выходной переменной рассчитывается как среднее взвешенное значение результатов вывода по каждому правилу.

Рис. 14 Визуализация нечеткого логического вывода для системы типа Сугэно

На рис. 15 приведена поверхность “входы-выход”, соответствующая синтезированной нечеткой системе. Для вывода этого окна необходимо использовать команду View surface... меню View.Сравнивая поверхности на рис. 2, рис. 9 и на рис. 15 можно сделать вывод, что нечеткие правила достаточно хорошо описывают сложную нелинейную зависимость. При этом, модель типа Сугэно более точная. Преимущество моделей типа Мамдани состоит в том, что правила базы знаний являются прозрачными и интуитивно понятными, тогда как для моделей типа Сугэно не всегда ясно какие линейные зависимости “входы-выход” необходимо использовать.

Рис 15. Поверхность “входы-выход” для системы типа Сугэно

Задание

 

На основе вариантов заданий из Лабораторной работы № 2 спроектировать систему Мамдани и Сугэно.

 

Нечеткое значение (множество термов) Функции принадлежности различных термов Множество термов Тип модели
скорость истребителей II мировой войны 'trimf' 'trapmf' 'gaussmf'   Максимальный потолок Сугэно
интервал движения автобусов ‘gauss2mf' 'sigmf' 'dsigmf' Среднее кол-во автобусов на маршруте Мамдани
скорость современных истребителей 'psigmf' 'gbellmf' 'smf'   Максимальная дальность полета Мамдани
яркость ЖК мониторов 'zmf' 'pimf' 'psigmf'   Время реакции Сугэно
производительность процессоров 'trapmf' 'gaussmf' 'zmf' Максимальное тепловыделение Мамдани
емкость жестких дисков 'psigmf' 'pimf' 'dsigmf' Максимальная скорость передачи Сугэно
использование оперативной памяти программами 'gaussmf' 'psigmf' 'zmf' Размер программам Сугэно
выделяемая мощность процессоров ‘gauss2mf' 'sigmf' 'trapmf' Производительность Мамдани
Максимальная выделяемая мощность видеокарт 'trapmf' 'gaussmf' 'pimf' Производительность Сугэно
Скорость вращения вентилятора идеокарт 'gbellmf' 'gaussmf' 'sigmf' Наименьший шум системой охлаждения в Сугэно