Добавьте правило в систему нечеткого вывода
добавляет одно или несколько нечетких правил, используя описания правил в 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)"
fisIn - Система нечеткого выводаmamfis | объекта sugfis | объекта mamfistype2 | объекта sugfistype2 объектСистема нечеткого вывода, заданная как одно из следующего:
mamfis объект - система нечеткого вывода Mamdani
sugfis объект - система нечеткого вывода Sugeno
mamfistype2 объект - Type-2 системы нечеткого вывода Мамдани
sugfistype2 объект - Type-2 системы нечеткого вывода Sugeno
ruleDescription - Описание правилаОписание правила, заданное с помощью текста или числового определения правила
Для описания текстовых правил задайте 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 или 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)"
Для описания числовых правил задайте ruleDescription как одно из следующего:
Вектор-строка, для задания одного нечеткого правила
Массив, где каждая строка ruleValues задает одно правило
Для каждой строки описание числового правила имеет M + N + 2 столбца, где M количество входа переменных и N количество выхода переменных. Каждый столбец содержит следующую информацию:
Первые M столбцы задают индексы функции входного типа и соответствуют Antecedent свойство правила. Чтобы указать NOT задайте отрицательное значение. Если правило не использует заданный вход, установите соответствующий индекс равным 0. Для каждого правила, по крайней мере, один индекс функции принадлежности входа должен быть ненулевым.
Следующие N столбцы задают индексы функции выхода членства и соответствуют Consequent свойство правила. Чтобы указать NOT условие для систем Мамдани, задайте отрицательное значение. NOT условия не поддерживаются для выходов Sugeno. Если правило не использует заданный вывод, установите соответствующий индекс равным 0. Для каждого правила, по крайней мере, один индекс выход функции принадлежности должен быть ненулевым.
Столбец M + N + 1 задает вес правила и соответствует Weight свойство правила.
Итоговый столбец задает предшествующий нечеткий оператор и соответствует Connection свойство правила.
fisOut - Система нечеткого выводаmamfis | объекта sugfis | объекта mamfistype2 | объекта sugfistype2 объектСистема нечеткого вывода, заданная как одно из следующего:
mamfis объект - система нечеткого вывода Mamdani
sugfis объект - система нечеткого вывода Sugeno
mamfistype2 объект - Type-2 системы нечеткого вывода Мамдани
sugfistype2 объект - Type-2 системы нечеткого вывода Sugeno
fisOut содержит добавленные выходные правила со всеми другими свойствами, соответствующими свойствам fisIn.
addrule сейчас addRuleПоведение изменено в R2018b
addrule сейчас addRule. Чтобы обновить код, измените имя функции на addrule кому addRule. Синтаксисы эквивалентны.
Предупреждает, начиная с R2019b
Поддержка представления систем нечеткого вывода в качестве структур будет удалена в следующем релизе. Использовать mamfis и sugfis вместо этого объекты. Существуют различия между этими представлениями, которые требуют обновления вашего кода. Эти различия включают:
Имена свойства объектов, которые отличаются от соответствующих полей структуры.
Объекты хранят текстовые данные как строки, а не как векторы символов.
Кроме того, все функции Fuzzy Logic Toolbox™, которые приняли или вернули системы нечеткого вывода, поскольку структуры теперь принимают и возвращают либо mamfis или sugfis объекты.
Чтобы преобразовать существующие структуры системы нечеткого вывода в объекты, используйте convertfis функция.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.