Настройте нечеткие правила и параметры функции принадлежности

В этом примере показано, как настроить нечеткую систему вывода (FIS). Используя tunefis функция, вы можете:

  • Настройте параметры функции принадлежности для переменных ввода и вывода.

  • Изучите нечеткие правила.

  • Настройте предшествующие и последовательные параметры нечетких правил.

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

Настройте параметры функции принадлежности

И для типа 1 и для типа 2 ФИСС, можно задать настройки настраиваемого параметра для MFS ввода и вывода и настроить значения выбранных параметров. Можно настроить параметры для любой комбинации MFS ввода и вывода. Этот пример показывает рабочий процесс в качестве примера с помощью типа 1 FIS. Для примера, который настраивает тип 2 FIS, смотрите, Предсказывают Хаотические Временные ряды Используя Тип 2 FIS.

Создайте FIS.

fis = mamfis;
fis = addInput(fis,[0 10],'NumMFs',3);
fis = addOutput(fis,[0 1],'NumMFs',3);
fis = addRule(fis,[1 1 1 1;1 1 1 1;1 1 1 1]);

Извлеките установки параметров ввода и вывода из FIS.

[in,out] = getTunableSettings(fis)
in = 
  VariableSettings with properties:

                   Type: "input"
           VariableName: "input1"
    MembershipFunctions: [1×3 fuzzy.tuning.MembershipFunctionSettings]
                FISName: "fis"

out = 
  VariableSettings with properties:

                   Type: "output"
           VariableName: "output1"
    MembershipFunctions: [1×3 fuzzy.tuning.MembershipFunctionSettings]
                FISName: "fis"

Установки параметров представлены VariableSettings объекты, которые включают имя FIS, тип переменной, имя переменной и установки параметров MF. Исследуйте установки параметров MF 1 входа 1.

in(1).MembershipFunctions(1).Parameters
ans = 
  NumericParameters with properties:

    Minimum: [-Inf -Inf -Inf]
    Maximum: [Inf Inf Inf]
       Free: [1 1 1]

Для каждого значения параметров MF ввода или вывода можно задать его доступность для настройки и его минимальные и максимальные значения. По умолчанию все параметры MF свободны для настройки, и их области значений установлены в [-InfInf].

Можно задать приспособляемость всех параметров в MF с помощью setTunable функция. Например, сделайте MF 1 входа 1 ненастраиваемым.

in(1).MembershipFunctions(1) = setTunable(in(1).MembershipFunctions(1),false);

Можно также задать приспособляемость отдельных параметров MF. Сделайте первый параметр MF 2 входа 1 ненастраиваемым.

in(1).MembershipFunctions(2).Parameters.Free(1) = false;

Для каждого параметра можно указать диапазон возможных значений. Например, установите минимальные значения для вторых и третьих параметров MF 3 входа от 1 до 0.

in(1).MembershipFunctions(3).Parameters.Minimum(2:3) = 0;

Точно так же установите максимальные значения для вторых и третьих параметров MF 3 входа 1 к 15.

in(1).MembershipFunctions(3).Parameters.Maximum(2:3) = 15;

Настраивающий процесс устанавливает минимальные и максимальные значения области значений по умолчанию настраиваемых параметров MF к их соответствующим областям значений ввода или вывода.

Наконец, сделайте параметры MF всех выходных функций принадлежности ненастраиваемыми.

out = setTunable(out,false);

Задайте обучающие данные ввода и вывода. В данном примере сгенерируйте обучающие данные с помощью следующей функции.

y=|sin(2x)ex/5|

x = (0:0.1:10)';
y = abs(sin(2*x)./exp(x/5));

Задайте опции для tunefis. В данном примере используйте настраивающий метод генетического алгоритма. Используйте максимум пяти поколений для оптимизации.

options = tunefisOptions("Method","ga");
options.MethodOptions.MaxGenerations = 5;

Если у вас есть программное обеспечение Parallel Computing Toolbox™, можно улучшить скорость настраивающего процесса установкой options.UseParallel к true. Если у вас нет программного обеспечения Parallel Computing Toolbox, установите options.UseParallel к false, который является значением по умолчанию.

По умолчанию, tunefis использует среднеквадратическую ошибку (RMSE) для расчета стоимости. Можно изменить функцию стоимости в norm1 или norm2 установкой options.DistanceMetric.

options.DistanceMetric = "norm1";

Настройте fis с помощью установок параметров, обучающих данных, и настраивая опции.

rng('default') % for reproducibility
[fisout,optimout] = tunefis(fis,[in;out],x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              100           32.84           32.84        0
    2              147           32.84           32.84        1
    3              194           32.84           32.84        2
    4              241           32.84           32.84        3
    5              288           32.84           32.84        4
Optimization terminated: maximum number of generations exceeded.

fisout включает обновленные значения параметров. optimout обеспечивает дополнительные выходные параметры метода оптимизации и любых сообщений об ошибке, которые возвращены во время процесса обновления входа нечеткая система с помощью оптимизированных значений параметров.

optimout
optimout = struct with fields:
    tuningOutputs: [1×1 struct]
    totalFcnCount: 288
     totalRuntime: 2.7322
     errorMessage: []

optimout.tuningOutputs
ans = struct with fields:
             x: [5 9.1667 5.8333 10 14.1667]
          fval: 32.8363
      exitflag: 0
        output: [1×1 struct]
    population: [50×5 double]
        scores: [50×1 double]

Можно опционально настроить fis использование любого установки параметров ввода или вывода только. В этом примере, поскольку вы устанавливаете настройки выходного параметра на ненастраиваемый, настраивая FIS с только входными установками параметров, приводит к тем же результатам.

rng('default')
[fisout,optimout] = tunefis(fis,in,x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              100           32.84           32.84        0
    2              147           32.84           32.84        1
    3              194           32.84           32.84        2
    4              241           32.84           32.84        3
    5              288           32.84           32.84        4
Optimization terminated: maximum number of generations exceeded.
optimout
optimout = struct with fields:
    tuningOutputs: [1×1 struct]
    totalFcnCount: 288
     totalRuntime: 2.4521
     errorMessage: []

optimout.tuningOutputs
ans = struct with fields:
             x: [5 9.1667 5.8333 10 14.1667]
          fval: 32.8363
      exitflag: 0
        output: [1×1 struct]
    population: [50×5 double]
        scores: [50×1 double]

Настройте нечеткие правила

В дополнение к настройке параметров функции принадлежности можно настроить предшествующие и последовательные параметры правил в нечеткой системе.

Получите установки параметров правила из нечеткой системы с помощью getTunableSettings.

[~,~,rule] = getTunableSettings(fis)
rule=3×1 object
  3×1 RuleSettings array with properties:

    Index
    Antecedent
    Consequent
    FISName

Каждая установка параметра правила включает имя FIS, индекс правила в FIS и установки параметров для антецедента правила и следствия (пункты правила).

Для пункта правила можно установить следующие настройки параметров.

  • AllowNot — Позвольте использование НЕ логика, то есть, отрицательные индексы MF. По умолчанию правила не позволяют НЕ логику.

  • Free — Сделайте индексы MF ввода/вывода доступными для настройки. По умолчанию параметры пункта доступны для настройки.

  • AllowEmpty — Позвольте отсутствие переменных ввода/вывода, то есть, обнулите индексы MF. По умолчанию отсутствие переменной позволено.

rule(1).Antecedent(1)
ans = 
  ClauseParameters with properties:

      AllowNot: 0
    AllowEmpty: 1
          Free: 1

Позвольте НЕ логику в антецеденте правила 1.

rule(1).Antecedent.AllowNot = true;

Сделайте следствие правила 1 не доступным для настройки.

rule(1).Consequent.Free = 0;

Не позволяйте отсутствие переменной в следствии правила 2.

rule(2).Consequent.AllowEmpty = false;

Установите правило 3 как ненастраиваемое.

rule(3) = setTunable(rule(3),false);

Установите options.DistanceMetric к norm2.

options.DistanceMetric = "norm2";

Настройте fis использование установок параметров правила.

rng('default')  % for reproducibility
fisout = tunefis(fis,rule,x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              100           1.648           2.575        0
    2              147           1.648           2.448        1
    3              194           1.648           2.212        2
    4              241           1.648           2.052        3
    5              288           1.648           1.874        4
Optimization terminated: maximum number of generations exceeded.

Поскольку вы задали правило 3 как ненастраиваемое, можно исключить правило 3, когда вы настраиваете fis. Выполнение так приводит к тому же настраивающему результату.

rng('default')  % for reproducibility
fisout = tunefis(fis,rule(1:2),x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              100           1.648           2.575        0
    2              147           1.648           2.448        1
    3              194           1.648           2.212        2
    4              241           1.648           2.052        3
    5              288           1.648           1.874        4
Optimization terminated: maximum number of generations exceeded.

Изучите нечеткие правила

Можно сконфигурировать tunefis изучить правила нечеткой системы. Для этого установите OptimizationType опция tunefisOptions к "learning".

fisin = fis;
fisin.Rules = [];
options.OptimizationType = "learning";

Определите максимальный номер правил в настроенном FIS к 3.

options.NumMaxRules = 3;

Размер настроенного правила основная сила быть меньше NumMaxRules, потому что tunefis удаляет дублирующиеся правила из настроенного FIS. Если вы не задаете NumMaxRules, затем tunefis добавляет максимальное количество правил, определенных возможными комбинациями входа MFs. Комбинации входа MF по умолчанию включают нулевые индексы MF, которые позволяют отсутствие переменных. Комбинации по умолчанию исключают отрицательные индексы MF, так, чтобы НЕ логика не была позволена.

Установите options.DistanceMetric к "rmse" и настройте FIS.

options.DistanceMetric = "rmse";
rng('default')  % for reproducibility
fisout = tunefis(fisin,[],x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400           0.165          0.2956        0
    2              590           0.165          0.2805        1
    3              780           0.165          0.2578        2
    4              970           0.165          0.2393        3
    5             1160           0.165          0.2322        4
Optimization terminated: maximum number of generations exceeded.

Во время настраивающего процесса FIS автоматически изучает правила после оптимизации стоимости с обучающими данными. Исследуйте настроенные правила.

fisout.Rules
ans = 
  1×3 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                   Description           
         ________________________________

    1    "input1==mf3 => output1=mf1 (1)"
    2    "input1==mf1 => output1=mf2 (1)"
    3    "input1==mf2 => output1=mf1 (1)"

Можно удалить некоторые существующие правила и изучить дополнительные правила.

fisout.Rules(2:end) = [];
rng('default')  % for reproducibility
fisout = tunefis(fisin,[],x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400           0.165          0.2956        0
    2              590           0.165          0.2805        1
    3              780           0.165          0.2578        2
    4              970           0.165          0.2393        3
    5             1160           0.165          0.2322        4
Optimization terminated: maximum number of generations exceeded.
fisout.Rules
ans = 
  1×3 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                   Description           
         ________________________________

    1    "input1==mf3 => output1=mf1 (1)"
    2    "input1==mf1 => output1=mf2 (1)"
    3    "input1==mf2 => output1=mf1 (1)"

Можно также настроить антецеденты и следствия существующих правил и изучить новые правила. Для этого получите настраиваемые установки параметров правила и передайте их tunefis функция.

fisout.Rules(2:end) = [];
fisout.Rules(1).Antecedent = 1;
fisout.Rules(1).Consequent = 1;
[~,~,rule] = getTunableSettings(fisout);
rng('default')
fisout = tunefis(fisin,rule,x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400           0.165          0.3063        0
    2              590           0.165          0.2845        1
    3              780           0.165          0.2549        2
    4              970           0.165          0.2344        3
    5             1160           0.165          0.2153        4
Optimization terminated: maximum number of generations exceeded.
fisout.Rules
ans = 
  1×3 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                   Description           
         ________________________________

    1    "input1==mf1 => output1=mf2 (1)"
    2    "input1==mf2 => output1=mf1 (1)"
    3    "input1==mf3 => output1=mf1 (1)"

Настройте параметры правила и MF

Можно настроить весь MF и управлять параметрами одновременно. Во-первых, получите все установки параметров для FIS.

[in,out,rule] = getTunableSettings(fis);

Сконфигурируйте настраивающиеся опции.

options = tunefisOptions('Method','ga');
options.MethodOptions.MaxGenerations = 5;

Настройте MF и параметры правила FIS.

rng('default')  % for reproducibility
fisout = tunefis(fis,[in;out;rule],x,y,options);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400           0.165           0.296        0
    2              590          0.1638          0.2821        0
    3              780          0.1625          0.2697        0
    4              970          0.1625          0.2616        1
    5             1160          0.1604          0.2512        0
Optimization terminated: maximum number of generations exceeded.

Для большой нечеткой системы, если вы настраиваете все параметры FIS в том же настраивающем процессе, получая ожидаемые результаты, может взять несколько итераций. Чтобы улучшить настраивающееся время, вы можете настройки параметров с помощью выполняющего двух шагов.

  1. Настройте или изучите параметры правила только.

  2. Настройте и MF и параметры правила.

Изучение и настройка правил являются менее в вычислительном отношении дорогими что нелуг параметры MF, из-за небольшого количества параметров правила. Поэтому первый шаг быстро сходится к нечеткой основе правила во время обучения. На втором шаге с помощью основы правила от первого шага, когда начальное условие улучшает сходимость настраивающего процесса параметра.

Сгенерируйте FIS из данных и мелодии

Когда вы вручную создаете FIS для настройки, необходимо или вручную заложить начальную основу правила или изучить первоначальные правила. В качестве альтернативы можно сгенерировать FIS использование genfis функция, которая закладывает начальную основу правила на основе ваших обучающих данных. Можно затем оптимизировать FIS использование tunefis. В этом подходе настраивающий процесс может использовать локальный метод оптимизации, потому что основа правила выведена из обучающих данных.

Этот пример использует те же обучающие данные в качестве предыдущих примеров.

Создайте опции для genfis это задает пять MFS, Гауссов MF для входа и постоянный MF для выхода.

goptions = genfisOptions('GridPartition','NumMembershipFunctions',5, ...
    'InputMembershipFunctionType','gaussmf', ...
    'OutputMembershipFunctionType','constant');

Сгенерируйте начальный FIS и получите его установки параметров.

fisin = genfis(x,y,goptions);
[in,out,rule] = getTunableSettings(fisin);

Используйте метод поиска шаблона для оптимизации, определяя максимальный номер итераций к 25, и настройте FIS.

toptions = tunefisOptions('Method','patternsearch');
toptions.MethodOptions.MaxIterations = 25;
rng('default')
fisout = tunefis(fisin,[in;out],x,y,toptions);
Iter     Func-count       f(x)      MeshSize     Method
    0           1       0.346649             1      
    1          19       0.346649           0.5     Refine Mesh
    2          37       0.273812             1     Successful Poll
    3          38       0.236413             2     Successful Poll
    4          39       0.190794             4     Successful Poll
    5          40       0.182142             8     Successful Poll
    6          47       0.182142             4     Refine Mesh
    7          49       0.162927             8     Successful Poll
    8          56       0.162927             4     Refine Mesh
    9          67       0.162927             2     Refine Mesh
   10          69       0.159539             4     Successful Poll
   11          80       0.159539             2     Refine Mesh
   12          92       0.159539             1     Refine Mesh
   13          94       0.159421             2     Successful Poll
   14         106       0.159373             4     Successful Poll
   15         117       0.159373             2     Refine Mesh
   16         125       0.159185             4     Successful Poll
   17         136       0.159185             2     Refine Mesh
   18         151       0.159185             1     Refine Mesh
   19         152        0.15914             2     Successful Poll
   20         167        0.15914             1     Refine Mesh
   21         170       0.158914             2     Successful Poll
   22         185       0.158914             1     Refine Mesh
   23         187       0.158839             2     Successful Poll
   24         202       0.158839             1     Refine Mesh
   25         206       0.158366             2     Successful Poll
   26         215       0.158121             4     Successful Poll
Maximum number of iterations exceeded: increase options.MaxIterations.

Можно увеличить число итераций, чтобы далее оптимизировать стоимость.

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

| |

Похожие темы