Нечеткое правило
Использовать fisrule объекты для представления нечетких правил if-then, которые связывают условия входной функции членства с соответствующими выходными функциями членства. Часть if нечеткого правила является предшествующей, которая задает функцию членства для каждой входной переменной. Тогда часть нечеткого правила является последующим, который определяет функцию членства для каждой выходной переменной. Дополнительные сведения о функциях членства и нечетких правилах см. в разделе Основы нечеткой логики.
Для создания нечетких объектов правил используйте fisrule функция. С помощью этой функции можно создать одно нечеткое правило или вектор из нескольких нечетких правил.
rule = fisrule создает одно нечеткое правило с описанием по умолчанию "input1==mf1 => output1=mf1".
создает одно или несколько нечетких правил с использованием текстовых описаний в rule = fisrule(ruleText)ruleText.
создает одно или несколько нечетких правил, используя числовые значения правил в rule = fisrule(ruleValues,numInputs)ruleValues. Укажите количество входных переменных правила с помощью numInputs.
ruleText - Описание текстового правилаОписание текстового правила, указанное как одно из следующих:
Строковый или символьный вектор, задающий одно правило
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);
Для каждого правила используйте один из следующих форматов текста правила:
Verbose - лингвистическое выражение в следующем формате с использованием 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)"
Symbolic - выражение, использующее символы в следующей таблице вместо ключевых слов. Нет символа для IF ключевое слово.
| Символ | Ключевое слово |
|---|---|
== | IS (в правиле antecedent) |
~= | IS NOT |
& | AND |
| | OR |
=> | THEN |
= | IS (в последующем правиле) |
Например, следующее символическое правило эквивалентно предыдущему подробному правилу.
"A==a & B~=b => X=x, Y~=y (1)"
При указании правила с помощью текстового описания fisrule устанавливает Description, Weight, и Connection свойства правила, основанные на описании.
ruleValues - Описание числового правилаЧисловое описание правила, указанное как одно из следующих:
Вектор строки для указания одного нечеткого правила
Массив, где каждая строка 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 с использованием имен переменных по умолчанию и функций членства.
numInputs - Количество входных переменныхЧисло входных переменных для правила, указанное как положительное целое число. При указании описания правила с помощью ruleValues, необходимо также указать количество входных переменных. fisrule анализирует предшествующие значения правила в индексах членских функций для входных и выходных переменных с помощью numInputs.
Description - Описание текстового правилаОписание текстового правила, указанное как строковый или символьный вектор. Описание правила сохраняется как символическое выражение независимо от способа указания правила. Например, если указать следующее подробное правило с помощью 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 функция.
Antecedent - Правило, предшествующееПравило antecedent, указанное как числовой вектор длины M, где M - количество входных переменных. Каждый элемент Antecedent содержит одно из следующих значений:
Положительное целое число - индекс входной функции членства, представляющий IS состояние
Отрицательное целое число - отрицательное значение входной функции членства, представляющей IS NOT состояние
0 - Условие отсутствия заботы, что означает, что правило не использует соответствующую входную переменную
Это значение устанавливается при создании нечеткого правила с помощью ruleValues. При создании нечеткого правила с помощью ruleText, перед использованием правила в нечеткой системе необходимо заполнить Antecedent с использованием свойства update функция.
При обновлении индексов в предшествующем правиле с помощью точечной нотации Description не обновляется для отражения изменений. Чтобы обновить описание правила, используйте update функция.
Consequent - Последующее правилоПоследующее правило, указанное как числовой вектор длиной N, где N - количество выходных переменных. Каждый элемент Consequent содержит одно из следующих значений:
Положительное целое число - индекс выходной функции членства, представляющий IS состояние
Отрицательное целое число - отрицательное значение выходной функции членства, представляющей IS NOT состояние
0 - Условие отсутствия заботы, что означает, что правило не использует соответствующую выходную переменную
Это значение устанавливается при создании нечеткого правила с помощью ruleValues. При создании нечеткого правила с помощью ruleText, перед использованием правила в нечеткой системе необходимо заполнить Consequent с использованием свойства update функция.
При обновлении индексов в правиле с помощью точечной нотации Description не обновляется для отражения изменений. Чтобы обновить описание правила, используйте update функция.
Weight - Вес правила1 (по умолчанию) | положительный числовой скалярВес правила, указанный как положительный числовой скаляр в диапазоне [0
1].
При обновлении веса правила с помощью точечной нотации значение веса в Description текст свойства также обновляется.
Connection - Предварительное подключение правила1 | 2Предыдущее подключение правила, указанное как одно из следующих:
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)"
fismf | fisvar | mamfis | mamfistype2 | sugfis | sugfistype2
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.