fisrule

Описание

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

Создание

Чтобы создать нечеткие объекты правила, используйте 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 ключевое слово, и отдельный эти условия, с использованием запятых. 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)"

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

Числовое описание правила в виде одного из следующего:

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

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

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

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

  • Следующие столбцы N задают выходные индексы функции принадлежности и соответствуют Consequent свойство правила. Указать на NOT условие для систем Mamdani, задайте отрицательную величину. 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 функция.

Управляйте весом в виде положительного числового скаляра в области значений [01 ].

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

Управляйте предшествующей связью в виде одного из следующего:

  • 1 — Оцените антецеденты правила с помощью операции И.

  • 2 — Оцените антецеденты правила с помощью операции ИЛИ.

Если вы обновляете связь правила с помощью записи через точку, предшествующих операторов в 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 and 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