fisrule

Описание

Использовать fisrule объекты для представления нечетких правил if-then, которые связаны входом состоянием функции принадлежности к соответствующим функциям принадлежности к выходу. Если фрагмент нечеткого правила является предшествующим, что задает функцию принадлежности для каждого переменного входа. Последующим является фрагмент нечеткого правила, которая задает функцию принадлежности для каждой выходной переменной. Для получения дополнительной информации о функциях принадлежности и нечетких правилах, смотрите Основы нечеткой логики.

Создание

Чтобы создать объекты нечетких правил, используйте fisrule функция. Используя эту функцию, можно создать одно нечеткое правило или вектор нескольких нечетких правил.

Описание

пример

rule = fisrule создает одно нечеткое правило с описанием по умолчанию "input1==mf1 => output1=mf1".

пример

rule = fisrule(ruleText) создает одно или несколько нечетких правил с помощью текстовых описаний в ruleText.

пример

rule = fisrule(ruleValues,numInputs) создает одно или несколько нечетких правил с помощью числовых значений правил в ruleValues. Задайте количество входных переменных правила, используя numInputs.

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

расширить все

Описание текстового правила, заданное как одно из следующих:

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

    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 или IS NOT ключевое слово. Соедините эти условия с помощью AND или OR ключевые слова. Если правило не использует заданную входную переменную, опустите его из предшествующего.

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

    Задайте вес, используя положительное числовое значение.

    Для примера:

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

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

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

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

Когда вы задаете правило используя текстовое описание, fisrule устанавливает Description, Weight, и Connection свойства правила на основе описания.

Описание числового правила, заданное как одно из следующих:

  • Вектор-строка, для задания одного нечеткого правила

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

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

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

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

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

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

Когда вы задаете правило используя ruleVlaues, fisrule устанавливает Description свойство с использованием переменной по умолчанию и имен функции принадлежности.

Количество входа переменных для правила, заданное в виде положительного целого числа. Если вы задаете описание правила используя ruleValuesнеобходимо также указать количество переменных входов. fisrule анализирует предшествующие значения правил в индексы функции принадлежности для переменных входов и выхода с помощью numInputs.

Свойства

расширить все

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

"IF A IS a AND B IS NOT b THEN X IS x, Y IS NOT y (1)"

Хранимое правило:

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

Для получения дополнительной информации о подробных и символических форматах правил смотрите ruleText входной параметр.

Когда вы задаете правило используя ruleVlaues, fisrule устанавливает Description свойство с использованием переменной по умолчанию и имен функции принадлежности. Прежде чем использовать правило в нечеткой системе, вы должны обновить описание, чтобы использовать имена переменной и функции принадлежности от этой нечеткой системы, используя update функция.

Предшествующее правило, заданное как числовой вектор длины M, где M - количество входных переменных. Каждый элемент Antecedent содержит одно из следующих значений:

  • Положительное целое число - индекс входной функции принадлежности, которая представляет IS состояние

  • Отрицательное целое число - отрицательное значение функции входа принадлежности, которая представляет IS NOT состояние

  • 0 - Не имеет значения условие, которое означает, что правило не использует соответствующую входную переменную

Это значение устанавливается, когда вы создаете нечеткое правило с помощью ruleValues. Если вы создаете нечеткое правило с помощью ruleText, перед использованием правила в нечеткой системе необходимо заполнить Antecedent используя свойство update функция.

Если вы обновляете индексы в предшествующем правиле с помощью записи через точку, Description свойство не обновляется, чтобы отразить изменения. Чтобы обновить описание правила, используйте update функция.

Последующее правило, заданное как числовой вектор длины N, где N - количество выходных переменных. Каждый элемент Consequent содержит одно из следующих значений:

  • Положительное целое число - индекс выходной функции принадлежности, которая представляет IS состояние

  • Отрицательное целое число - отрицательное значение выходной функции принадлежности, которая представляет IS NOT состояние

  • 0 - Не имеет значения условие, которое означает, что правило не использует соответствующую выходную переменную

Это значение устанавливается, когда вы создаете нечеткое правило с помощью ruleValues. Если вы создаете нечеткое правило с помощью ruleText, перед использованием правила в нечеткой системе необходимо заполнить Consequent используя свойство update функция.

Если вы обновляете индексы в правиле, последующем с помощью записи через точку, Description свойство не обновляется, чтобы отразить изменения. Чтобы обновить описание правила, используйте update функция.

Вес правила, заданный как положительный числовой скаляр в области значений [0 1].

Если вы обновляете вес правила с помощью записи через точку, значение веса в Description также обновляется текст свойства.

Переднее соединение правила, заданное как одно из следующих:

  • 1 - Оценить предшествующие правила с помощью оператора AND.

  • 2 - Рассчитать предшествующие правила с помощью оператора OR.

Если вы обновляете соединение правил с помощью записи через точку, то предшествующие операторы в Description также обновляется текст свойств.

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

updateОбновите нечеткое правило с помощью системы нечеткого вывода

Примеры

свернуть все

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

rule = fisrule
rule = 
  fisrule with properties:

    Description: "input1==mf1 => output1=mf1 (1)"
     Antecedent: 1
     Consequent: 1
         Weight: 1
     Connection: 1

Чтобы изменить свойства правила, используйте запись через точку. Для примера задайте вес правила 0.5.

rule.Weight = 0.5;

Создайте нечеткое правило с помощью подробного текстового описания.

rule = fisrule("if service is poor and food is delicious then tip is average (1)");

Также можно задать то же правило с помощью символьного текстового описания.

rule = fisrule("service==poor & food==delicious => tip=average")
rule = 
  fisrule with properties:

    Description: "service==poor & food==delicious => tip=average (1)"
     Antecedent: []
     Consequent: []
         Weight: 1
     Connection: 1

Перед использованием rule при помощи нечеткой системы обновляйте правило Antecedent и Consequent свойства с использованием update функция.

fis = readfis("tipper");
rule = update(rule,fis)
rule = 
  fisrule with properties:

    Description: "service==poor & food==delicious => tip=average (1)"
     Antecedent: [1 2]
     Consequent: 2
         Weight: 1
     Connection: 1

Создайте нечеткое правило с помощью числового описания. Укажите, что правило имеет две входные переменные.

rule = fisrule([1 2 2 0.5 1],2)
rule = 
  fisrule with properties:

    Description: "input1==mf1 & input2==mf2 => output1=mf2 (0.5)"
     Antecedent: [1 2]
     Consequent: 2
         Weight: 0.5000
     Connection: 1

Перед использованием rule при помощи нечеткой системы обновляйте правило Description свойство с использованием update функция.

fis = readfis("tipper");
rule = update(rule,fis)
rule = 
  fisrule with properties:

    Description: "service==poor & food==delicious => tip=average (0.5)"
     Antecedent: [1 2]
     Consequent: 2
         Weight: 0.5000
     Connection: 1

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

rules1 = ["if service is poor or food is rancid then tip is cheap (0.5)"...
          "if service is excellent and food is not rancid then tip is generous (0.75)"];

Создайте массив нечетких правил, используя эти описания.

fuzzyRules1 = fisrule(rules1)
fuzzyRules1 = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                                Description                        
         __________________________________________________________

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

Кроме того, можно задать несколько правил, используя массив числовых описаний правил.

rules2 = [1 1 1 0.5 2;
          2 -1 3 0.75 1];
fuzzyRules2 = fisrule(rules2,2)
fuzzyRules2 = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                            Description                   
         _________________________________________________

    1    "input1==mf1 | input2==mf1 => output1=mf1 (0.5)" 
    2    "input1==mf2 & input2~=mf1 => output1=mf3 (0.75)"

Введенный в R2018b