Настройте нечеткие деревья

В этом примере показано, как настроить параметры дерева FIS с помощью двухступенчатого процесса. Для получения дополнительной информации о подобном двухступенчатом процессе, смотрите Настраивающиеся Нечеткие Системы Вывода.

  • Изучите и настройте правила ФИССА в дереве.

  • Изучите параметры MF ФИССА в дереве.

Создайте дерево FIS к модели sin(x)+cos(x)exp(x), как показано в следующем рисунке. Для получения дополнительной информации о создании деревьев 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. Установите выходную область значений согласно возможным значениям sin(x)+cos(x).

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. Выходная область значений установлена согласно возможным значениям sin(x)+cos(x)exp(x).

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.

В целом, стоимость оптимизации меньше после использования трех настраивающихся шагов, чем после использования только одного.

Смотрите также

|

Похожие темы