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" могут быть одинаковыми или различными.

Следующая схема описывает различные типы соединений, используя два FIS, fis1, и fis2.

Inputs a and b of fis1 are connected together, and the output of fis1 is connected to input c of fis2.

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

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

  1. A 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
    "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
    "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
    "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
    "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
    "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
    "fis1/input1"
    "fis1/input2"
    "fis2/input1"
    "fis2/input2"

Отображение выходов дерева FIS.

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

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

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

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

finalOutput = sum(output);
Введенный в R2019a