fistree

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

Описание

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

Создание

Синтаксис

fisTree = fistree(fis,connections)
fisTree = fistree(___,'DisableStructuralChecks',disableChecks)

Описание

пример

fisTree = fistree(fis,connections) создает сеть взаимосвязанного mamfis и объектов sugfis с помощью заданного connections между ними.

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

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

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

Нечеткие системы вывода, заданные как массив mamfis и объектов sugfis. Каждая нечеткая система вывода в массиве 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"] не может быть задан.

Свойства

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

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

Нечеткие системы вывода, заданные как массив mamfis и объектов sugfis. Каждая нечеткая система вывода в массиве fis должна иметь по крайней мере один ввод и вывод для конструкции fistree. Чтобы оценить fistree, каждая нечеткая система вывода должна иметь по крайней мере одно правило.

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

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

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

Входные параметры к дереву 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 ibjects параллельно; то есть, нет никаких соединений и всего 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