addRule

Добавьте правило в нечеткую систему вывода

Синтаксис

fisOut = addRule(fisIn)
fisOut = addRule(fisIn,ruleDescription)

Описание

fisOut = addRule(fisIn) добавляет одно нечеткое правило в нечеткую систему вывода fisIn с описанием по умолчанию "input1==mf1 => output1=mf1" и возвращает получившуюся нечеткую систему в fisOut.

пример

fisOut = addRule(fisIn,ruleDescription) добавляют одно или несколько нечетких правил с помощью описаний правила в ruleDescription.

Примеры

свернуть все

Загрузите нечеткую систему вывода (FIS) и очистите существующие правила.

fis = readfis('tipper');
fis.Rules = [];

Добавьте правило в FIS.

ruleTxt = 'If service is poor then tip is cheap';
fis2 = addRule(fis,ruleTxt);

fis2 эквивалентен fis, за исключением того, что заданное правило добавляется к основе правила.

fis2.Rules
ans = 
  fisrule with properties:

    Description: "service==poor => tip=cheap (1)"
     Antecedent: [1 0]
     Consequent: 1
         Weight: 1
     Connection: 1

Загрузите нечеткую систему вывода (FIS) и очистите существующие правила.

fis = readfis('tipper');
fis.Rules = [];

Задайте следующие правила с помощью символьных выражений:

  • Если service является poor, или food является rancid затем, tip является cheap.

  • Если service является excellent, и food не является rancid затем, tip является generous.

rule1 = "service==poor | food==rancid => tip=cheap";
rule2 = "service==excellent & food~=rancid => tip=generous";
rules = [rule1 rule2];

Добавьте правила в FIS.

fis2 = addRule(fis,rules);

fis2 эквивалентен fis, за исключением того, что заданные правила добавляются к основе правила.

fis2.Rules
ans = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                               Description                      
         _______________________________________________________

    1    "service==poor | food==rancid => tip=cheap (1)"        
    2    "service==excellent & food~=rancid => tip=generous (1)"

Загрузите нечеткую систему вывода (FIS) и очистите существующие правила.

fis = readfis('mam22.fis');
fis.Rules = [];

Задайте следующие правила с помощью индексов функции принадлежности:

  • Если angle является small, и velocity является big, то force является negBig, и force2 является posBig2.

  • Если angle не является small, и velocity является small, то force является posSmall, и force2 является negSmall2.

rule1 = [1 2 1 4 1 1];
rule2 = [-1 1 3 2 1 1];
rules = [rule1; rule2];

Добавьте правила в FIS.

fis2 = addRule(fis,rules);

fis2 эквивалентен fis, за исключением того, что заданные правила добавляются к основе правила.

fis2.Rules
ans = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                                       Description                               
         ________________________________________________________________________

    1    "angle==small & velocity==big => force=negBig, force2=posBig2 (1)"      
    2    "angle~=small & velocity==small => force=posSmall, force2=negSmall2 (1)"

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

свернуть все

Нечеткая система вывода, заданная как объект mamfis или sugfis.

Управляйте описанием, заданное использование или текст или числовое определение правила

Текстовое описание правила

Для текстового описания правила задайте ruleDescription как одно из следующего:

  • Строка или вектор символов, задающий одно правило

    rule = "If service is poor or food is rancid then tip is cheap";
  • Массив строк, где каждый элемент соответствует правилу. Например:

    ruleList = ["If service is poor or food is rancid then tip is cheap";
                "If service is good then tip is average";
                "If service is excellent or food is delicious then tip is generous"];
  • Символьный массив, где каждая строка соответствует правилу. Например:

    rule1 = 'If service is poor or food is rancid then tip is cheap';
    rule2 = 'If service is good then tip is average';
    rule3 = 'If service is excellent or food is delicious then tip is generous';
    ruleList = char(rule1,rule2,rule3);

Для каждого правила используйте один из следующих текстовых форматов правила:

  • Многословный — Лингвистическое выражение в следующем формате, с помощью IF и ключевых слов THEN:

    "IF <antecedent> THEN <consequent> (<weight>)"

    В <antecedent> задайте функцию принадлежности для каждой входной переменной с помощью ключевого слова IS NOT или IS. Соедините эти условия с помощью ключевых слов OR или AND. Если правило не использует данную входную переменную, не используйте его от антецедента.

    В <consequent> задайте условие для каждой выходной переменной с помощью IS или ключевого слова IS NOT, и разделите эти условия, с использованием запятых. Ключевое слово IS NOT не поддержано для Sugeno выходные параметры. Если правило не использует данную выходную переменную, не используйте его от следствия.

    Задайте вес с помощью положительного численного значения.

    Например:

    "IF A IS a AND B IS NOT b THEN X IS x, Y IS NOT y (1)"
  • Символьный — Выражение, которое использует символы в следующей таблице вместо ключевых слов. Нет никакого символа для ключевого слова IF.

    СимволКлючевое слово
    ==IS (в антецеденте правила)
    ~=IS NOT
    &AND
    |OR
    =>THEN
    =IS (в следствии правила)

    Например, следующее символьное правило эквивалентно предыдущему многословному правилу.

    "A==a & B~=b => X=x, Y~=y (1)"

Числовое описание правила

Для числового описания правила задайте ruleDescription как одно из следующего:

  • Вектор - строка, чтобы задать одно нечеткое правило

  • Массив, где каждая строка ruleValues задает одно правило

Для каждой строки числовое описание правила имеет M +N+2 столбцы, где M является количеством входных переменных, и N является количеством выходных переменных. Каждый столбец содержит следующую информацию:

  • Первые столбцы M задают входные индексы функции принадлежности и соответствуют свойству Antecedent правила. Чтобы указать на условие NOT, задайте отрицательную величину. Если правило не использует данный, вводят, устанавливают соответствующий индекс на 0. Для каждого правила по крайней мере один входной индекс функции принадлежности должен быть ненулевым.

  • Следующие столбцы N задают выходные индексы функции принадлежности и соответствуют свойству Consequent правила. Чтобы указать на условие NOT для систем Mamdani, задайте отрицательную величину. условия NOT не поддержаны для Sugeno выходные параметры. Если правило не использует данный, выводят, устанавливают соответствующий индекс на 0. Для каждого правила по крайней мере один выходной индекс функции принадлежности должен быть ненулевым.

  • Столбец M +N+1 задает вес правила и соответствует свойству Weight правила.

  • Последний столбец задает предшествующий нечеткий оператор и соответствует свойству Connection правила.

Выходные аргументы

свернуть все

Нечеткая система вывода, возвращенная как объект mamfis или sugfis. fisOut содержит добавленные правила со всеми другими свойствами, совпадающими с теми из fisIn.

Вопросы совместимости

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

Поведение изменяется в R2018b

Не рекомендуемый запуск в R2018b

Введенный в R2018b