В этом примере показано, как настроить параметры дерева FIS с помощью двухступенчатого процесса. Для получения дополнительной информации о подобном двухступенчатом процессе, смотрите Настраивающиеся Нечеткие Системы Вывода.
Изучите и настройте правила ФИССА в дереве.
Изучите параметры MF ФИССА в дереве.
Создайте дерево FIS к модели , как показано в следующем рисунке. Для получения дополнительной информации о создании деревьев FIS смотрите Нечеткие Деревья.
Создайте fis1
как Sugeno-тип FIS, который приводит к более быстрому настраивающему процессу по сравнению с системой Mamdani, из-за ее в вычислительном отношении эффективного метода дефаззификации. Добавьте два входных параметров, обоих с областью значений [0, 10] и с тремя MFS каждый. Используйте сглаженный, дифференцируемый MF, такой как gaussmf
, чтобы совпадать с характеристиками типа данных, вы моделируете.
fis1 = sugfis('Name','fis1'); fis1 = addInput(fis1,[0 10],'NumMFs',3,'MFType','gaussmf'); fis1 = addInput(fis1,[0 10],'NumMFs',3,'MFType','gaussmf');
Добавьте выход с областью значений [–1.5, 1.5] наличие девяти MFS, соответствующих девяти возможным комбинациям входа MF. Выполнение так обеспечивает максимальную гранулярность для правил FIS. Установите выходную область значений согласно возможным значениям .
fis1 = addOutput(fis1,[-1.5 1.5],'NumMFs',9);
Создайте fis2
как Sugeno-тип FIS. Добавьте два входных параметров. Установите область значений первого входа к [–1.5, 1.5], который совпадает с областью значений выхода fis1
. Второй вход совпадает с входными параметрами fis1
. Поэтому используйте тот же входной диапазон, [0, 10]. Добавьте три MFS для каждых из входных параметров.
fis2 = sugfis('Name','fis2'); fis2 = addInput(fis2,[-1.5 1.5],'NumMFs',3,'MFType','gaussmf'); fis2 = addInput(fis2,[0 10],'NumMFs',3,'MFType','gaussmf');
Добавьте выход с областью значений [0, 1] и девять MFS. Выходная область значений установлена согласно возможным значениям .
fis2 = addOutput(fis2,[0 1],'NumMFs',9);
Соедините входные параметры и выходные параметры как показано в схеме. Первый выход fis1
, output1
, подключения к первому входу fis2
, input1
. Входные параметры fis1
соединитесь друг с другом и вторым входом fis1
подключения к второму входу fis2
.
con1 = ["fis1/output1" "fis2/input1"]; con2 = ["fis1/input1" "fis1/input2"]; con3 = ["fis1/input2" "fis2/input2"];
Наконец, создайте дерево FIS с помощью заданного ФИССА и связей.
fisT = fistree([fis1 fis2],[con1;con2;con3]);
Добавьте дополнительный выход в дерево FIS, чтобы получить доступ к выходу fis1
.
fisT.Outputs = ["fis1/output1";fisT.Outputs];
Сгенерируйте обучающие данные ввода и вывода.
x = (0:0.1:10)'; y1 = sin(x)+cos(x); y2 = y1./exp(x); y = [y1 y2];
Настройте древовидные параметры FIS на двух шагах. Во-первых, изучите правила дерева FIS с помощью глобального метода оптимизации. В данном примере используйте рой частицы.
options = tunefisOptions('Method','particleswarm','OptimizationType','learning');
Этот настраивающий шаг использует небольшое количество итераций, чтобы изучить основу правила, не сверхсоответствуя обучающим данным. Основа правила обеспечивает образованное начальное условие, которое второй шаг может использовать, чтобы оптимизировать все древовидные параметры FIS вместе. Определите максимальный номер итерации к 5 и изучите основу правила.
options.MethodOptions.MaxIterations = 5; rng('default') % for reproducibility fisTout1 = tunefis(fisT,[],x,y,options);
Best Mean Stall Iteration f-count f(x) f(x) Iterations 0 100 0.6682 0.9395 0 1 200 0.6682 1.023 0 2 300 0.6652 0.9308 0 3 400 0.6259 0.958 0 4 500 0.6259 0.918 1 5 600 0.5969 0.9179 0 Optimization ended: number of iterations exceeded OPTIONS.MaxIterations.
Затем, чтобы настроить все древовидные параметры FIS целиком, используйте локальный метод оптимизации. В данном примере используйте поиск шаблона. Локальная оптимизация обычно быстрее, чем глобальная оптимизация и может привести к лучшим результатам, когда вход нечеткие системные параметры уже сопоставим с обучающими данными.
Используйте patternsearch
метод для оптимизации. Определите номер итераций к 25.
options.Method = 'patternsearch';
options.MethodOptions.MaxIterations = 25;
Используйте getTunableSettings
чтобы получить вход, выведите и управляйте установками параметров от дерева FIS.
[in,out,rule] = getTunableSettings(fisTout1);
Настройте древовидные параметры FIS.
rng('default') % for reproducibility fisTout2 = tunefis(fisTout1,[in;out;rule],x,y,options);
Iter Func-count f(x) MeshSize Method 0 1 0.596926 1 1 3 0.551284 2 Successful Poll 2 13 0.548551 4 Successful Poll 3 20 0.546331 8 Successful Poll 4 33 0.527482 16 Successful Poll 5 33 0.527482 8 Refine Mesh 6 61 0.511532 16 Successful Poll 7 61 0.511532 8 Refine Mesh 8 92 0.505355 16 Successful Poll 9 92 0.505355 8 Refine Mesh 10 128 0.505355 4 Refine Mesh 11 175 0.487734 8 Successful Poll 12 212 0.487734 4 Refine Mesh 13 265 0.487734 2 Refine Mesh 14 275 0.486926 4 Successful Poll 15 328 0.486926 2 Refine Mesh 16 339 0.483683 4 Successful Poll 17 391 0.483683 2 Refine Mesh 18 410 0.442624 4 Successful Poll 19 462 0.442624 2 Refine Mesh 20 469 0.44051 4 Successful Poll 21 521 0.44051 2 Refine Mesh 22 542 0.435381 4 Successful Poll 23 594 0.435381 2 Refine Mesh 24 614 0.398872 4 Successful Poll 25 662 0.398385 8 Successful Poll 26 698 0.398385 4 Refine Mesh Maximum number of iterations exceeded: increase options.MaxIterations.
Стоимость оптимизации уменьшает с 0,60 до 0,40 на втором шаге.
В качестве альтернативы можно настроить определенные нечеткие системы отдельно в дереве FIS. В данном примере после изучения основы правила дерева FIS, отдельно настройте fis1
и fis2
параметры.
Чтобы получить установки параметров FIS в дереве FIS, используйте getTunableSettings
, определение имени FIS. Во-первых, получите установки параметров для fis1
.
[in,out,rule] = getTunableSettings(fisTout1,"FIS","fis1");
Настройте параметры fis1
.
rng('default')
fisTout2 = tunefis(fisTout1,[in;out;rule],x,y,options);
Iter Func-count f(x) MeshSize Method 0 1 0.596926 1 1 3 0.551284 2 Successful Poll 2 18 0.510362 4 Successful Poll 3 28 0.494804 8 Successful Poll 4 56 0.494804 4 Refine Mesh 5 84 0.493422 8 Successful Poll 6 107 0.492883 16 Successful Poll 7 107 0.492883 8 Refine Mesh 8 136 0.492883 4 Refine Mesh 9 171 0.492883 2 Refine Mesh 10 178 0.491534 4 Successful Poll 11 213 0.491534 2 Refine Mesh 12 229 0.482682 4 Successful Poll 13 264 0.482682 2 Refine Mesh 14 279 0.446645 4 Successful Poll 15 313 0.446645 2 Refine Mesh 16 330 0.44657 4 Successful Poll 17 364 0.44657 2 Refine Mesh 18 384 0.446495 4 Successful Poll 19 418 0.446495 2 Refine Mesh 20 461 0.445938 4 Successful Poll 21 495 0.445938 2 Refine Mesh 22 560 0.422421 4 Successful Poll 23 594 0.422421 2 Refine Mesh 24 597 0.397265 4 Successful Poll 25 630 0.397265 2 Refine Mesh 26 701 0.390338 4 Successful Poll Maximum number of iterations exceeded: increase options.MaxIterations.
В этом случае стоимость оптимизации улучшена путем настройки только fis1
значения параметров.
Затем получите установки параметров для fis2
и настройте fis2
параметры.
[in,out,rule] = getTunableSettings(fisTout2,"FIS","fis2"); rng('default') fisTout3 = tunefis(fisTout2,[in;out;rule],x,y,options);
Iter Func-count f(x) MeshSize Method 0 1 0.390338 1 1 2 0.374103 2 Successful Poll 2 5 0.373855 4 Successful Poll 3 10 0.356619 8 Successful Poll 4 33 0.356619 4 Refine Mesh 5 43 0.350715 8 Successful Poll 6 65 0.349417 16 Successful Poll 7 65 0.349417 8 Refine Mesh 8 87 0.349417 4 Refine Mesh 9 91 0.349356 8 Successful Poll 10 112 0.349356 4 Refine Mesh 11 138 0.346102 8 Successful Poll 12 159 0.346102 4 Refine Mesh 13 172 0.345938 8 Successful Poll 14 193 0.345938 4 Refine Mesh 15 222 0.342721 8 Successful Poll 16 244 0.342721 4 Refine Mesh 17 275 0.342721 2 Refine Mesh 18 283 0.340727 4 Successful Poll 19 312 0.340554 8 Successful Poll 20 335 0.340554 4 Refine Mesh 21 366 0.340554 2 Refine Mesh 22 427 0.337873 4 Successful Poll 23 457 0.337873 2 Refine Mesh 24 521 0.33706 4 Successful Poll 25 551 0.33706 2 Refine Mesh 26 624 0.333193 4 Successful Poll Maximum number of iterations exceeded: increase options.MaxIterations.
Стоимость оптимизации далее уменьшается путем настройки fis2
значения параметров. Чтобы постараться не сверхсоответствовать отдельных значений параметров FIS, можно далее настроить обоих fis1
и fis2
параметры вместе.
[in,out,rule] = getTunableSettings(fisTout3);
rng('default')
fisTout4 = tunefis(fisTout3,[in;out;rule],x,y,options);
Iter Func-count f(x) MeshSize Method 0 1 0.333193 1 1 8 0.326804 2 Successful Poll 2 91 0.326432 4 Successful Poll 3 116 0.326261 8 Successful Poll 4 154 0.326261 4 Refine Mesh 5 205 0.326261 2 Refine Mesh 6 302 0.326092 4 Successful Poll 7 352 0.326092 2 Refine Mesh 8 391 0.325964 4 Successful Poll 9 441 0.325964 2 Refine Mesh 10 478 0.32578 4 Successful Poll 11 528 0.32578 2 Refine Mesh 12 562 0.325691 4 Successful Poll 13 612 0.325691 2 Refine Mesh 14 713 0.229273 4 Successful Poll 15 763 0.229273 2 Refine Mesh 16 867 0.22891 4 Successful Poll 17 917 0.22891 2 Refine Mesh 18 1036 0.228688 4 Successful Poll 19 1086 0.228688 2 Refine Mesh 20 1212 0.228688 1 Refine Mesh 21 1266 0.228445 2 Successful Poll 22 1369 0.228441 4 Successful Poll 23 1381 0.227645 8 Successful Poll 24 1407 0.226125 16 Successful Poll 25 1407 0.226125 8 Refine Mesh 26 1447 0.226125 4 Refine Mesh Maximum number of iterations exceeded: increase options.MaxIterations.
В целом, стоимость оптимизации меньше после использования трех настраивающихся шагов, чем после использования только одного.