В этом примере показано, как настроить нечеткую систему вывода (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 свободны для настройки, и их области значений установлены в [-Inf
Inf
].
Можно задать приспособляемость всех параметров в 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);
Задайте обучающие данные ввода и вывода. В данном примере сгенерируйте обучающие данные с помощью следующей функции.
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.7104
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.4074
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 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 и управлять параметрами одновременно. Во-первых, получите все установки параметров для 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.2605 1 5 1160 0.1604 0.2546 0 Optimization terminated: maximum number of generations exceeded.
Для большой нечеткой системы, если вы настраиваете все параметры FIS в том же настраивающем процессе, получая ожидаемые результаты, может взять несколько итераций. Чтобы улучшить настраивающееся время, вы можете настройки параметров с помощью выполняющего двух шагов.
Настройте или изучите параметры правила только.
Настройте и MF и параметры правила.
Изучение и настройка правил являются менее в вычислительном отношении дорогими что, настраивая параметры 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.
Можно увеличить число итераций, чтобы далее оптимизировать стоимость.
tunefis
| getTunableSettings
| genfis