exponenta event banner

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Задание настраиваемых значений параметров системы нечеткого вывода

Примеры

свернуть все

Создайте систему нечеткого вывода Мамдани и систему нечеткого вывода Сугено.

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