generateRewardFunction

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

    Описание

    пример

    generateRewardFunction(mpcobj) генерирует MATLAB® вознаградите функцию на основе стоимости и ограничений, заданных в линейном или нелинейном объекте MPC mpcobj. Сгенерированная премиальная функция отображена в новом окне редактора, и можно использовать ее в качестве начальной точки для премиального проекта. Можно настроить веса, использовать различную функцию штрафа, и затем использовать получившуюся премиальную функцию в среде, чтобы обучить агента.

    Этот синтаксис требует программного обеспечения Model Predictive Control Toolbox™.

    пример

    generateRewardFunction(blks) генерирует премиальную функцию MATLAB на основе ограничений эффективности, заданных в блоках верификации модели, заданных в массиве путей к блоку blks.

    Этот синтаксис требует Simulink® Программное обеспечение Design Optimization™.

    generateRewardFunction(___,'FunctionName',myFcnName) задает имя сгенерированной премиальной функции и сохраняет его в файл с тем же именем. Это также перезаписывает любой существующий ранее файл с тем же именем в текущем каталоге. Обеспечьте это имя после любого из предыдущих входных параметров.

    Примеры

    свернуть все

    В этом примере показано, как сгенерировать премиальную функцию обучения с подкреплением от объекта MPC.

    Задайте объект и создайте контроллер MPC

    Создайте случайный объект с помощью rss функционируйте и обнуленный проходная матрица.

    plant = rss(4,3,2);
    plant.d = 0;

    Задайте, какой из сигналов объекта является переменными, которыми управляют, измеренными воздействиями, измеренными выходными параметрами и неизмеренными выходными параметрами.

    plant = setmpcsignals(plant,'MV',1,'MD',2,'MO',[1 2],'UO',3);

    Создайте контроллер MPC с шагом расчета 0,1 и предсказание и управляйте горизонтами 10 и 3 шагов, соответственно.

    mpcobj = mpc(plant,0.1,10,3);
    -->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
    -->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
    -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
       for output(s) y1 and zero weight for output(s) y2 y3 
    

    Установите пределы и масштабный коэффициент для переменной, которой управляют.

    mpcobj.ManipulatedVariables.Min = -2;
    mpcobj.ManipulatedVariables.Max = 2;
    mpcobj.ManipulatedVariables.ScaleFactor = 4;

    Установите веса для квадратичной функции стоимости.

    mpcobj.Weights.OutputVariables = [10 1 0.1];
    mpcobj.Weights.ManipulatedVariablesRate = 0.2;

    Сгенерируйте премиальную функцию

    Сгенерируйте премиальный код функции из технических требований в mpc объект с помощью generateRewardFunction. Код отображен в редакторе MATLAB.

    generateRewardFunction(mpcobj)
    

    В данном примере сохраненного в файле функции MATLAB myMpcRewardFcn.m. Отобразите сгенерированную премиальную функцию.

    type myMpcRewardFcn.m
    function reward = myMpcRewardFcn(y,refy,mv,refmv,lastmv)
    % MYMPCREWARDFCN generates rewards from MPC specifications.
    %
    % Description of input arguments:
    %
    % y : Output variable from plant at step k+1
    % refy : Reference output variable at step k+1
    % mv : Manipulated variable at step k
    % refmv : Reference manipulated variable at step k
    % lastmv : Manipulated variable at step k-1
    %
    % Limitations (MPC and NLMPC):
    %     - Reward computed based on first step in prediction horizon.
    %       Therefore, signal previewing and control horizon settings are ignored.
    %     - Online cost and constraint update is not supported.
    %     - Custom cost and constraint specifications are not considered.
    %     - Time varying cost weights and constraints are not supported.
    %     - Mixed constraint specifications are not considered (for the MPC case).
    
    % Reinforcement Learning Toolbox
    % 27-May-2021 14:47:29
    
    %#codegen
    
    %% Specifications from MPC object
    % Standard linear bounds as specified in 'States', 'OutputVariables', and
    % 'ManipulatedVariables' properties
    ymin = [-Inf -Inf -Inf];
    ymax = [Inf Inf Inf];
    mvmin = -2;
    mvmax = 2;
    mvratemin = -Inf;
    mvratemax = Inf;
    
    % Scale factors as specified in 'States', 'OutputVariables', and
    % 'ManipulatedVariables' properties
    Sy  = [1 1 1];
    Smv = 4;
    
    % Standard cost weights as specified in 'Weights' property
    Qy      = [10 1 0.1];
    Qmv     = 0;
    Qmvrate = 0.2;
    
    %% Compute cost
    dy      = (refy(:)-y(:)) ./ Sy';
    dmv     = (refmv(:)-mv(:)) ./ Smv';
    dmvrate = (mv(:)-lastmv(:)) ./ Smv';
    Jy      = dy'      * diag(Qy.^2)      * dy;
    Jmv     = dmv'     * diag(Qmv.^2)     * dmv;
    Jmvrate = dmvrate' * diag(Qmvrate.^2) * dmvrate;
    Cost    = Jy + Jmv + Jmvrate;
    
    %% Penalty function weight (specify nonnegative)
    Wy = [1 1 1];
    Wmv = 10;
    Wmvrate = 10;
    
    %% Compute penalty
    % Penalty is computed for violation of linear bound constraints.
    %
    % To compute exterior bound penalty, use the exteriorPenalty function and
    % specify the penalty method as 'step' or 'quadratic'.
    %
    % Alternaltively, use the hyperbolicPenalty or barrierPenalty function for
    % computing hyperbolic and barrier penalties.
    %
    % For more information, see help for these functions.
    %
    % Set Pmv value to 0 if the RL agent action specification has
    % appropriate 'LowerLimit' and 'UpperLimit' values.
    Py      = Wy      * exteriorPenalty(y,ymin,ymax,'step');
    Pmv     = Wmv     * exteriorPenalty(mv,mvmin,mvmax,'step');
    Pmvrate = Wmvrate * exteriorPenalty(mv-lastmv,mvratemin,mvratemax,'step');
    Penalty = Py + Pmv + Pmvrate;
    
    %% Compute reward
    reward = -(Cost + Penalty);
    end
    

    Расчетное вознаграждение зависит только от текущих значений сигналов ввода и вывода объекта и их ссылочных значений, и оно состоит из двух частей.

    Первой является отрицательная стоимость, которая зависит от различия в квадрате между желаемыми и текущими вводами и выводами объекта. Эта часть использует веса функции стоимости, заданные в объекте MPC. Вторая часть является штрафом, который действует как отрицательное вознаграждение каждый раз, когда текущие сигналы объекта нарушают ограничения.

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

    В этом примере показано, как сгенерировать премиальную функцию обучения с подкреплением от блока верификации модели Simulink Design Optimization.

    В данном примере откройте модель Simulink LevelCheckBlock.slx, который содержит блок Check Step Response Characteristics под названием Проверка Уровня.

    open_system('LevelCheckBlock')

    Figure Check Step Response Characteristics [1] - Level Check contains an axes object and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes object contains 9 objects of type patch, line.

    Сгенерируйте премиальный код функции из технических требований в блоке Level Check, с помощью generateRewardFunction. Код отображен в редакторе MATLAB.

    generateRewardFunction('LevelCheckBlock/Level Check')
    

    В данном примере код сохранен в файле функции MATLAB myBlockRewardFcn.m.

    Отобразите сгенерированную премиальную функцию.

    type myBlockRewardFcn.m
    function reward = myBlockRewardFcn(x,t)
    % MYBLOCKREWARDFCN generates rewards from Simulink block specifications.
    %
    % x : Input of LevelCheckBlock/Level Check
    % t : Simulation time (s)
    
    % Reinforcement Learning Toolbox
    % 27-May-2021 16:45:27
    
    %#codegen
    
    %% Specifications from LevelCheckBlock/Level Check
    Block1_InitialValue = 1;
    Block1_FinalValue = 2;
    Block1_StepTime = 0;
    Block1_StepRange = Block1_FinalValue - Block1_InitialValue;
    Block1_MinRise = Block1_InitialValue + Block1_StepRange * 80/100;
    Block1_MaxSettling = Block1_InitialValue + Block1_StepRange * (1+2/100);
    Block1_MinSettling = Block1_InitialValue + Block1_StepRange * (1-2/100);
    Block1_MaxOvershoot = Block1_InitialValue + Block1_StepRange * (1+10/100);
    Block1_MinUndershoot = Block1_InitialValue - Block1_StepRange * 5/100;
    
    if t >= Block1_StepTime
        if Block1_InitialValue <= Block1_FinalValue
            Block1_UpperBoundTimes = [0,5; 5,max(5+1,t+1)];
            Block1_UpperBoundAmplitudes = [Block1_MaxOvershoot,Block1_MaxOvershoot; Block1_MaxSettling,Block1_MaxSettling];
            Block1_LowerBoundTimes = [0,2; 2,5; 5,max(5+1,t+1)];
            Block1_LowerBoundAmplitudes = [Block1_MinUndershoot,Block1_MinUndershoot; Block1_MinRise,Block1_MinRise; Block1_MinSettling,Block1_MinSettling];
        else
            Block1_UpperBoundTimes = [0,2; 2,5; 5,max(5+1,t+1)];
            Block1_UpperBoundAmplitudes = [Block1_MinUndershoot,Block1_MinUndershoot; Block1_MinRise,Block1_MinRise; Block1_MinSettling,Block1_MinSettling];
            Block1_LowerBoundTimes = [0,5; 5,max(5+1,t+1)];
            Block1_LowerBoundAmplitudes = [Block1_MaxOvershoot,Block1_MaxOvershoot; Block1_MaxSettling,Block1_MaxSettling];
        end
    
        Block1_xmax = zeros(1,size(Block1_UpperBoundTimes,1));
        for idx = 1:numel(Block1_xmax)
            tseg = Block1_UpperBoundTimes(idx,:);
            xseg = Block1_UpperBoundAmplitudes(idx,:);
            Block1_xmax(idx) = interp1(tseg,xseg,t,'linear',NaN);
        end
        if all(isnan(Block1_xmax))
            Block1_xmax = Inf;
        else
            Block1_xmax = max(Block1_xmax,[],'omitnan');
        end
    
        Block1_xmin = zeros(1,size(Block1_LowerBoundTimes,1));
        for idx = 1:numel(Block1_xmin)
            tseg = Block1_LowerBoundTimes(idx,:);
            xseg = Block1_LowerBoundAmplitudes(idx,:);
            Block1_xmin(idx) = interp1(tseg,xseg,t,'linear',NaN);
        end
        if all(isnan(Block1_xmin))
            Block1_xmin = -Inf;
        else
            Block1_xmin = max(Block1_xmin,[],'omitnan');
        end
    else
        Block1_xmin = -Inf;
        Block1_xmax = Inf;
    end
    
    
    
    
    %% Penalty function weight (specify nonnegative)
    Weight = 1;
    
    %% Compute penalty
    % Penalty is computed for violation of linear bound constraints.
    %
    % To compute exterior bound penalty, use the exteriorPenalty function and
    % specify the penalty method as 'step' or 'quadratic'.
    %
    % Alternaltively, use the hyperbolicPenalty or barrierPenalty function for
    % computing hyperbolic and barrier penalties.
    %
    % For more information, see help for these functions.
    Penalty = sum(exteriorPenalty(x,Block1_xmin,Block1_xmax,'step'));
    
    %% Compute reward
    reward = -Weight * Penalty;
    end
    

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

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

    Закройте модель Simulink.

    close_system('LevelCheckBlock')

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

    свернуть все

    Линейный или нелинейный объект MPC в виде mpc Объект (Model Predictive Control Toolbox) или nlmpc Объект (Model Predictive Control Toolbox), соответственно.

    Обратите внимание на то, что:

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

    • Используя изменяющиеся во времени веса стоимости и ограничения или обновление их онлайн, не поддерживается.

    • Только стандартная квадратичная функция стоимости, как описано в Задаче оптимизации (Model Predictive Control Toolbox), поддерживается. Поэтому для mpc объекты, использование смешанных ограничительных технических требований не поддерживается. Точно так же для nlmpc объекты, пользовательская стоимость и ограничительные технические требования не поддерживаются.

    Пример: mpc(tf([1 1],[1 2 0]),0.1)

    Путь к верификации модели блокируется в виде символьного массива, массива ячеек или массива строк. Поддерживаемые блоки верификации модели Simulink Design Optimization являются следующими единицами.

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

    Пример: "mySimulinkModel02/Check Against Reference"

    Имя функции в виде объекта строки или вектора символов.

    Пример: "reward03epf_step"

    Советы

    По умолчанию внешний вид связал функцию штрафа exteriorPenalty используется, чтобы вычислить штраф. В качестве альтернативы, чтобы вычислить гиперболический и штрафы барьера, можно использовать hyperbolicPenalty или barrierPenalty функции.

    Введенный в R2021b
    Для просмотра документации необходимо авторизоваться на сайте