Создайте нечеткие системы Используя пользовательские функции

Создайте нечеткие системы вывода Используя пользовательские функции в Fuzzy Logic Designer

Когда вы создаете нечеткую систему вывода, как описано в Нечетком Процессе Вывода, можно заменить встроенные функции принадлежности, функции вывода или обоих с пользовательскими функциями. В этом разделе вы изучаете, как создать нечеткую систему вывода с помощью пользовательских функций в приложении Fuzzy Logic Designer.

Создавать нечеткую систему вывода с помощью пользовательских функций в приложении Fuzzy Logic Designer:

  1. Открытый Fuzzy Logic Designer. В командной строке MATLAB® введите:

    fuzzyLogicDesigner
  2. Задайте количество вводов и выводов нечеткой системы, как описано в Fuzzy Logic Designer.

  3. Создайте пользовательские функции принадлежности и замените встроенные функции принадлежности на них, как описано в Задают Пользовательские Функции принадлежности.

    Функции принадлежности задают, как каждая точка на входном пробеле сопоставлена со значением членства между 0 и 1.

  4. Создайте правила с помощью Редактора Правила, как описано в Редакторе Правила.

    Правила задают логическое отношение между входными параметрами и выходными параметрами.

  5. Создайте пользовательские функции вывода и замените встроенные функции вывода на них, как описано в Задают Пользовательские Функции Вывода.

    Методы вывода включают AND, OR, значение, агрегацию и defuzzification методы. Это действие генерирует выходные значения для нечеткой системы.

    Следующие данные показывают проблемный пример добавления подсказки, где встроенный Implication, Aggregation и функции Defuzzification заменяются пользовательскими функциями, customimp, customagg и customdefuzz, соответственно.

  6. Выберите View> Surface , чтобы просмотреть вывод нечеткой системы вывода в Поверхностном Средстве просмотра, как описано в Поверхностном Средстве просмотра.

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

Можно создать пользовательские функции принадлежности и использовать их в нечетком процессе вывода. Значения этих функций должны находиться между 0 и 1. Для получения дополнительной информации о свойствах функций принадлежности смотрите Функции принадлежности.

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

  1. Создайте функцию MATLAB и сохраните ее в своей текущей рабочей папке.

    Чтобы изучить, как создать функции MATLAB, см. Скрипты по сравнению с Функциями (MATLAB).

    Следующий код является примером многоступенчатой пользовательской функции принадлежности, custmf1, который зависит от восьми параметров между 0 и 10.

    % Function to generate a multi-step custom membership function
    % using 8 parameters for the input argument x
    function out = custmf1(x,params)
    
    for i = 1:length(x)
        if x(i) < params(1)
            y(i) = params(1);
        elseif x(i) < params(2)
            y(i) = params(2);
        elseif x(i) < params(3)
            y(i) = params(3);
        elseif x(i) < params(4)
            y(i) = params(4);
        elseif x(i) < params(5)
            y(i) = params(5);
        elseif x(i) < params(6)
            y(i) = params(6);
        elseif x(i) < params(7)
            y(i) = params(7);
        elseif x(i) < params(8)
            y(i) = params(8);
        else
            y(i) = 0;
        end
    end
    
    out = 0.1*y'; % Scale the output to lie between 0 and 1.
  2. Откройте приложение Fuzzy Logic Designer.

    fuzzyLogicDesigner

    Fuzzy Logic Designer открывается именем FIS по умолчанию, Untitled, и содержит вход того, input1, и один вывод, output1.

  3. В Fuzzy Logic Designer выберите Edit> Membership Functions, чтобы открыть Редактор Функции принадлежности.

    Три функции принадлежности треугольной формы для input1 отображены по умолчанию.

  4. Заменять функцию принадлежности по умолчанию на пользовательскую функцию в Редакторе Функции принадлежности:

    1. Выберите Edit> Remove All MFs, чтобы удалить функции принадлежности по умолчанию для input1.

    2. Выберите Edit> Add Custom MF, чтобы открыть диалоговое окно Custom Membership Function.

  5. Задавать пользовательскую функцию, в диалоговом окне Custom Membership Function:

    1. В поле MF name задайте имя для пользовательской функции принадлежности.

      Примечание

      При добавлении дополнительных пользовательских функций принадлежности задайте различный MF name для каждой функции.

    2. В поле M-file function name задайте имя пользовательского файла функции принадлежности.

    3. В Parameter list задайте вектор параметров.

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

      Примечание

      Длина вектора параметра должна быть больше, чем или равной количеству параметров в пользовательской функции принадлежности.

      Используя пример custmf1 на шаге 1, диалоговое окно Custom Membership Function выглядит подобным следующей фигуре.

    4. Нажмите OK, чтобы добавить пользовательскую функцию принадлежности.

    5. Задайте и Range и Display Range, чтобы быть [0 10], чтобы совпадать с областью значений пользовательской функции принадлежности.

    Редактор Функции принадлежности отображает пользовательский график функции принадлежности.

    Это действие также добавляет пользовательскую функцию принадлежности в Средство просмотра Правила и делает его доступным для создания правил для нечеткого процесса вывода. Чтобы просмотреть пользовательскую функцию в Средстве просмотра Правила, выберите Edit> Rules или в Fuzzy Logic Designer или в Редакторе Функции принадлежности.

  6. Чтобы добавить пользовательские функции принадлежности для output1, выберите его в Редакторе Функции принадлежности и повторных шагах 4 и 5.

Можно также добавить пользовательскую функцию принадлежности в FIS в командной строке MATLAB. Например, чтобы добавить custmf1 в первую входную переменную, input1 FIS, myFIS, и назвать его customMF1, вводит следующее:

myFIS = addMF(myFIS,"input1","custmf1",[0 1 2 4 6 8 9 10],'Name',"customMF1");

Задайте пользовательские функции вывода

Можно заменить встроенный AND, OR, значение, агрегацию и методы вывода defuzzification с пользовательскими функциями. После того, как вы создаете пользовательскую функцию вывода, сохраняете ее в вашей текущей рабочей папке. Чтобы изучить, как создать нечеткие системы с помощью пользовательских функций вывода, смотрите раздел Build Fuzzy Inference Systems Using Custom Functions in Fuzzy Logic Designer.

Инструкции для создания и определения функций для создания нечетких систем вывода описаны в следующих разделах.

Создайте пользовательский AND и функции OR

Пользовательский AND и функции вывода OR должны работать по столбцам с матрицей, таким же образом как функции MATLAB max, min или prod.

Для строки или вектор-столбца x, min(x) возвращает минимальный элемент.

x = [1 2 3 4];
min(x)
ans =
     1

Для матричного x min(x) возвращает вектор - строку, содержащий минимальный элемент из каждого столбца.

x = [1 2 3 4;5 6 7 8;9 10 11 12];
min(x)
ans =
     1     2     3     4
Для массивов N-D min(x) действует по первому неодноэлементному измерению.

Функциональный min(x,y) возвращает массив, который является тем же размером как x и y с минимальными элементами от x или y. Любой из входных параметров может быть скаляром. Функционирует, такие как max, и prod действует подобным образом.

В тулбоксе методы значения AND выполняют поэлементно операцию над матрицей, подобную функции MATLAB min(x,y).

a = [1 2; 3 4];
b = [2 2; 2 2];
min(a,b)
ans = 
    1     2
    2     2

Методы значения OR выполняют поэлементно операцию над матрицей, подобную функции MATLAB max(x,y).

Создайте пользовательские функции значения

Пользовательские функции значения должны управлять таким же образом как функции MATLAB max, min или prod. Вашей пользовательской функцией значения должен быть T - норма нечеткая перекрестная операция. Для получения дополнительной информации смотрите Дополнительные Нечеткие Операторы.

Функция значения должна поддержать или одни или два входных параметров, потому что программное обеспечение вызывает функцию двумя способами:

  • Вычислить выходные значения нечеткого множества с помощью силы увольнения всех правил и соответствующих выходных функций принадлежности. В этом случае программное обеспечение вызывает функцию значения использование двух входных параметров, подобных следующему примеру:

    impvals = customimp(w,outputmf)
    • w Запуская силу нескольких правил, заданных как nr-by-ns матрица. Здесь, nr является количеством правил, и ns является количеством выборок выходных функций принадлежности.

      w(:,j) = w(:,1) для всего j. w(i,1) является силой увольнения i th правило.

    • outputmf — Выведите значения функции принадлежности, заданные как nr-by-ns матрица. Здесь, nr является количеством правил, и ns является количеством выборок выходных функций принадлежности.

      outputmf(i,:) содержит данные i th выходная функция принадлежности.

  • Вычислить вывод нечеткое значение с помощью силы увольнения одного правила и соответствующей выходной функции принадлежности, для данной выборки. В этом случае программное обеспечение вызывает функцию значения использование входа того, подобного следующему примеру:

    impval = customimp([w outputmf])

    w и outputmf являются скалярными значениями, представляющими силу увольнения правила и соответствующего выходного значения функции принадлежности для данной выборки.

Следующее является примером ограниченного произведения пользовательская функция значения с бинарным отображением T(a,b)=max {0,a+b1}. [1]

function y = customimp(x1,x2)

if nargin == 1
    % x1 assumed to be non-empty column vector or matrix.    
    minVal = zeros(1,size(x1,2));
    y = ones(1,size(x1,2));    
 
    for i = 1:size(x1,1)
        y = max(minVal,sum([y;x1(i,:)])-1);
    end
else    
    % x1 and x2 assumed to be non-empty matrices.                  
    minVal = zeros(1,size(x1,2));
    y = zeros(size(x1));
  
    for i = 1:size(x1,1)
        y(i,:) = max(minVal,sum([x1(i,:);x2(i,:)])-1);
    end    
end

Примечание

Пользовательские функции значения не поддерживаются для Sugeno-систем-типов.

Создайте пользовательские функции агрегации

Пользовательские функции агрегации должны управлять таким же образом как функции MATLAB max, min или prod и должны иметь форму y = customagg(x). Вашей пользовательской функцией значения должен быть T-conorm (S - норма) нечеткая перекрестная операция. Для получения дополнительной информации смотрите Дополнительные Нечеткие Операторы.

x является nv-by-nr матрица, которая является списком усеченных выходных функций, возвращенных методом значения для каждого правила. nv является количеством выходных переменных, и nr является количеством правил. Вывод метода агрегации является одним нечетким множеством для каждой выходной переменной.

Следующее является примером ограниченной суммы пользовательская функция агрегации с бинарным отображением S(a,b)=min{a+b,1}. [1]

function y = customagg(x)

maxVal = ones(1,size(x,2));
y = zeros(1,size(x,2));

for i = 1:size(x,1)
    y = min(maxVal,sum([y;x(i,:)]));
end

Примечание

Пользовательские функции агрегации не поддерживаются для Sugeno-систем-типов.

Создайте пользовательские функции Defuzzification

Пользовательские функции defuzzification должны иметь форму y = customdefuzz(xmf,ymf), где (xmf,ymf) является конечным множеством значений функции принадлежности. xmf является вектором значений во входном диапазоне функции принадлежности. ymf является значением функции принадлежности при xmf.

Следующее является примером пользовательской функции defuzzification:

function defuzzfun = customdefuzz(xmf,ymf)

total_area = sum(ymf);
defuzzfun = sum(ymf.*xmf)/total_area;

Примечание

Пользовательские функции defuzzification не поддерживаются для Sugeno-систем-типов.

Шаги для определения пользовательских функций вывода

После того, как вы создаете и сохраняете пользовательскую функцию вывода, задаете функцию в нечеткой системе вывода с помощью следующих шагов:

  1. В нижней левой панели Fuzzy Logic Designer выберите Custom из выпадающего меню, соответствующего методу вывода, для которого вы хотите задать пользовательскую функцию.

    Выполнение так открывает диалоговое окно, где вы задаете имя пользовательской функции вывода.

  2. В поле Method name задайте имя пользовательской функции вывода и нажмите ОК.

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

    Примечание

    В порядке задать пользовательскую функцию вывода, необходимо сначала добавить по крайней мере одно правило в FIS.

  3. Чтобы задать пользовательские функции для других методов вывода, повторите шаги 1 и 2.

Можно также задать пользовательские функции вывода для FIS в командной строке MATLAB. Например, чтобы добавить пользовательское:

  • Метод Defuzzification, ввести

    myFIS.DefuzzificationMethod = "customdefuzz";

    где customdefuzz является именем пользовательской функции defuzzification.

  • Метод значения, ввести

    myFIS.ImplicationMethod = "customimp";

    где customimp является именем пользовательской функции значения.

  • Метод агрегации, ввести

    myFIS.AggregationMethod = "customagg";

    где customagg является именем пользовательской функции агрегации.

Используйте пользовательские функции в генерации кода

Можно использовать пользовательские функции в нечетких системах вывода, для которых вы генерируете код. Для получения дополнительной информации о генерации кода для нечетких систем смотрите, Развертывают Нечеткие Системы Вывода.

Если вы используете недвойной тип данных для своего сгенерированного кода, необходимо распространить тип данных от входных параметров пользовательской функции к выходному аргументу. Например, следующая пользовательская функция агрегации поддерживает тип данных x в y с помощью ones и zeros с аргументом 'like'.

function y = customagg(x)

maxVal = ones(1,size(x,2),'like',x);
y = zeros(1,size(x,2),'like',x);

for i = 1:size(x,1)
    y = min(maxVal,sum([y;x(i,:)]));
end

Для получения дополнительной информации о записи функций, которые поддерживают генерацию кода C/C++, смотрите, что MATLAB Программирует для Генерации кода (MATLAB Coder).

Ссылки

[1] Mizumoto, M. "Графические Представления Нечетких Соединительных слов, Второй части: Случаи Компенсационных Операторов и Самодвойственных Операторов". Нечеткие множества и Системы. Издание 32, Номер 1., 1989, стр 45-79.

Смотрите также

Похожие темы