exponenta event banner

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

При настройке нечеткой системы вывода (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 1 входа 1 ненастраиваемым.

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

Точно так же сделайте первый параметр 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 установлены к соответствующим областям значений ввода/вывода в настраивающем процессе.

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

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: 1.7459
     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: 1.5220
     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 и установки параметров для антецедента правила и следствия (пункты правила).

Установки параметров для пункта правила включают три опции:

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

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

  • Позволяет ли пункт отсутствие переменных ввода/вывода, другими словами, если это позволяет нулевые индексы 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 к три.

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 и параметры правила.

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

Сгенерируйте 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.

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

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

| |

Похожие темы