Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа 5.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Общая постановка задачи

Спроектировать систему типа Мамдани средствами пакета Fuzzy Logic Toolbox на примере построения нечеткой аппроксимирующей системы. Выбранную нелинейную функцию описать базой правил для лингвистических переменных, описывающих z(x,y), определенных на множестве из пяти, семи, девяти и одиннадцати термов.

Примечание. Если z выходит за заданные границы, то z принимает значение равное значению минимальной или максимальной границы, соответственно. pi = 3,1415926535897932384626433832795

Список индивидуальных данных

№

Функция

Область применения

График

x

y

z

1.

-2<x<2

-pi<y<pi

-1<z<4

2.

-pi<x<pi

-pi<y<pi

-2<z<2

3.

-pi<x<pi

-pi<y<pi

-3<z<3

4.

-4<x<4

-4<y<4

-4<z<4

5.

-3<x<3

-3<y<3

0<z<4

6.

-3<x<3

-3<y<3

-4<z<4

7.

-3<x<3

-3<y<3

-4<z<3

8.

-pi/2<x<pi/2

-pi/2<y<pi/2

-0.5<z<1.5

9.

-5<x<5

-5<y<5

-1<z<1

10.

-pi/2<x<pi/2

-pi/2<y<pi/2

-1<z<1.5

11.

-pi/2<x<pi/2

-pi/2<y<pi/2

-1<z<1.5

12.

-2<x<2

-pi/2<y<pi/2

-0.6<z<2

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

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

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

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

%Построение графика функции 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');

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

Рисунок 4.13 - Эталонная поверхность

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

Шаг 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 (рисунок 4.14) и нажмем <Enter>.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рисунок 4.17 - База знаний в RuleEditor

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

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

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

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

Рисунок 4.19 - Поверхность «входы-выход» в окне SurfaceViwer