fistree

Сеть связанных нечетких систем вывода

Описание

Используйте fistree объект представлять дерево взаимосвязанных нечетких систем вывода.

Создание

Описание

пример

fisTree = fistree(fis,connections) создает сеть взаимосвязанных нечетких системных объектов вывода, устанавливая его FIS и Connections свойства.

fisTree = fistree(___,'DisableStructuralChecks',disableChecks) устанавливает DisableStructuralChecks свойство.

Свойства

развернуть все

Это свойство доступно только для чтения.

Нечеткие системы вывода, заданные как массив объекты FIS. Можно задать любую комбинацию mamfis, sugfis, mamfistype2, и sugfistype2 объекты. Каждая нечеткая система вывода в FIS массив должен иметь по крайней мере один вход и один выход для fistree конструкция. Оценивать fistree, каждая нечеткая система вывода должна иметь по крайней мере одно правило.

Связи между нечеткими системами вывода, заданными как двумерный массив строк. Каждая строка представляет связь между двумя объектами FIS. Задайте связи можно следующим образом:

  1. Связи выхода к входу, ["fromFISName/fromFISOutputName" "toFISName/toFISInputName"]. В этом случае, выход "fromFISName" используется в качестве входа "toFISName". "fromFISName" и "toFISName" должно отличаться.

  2. Связи от входа к входу, ["fromFISName/fromFISInputName" "toFISName/toFISInputName"]. В этом случае, входные параметры "fromFISName" и "toFISName" используйте те же входные значения в оценке. "fromFISName" и "toFISName" может быть то же самое или отличающийся.

Следующая схема описывает различные типы подключения.

Связь ["fis1/x" "fis2/c"] задан между выходом "x" "fis1" и введен "c" "fis2". Связь ["fis1/a" "fis1/b"] задан между входными параметрами "a" и "b" "fis1". В этой схеме, fistree входные параметры являются "fis1/a" и "fis2/d", и выход является "fis2/y".

Связи должны удовлетворить следующим условиям:

  1. fistree объект должен иметь по крайней мере один вход FIS без любой входящей связи и одного FIS выход без любой исходящей связи.

  2. Вход FIS не может иметь больше чем одной входящей связи.

  3. FIS выход может иметь больше чем одну исходящую связь.

  4. Ввод и вывод того же FIS не может быть соединен. Другими словами, вы не можете создать циклы между связанными объектами FIS.

  5. Симметричные связи не могут быть заданы между двумя входными параметрами, ["fis1/a" "fis1/b";"fis1/b" "fis1/a"] не позволен. Любой ["fis1/a" "fis1/b"] или ["fis1/b" "fis1/a"] может быть задан.

  6. Самовходные циклы не позволены, ["fis1/a" "fis1/a"] не может быть задан.

Входные параметры к дереву FIS, заданному как массив строк. Inputs автоматически определяются с помощью заданных связей fistree объект. Входные параметры FIS без входящих связей включены в Inputs. Обновите это свойство путем обновления связей fistree объект.

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

Отметьте для отключения структурных проверок, входных параметров и выходных параметров, заданных как любой false или true. Установите DisableStructuralChecks к true отключить автоматические обновления связей, входных параметров и выходных параметров, когда FIS обновляется после конструкции fistree объект. Отключение структурных проверок может произвести неожиданный отказ в evalfis функция.

Функции объекта

evalfisОцените нечеткую систему вывода
getTunableSettingsПолучите настраиваемые настройки из нечеткой системы вывода
getTunableValuesПолучите значения настраиваемых параметров от нечеткой системы вывода
setTunableValuesЗадайте значения настраиваемого параметра нечеткой системы вывода

Примеры

свернуть все

Создайте Mamdani нечеткая система вывода и Sugeno нечеткая система вывода.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','fis2','NumInputs',2,'NumOutputs',1);

Задайте желаемые связи между двумя нечеткими системами вывода.

con1 = ["fis1/output1" "fis2/input1"];
con2 = ["fis1/input1" "fis1/input2"];

Создайте дерево нечетких систем вывода.

tree = fistree([fis1 fis2],[con1; con2])
tree = 
  fistree with properties:

                        FIS: [1x2 FuzzyInferenceSystem]
                Connections: [2x2 string]
                     Inputs: [2x1 string]
                    Outputs: "fis2/output1"
    DisableStructuralChecks: 0

	See 'getTunableSettings' method for parameter optimization.

Создайте дерево FIS.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);

fisT = fistree([fis1 fis2],[]);

Отобразите древовидную настройку FIS.

plotfis(fisT)
FIS Names:
	fis1
	fis2

Connections:
	[]

Inputs:
	fis1/input1
	fis1/input2
	fis2/input1
	fis2/input2

Outputs:
	fis1/output1
	fis2/output1

Добавьте FIS

Добавьте fis3 к fisT.

fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fisT.FIS(end+1) = fis3;

Добавьте связи между fis1, fis2, и fis3.

fisT.Connections = ["fis1/output1" "fis3/input1";"fis2/output1" "fis3/input2"];

Отобразите обновленную древовидную настройку FIS.

plotfis(fisT)
FIS Names:
	fis1
	fis2
	fis3

Connections:
	From        	To
	------------	-----------
	fis1/output1	fis3/input1
	fis2/output1	fis3/input2

Inputs:
	fis1/input1
	fis1/input2
	fis2/input1
	fis2/input2

Outputs:
	fis3/output1

Удалите FIS

Удалите fis1 от fisT.

fisT.FIS(1) = [];

Отобразите обновленную древовидную настройку FIS.

plotfis(fisT)
FIS Names:
	fis2
	fis3

Connections:
	From        	To
	------------	-----------
	fis2/output1	fis3/input2

Inputs:
	fis2/input1
	fis2/input2
	fis3/input1

Outputs:
	fis3/output1

Создайте fis1, fis2, и fis3, каждый с двумя входными параметрами и одним входом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте связь между входом 2 из fis1 и вход 1 из fis2.

con3 = ["fis1/input2" "fis2/input1"];

Создайте дерево FIS.

fuzzTree = fistree([fis1 fis2 fis3],[con1;con2;con3]);

Отобразите входные параметры дерева FIS.

fuzzTree.Inputs
ans = 3x1 string array
    "fis1/input1"
    "fis1/input2"
    "fis2/input2"

Оцените нечеткое дерево. Задайте значения для входа 1 из fis1, введите 2 из fis1, и вход 2 из fis2. Значение для входа 2 из fis1 также отправляется, чтобы ввести 1 из fis2.

output = evalfis(fuzzTree,[0.8 0.25 0.7]);

В этом примере показано, как добавить или удалить древовидные выходные параметры FIS.

Добавьте Выходные параметры

Создайте fis1, fis2, и fis3, каждый с двумя входными параметрами и одним входом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте дерево FIS.

fuzzTree = fistree([fis1 fis2 fis3],[con1;con2]);

Отобразите выводы дерева FIS. По умолчанию, единственный открытый FIS выход (от fis3) выход дерева FIS.

fuzzTree.Outputs
ans = 
"fis3/output1"

Добавьте выход fis2 выходные параметры к древовидному списку выходов.

fuzzTree.Outputs(end+1) = "fis2/output1";

Отобразите обновленный список выходов дерева FIS.

fuzzTree.Outputs
ans = 2x1 string array
    "fis3/output1"
    "fis2/output1"

Оцените дерево FIS. Результат содержит выходные параметры от fis3 и fis2.

evalfis(fuzzTree,[0.5 0.2 0.8 0.45])
ans = 1×2

    0.1507    0.1579

Удалите Выходные параметры

Удалите первый выход из списка.

fuzzTree.Outputs(1) = [];

Отобразите обновленный список выходов дерева FIS.

fuzzTree.Outputs
ans = 
"fis2/output1"

Оцените дерево FIS снова. Результат теперь содержит выход только fis2.

evalfis(fuzzTree,[0.5 0.2 0.8 0.45])
ans = 0.1579

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

Создайте нечеткие системы fis1, fis2, и fis3, каждый с двумя входными параметрами и одним входом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "color";
fis1.Inputs(2).Name = "doors";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(2).Name = "power";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis3.Inputs(2).Name = "autopilot";
fis3.Outputs(1).Name = "predition";

Создайте связь между выходом 1 из fis1 и вход 1 из fis2.

con1 = ["fis1/output1" "fis2/input1"];

Создайте связь между выходом 1 из fis2 и вход 1 из fis3.

con2 = ["fis2/output1" "fis3/input1"];

Создайте дерево FIS.

incTree = fistree([fis1 fis2 fis3],[con1;con2]);

Отобразите входные параметры дерева FIS.

incTree.Inputs
ans = 4x1 string array
    "fis1/color"
    "fis1/doors"
    "fis2/power"
    "fis3/autopilot"

Отобразите выводы дерева FIS.

incTree.Outputs
ans = 
"fis3/predition"

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

Создайте нечеткие системы fis1, fis2, fis3, и fis4, каждый с двумя входными параметрами и одним входом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "dist_obs";
fis1.Inputs(2).Name = "angle_obs";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(1).Name = "dist_tar";
fis2.Inputs(2).Name = "angle_tar";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis4 = mamfis('Name','fis4','NumInputs',2,'NumOutputs',1);
fis4.Inputs(2).Name = "preheading_robot";
fis4.Outputs(1).Name = "heading_robot";

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте связь между выходом 1 из fis3 и вход 1 из fis4.

con3 = ["fis3/output1" "fis4/input1"];

Создайте дерево FIS.

casTree = fistree([fis1 fis2 fis3 fis4],[con1;con2;con3]);

Отобразите входные параметры дерева FIS.

casTree.Inputs
ans = 5x1 string array
    "fis1/dist_obs"
    "fis1/angle_obs"
    "fis2/dist_tar"
    "fis2/angle_tar"
    "fis4/preheading_robot"

Отобразите выводы дерева FIS.

casTree.Outputs
ans = 
"fis4/heading_robot"

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

Создайте нечеткие системы fis1, fis2, и fis3, каждый с двумя входными параметрами и одним входом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "dist_obs";
fis1.Inputs(2).Name = "angle_obs";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(1).Name = "dist_tar";
fis2.Inputs(2).Name = "angle_tar";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis3.Outputs(1).Name = "heading_robot";

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте дерево FIS.

aggTree = fistree([fis1 fis2 fis3],[con1;con2]);

Отобразите входные параметры дерева FIS.

aggTree.Inputs
ans = 4x1 string array
    "fis1/dist_obs"
    "fis1/angle_obs"
    "fis2/dist_tar"
    "fis2/angle_tar"

Отобразите выводы дерева FIS.

aggTree.Outputs
ans = 
"fis3/heading_robot"

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

Создайте нечеткие системы fis1, fis2, и fis3, каждый с двумя входными параметрами и одним входом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);

Создайте дерево FIS, таким образом, что все объекты FIS параллельно; то есть, нет никаких соединений и всего FIS, выходными параметрами являются древовидные выходные параметры FIS.

parTree = fistree([fis1 fis2],[]);

Отобразите входные параметры дерева FIS.

parTree.Inputs
ans = 4x1 string array
    "fis1/input1"
    "fis1/input2"
    "fis2/input1"
    "fis2/input2"

Отобразите выводы дерева FIS.

parTree.Outputs
ans = 2x1 string array
    "fis1/output1"
    "fis2/output1"

Оцените дерево FIS.

output = evalfis(parTree,[0.1 0.3 0.8 0.4]);

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

finalOutput = sum(output);

Введенный в R2019a