convertToMPC

Преобразуйте nlmpc объект в один или несколько mpc объекты

Описание

На практике, при создании сопоставимой производительности, линейный MPC предпочтен по нелинейному MPC из-за его более высокого вычислительного КПД. Используя convertToMPC функция, можно преобразовать нелинейный контроллер MPC в один или несколько линейных контроллеров MPC в определенных рабочих точках. Можно затем реализовать запланированный на усиление или адаптивный MPC с помощью линейных контроллеров и сравнить их производительность со сравнительным тестом нелинейный контроллер MPC. Для примера смотрите Нелинейное и Запланированное на усиление MPC управление Этиленовым Объектом Оксидирования.

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

пример

mpcobj = convertToMPC(nlmpcobj,states,inputs) преобразует нелинейный контроллер MPC объект nlmpcobj в один или несколько линейных MPC диспетчер возражает при номинальных условиях, заданных в states и inputs. Количество линейных контроллеров MPC, N, равно количеству строк в states и inputs.

mpcobj = convertToMPC(nlmpcobj,states,inputs,MOIndex) задает индексы измеренных выходных параметров. Используйте этот синтаксис, когда у вашего контроллера будут неизмеренные выходные сигналы.

mpcobj = convertToMPC(nlmpcobj,states,inputs,MOIndex,parameters) задает значения параметров модели прогноза для каждого номинального условия. Используйте этот синтаксис, когда ваша модель прогноза контроллера будет иметь дополнительные параметры.

Примеры

свернуть все

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

nlobj = nlmpc(4,1,'MV',1,'MD',2);

Задайте шаг расчета контроллера и горизонты.

nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 3;

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

nlobj.Model.StateFcn = 'oxidationStateFcn';

Задайте выходную функцию модели прогноза и масштабный коэффициент выходной переменной.

nlobj.Model.OutputFcn = @(x,u) x(3);
nlobj.OutputVariables.ScaleFactor = 0.03;

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

nlobj.ManipulatedVariables.Min = 0.0704;
nlobj.ManipulatedVariables.Max = 0.7042;
nlobj.ManipulatedVariables.ScaleFactor = 0.6;

Задайте измеренный масштабный коэффициент воздействия.

nlobj.MeasuredDisturbances.ScaleFactor = 0.5;

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

options = optimoptions('fsolve','Display','none');

uLow = [0.38 0.5];
xLow = fsolve(@(x) oxidationStateFcn(x,uLow),[1 0.3 0.03 1],options);

uMedium = [0.24 0.5];
xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options);

uHigh = [0.15 0.5];
xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options);

Создайте линейные контроллеры MPC для каждого из этих номинальных условий.

mpcobjLow = convertToMPC(nlobj,xLow,uLow);
mpcobjMedium = convertToMPC(nlobj,xMedium,uMedium);
mpcobjHigh = convertToMPC(nlobj,xHigh,uHigh);

Можно также создать несколько контроллеров, использующих массивы номинальных условий. Количество строк в массивах задает контроллеры номера, чтобы создать. Линейные контроллеры возвращены как массив ячеек mpc объекты.

u = [uLow; uMedium; uHigh];
x = [xLow; xMedium; xHigh];
mpcobjs = convertToMPC(nlobj,x,u);

Просмотрите свойства mpcobjLow контроллер.

mpcobjLow
 
MPC object (created on 23-Dec-2019 11:44:04):
---------------------------------------------
Sampling time:      1 (seconds)
Prediction Horizon: 10
Control Horizon:    3

Plant Model:        
                                      --------------
      1  manipulated variable(s)   -->|  4 states  |
                                      |            |-->  1 measured output(s)
      1  measured disturbance(s)   -->|  2 inputs  |
                                      |            |-->  0 unmeasured output(s)
      0  unmeasured disturbance(s) -->|  1 outputs |
                                      --------------
Indices:
  (input vector)    Manipulated variables: [1 ]
                    Measured disturbances: [2 ]
  (output vector)        Measured outputs: [1 ]

Disturbance and Noise Models:
        Output disturbance model: default (type "getoutdist(mpcobjLow)" for details)
         Measurement noise model: default (unity gain after scaling)

Weights:
        ManipulatedVariables: 0
    ManipulatedVariablesRate: 0.1000
             OutputVariables: 1
                         ECR: 100000

State Estimation:  Default Kalman Filter (type "getEstimator(mpcobjLow)" for details)

Constraints:
 0.0704 <= u1 <= 0.7042, u1/rate is unconstrained, y1 is unconstrained

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

свернуть все

Нелинейный контроллер MPC, заданный как nlmpc объект.

Примечание

Ваш nlmpc объект контроллера не должен иметь пользовательской стоимости или ограничительных функций.

Номинальные значения состояния, заданные как N-by-Nx массив, где Nx равен nlmpcobj.Dimensions.NumberOfStates. Каждая строка States задает номинальный набор состояний, которые будут использоваться в преобразовании.

Количество строк в states и inputs должен соответствовать.

Номинальные входные значения, заданные как N-by-Nu массив, где Nu равен nlmpcobj.Dimensions.NumberOfInputs. Каждая строка Inputs задает номинальный набор входных параметров, которые будут использоваться в преобразовании.

Количество строк в states и inputs должен соответствовать.

Измеренные выходные индексы, заданные как вектор длины Ny, где Ny является количеством выходных параметров. Если MOIndex [], каждый выход измеряется. В противном случае, любые выходные параметры, не перечисленные в MOIndex не измерены.

convertToMPC использование MOIndex сконфигурировать средства оценки состояния по умолчанию в mpcobj.

Значения параметра модели прогноза, заданные как N-by-Np массив ячеек, где Np равен nlmpcobj.Model.NumberOfParameters. Каждая строка parameters задает значения параметра модели для данного номинального условия. В каждой строке порядок параметров должен совпадать с порядком, заданным в функциях модели. Каждый параметр должен быть числовым параметром с правильными размерностями; то есть, размерности ожидаются функциями модели прогноза.

Для каждого номинального условия эти параметры передаются функции состояния (nlmpcobj.Model.StateFcn) и выходная функция (nlmpcobj.Model.OutputFcn) из нелинейного контроллера MPC.

Количество строк в parameters должен совпадать с количеством строк в states и inputs.

Если ваша модель прогноза контроллера имеет дополнительные параметры, необходимо задать parameters.

Выходные аргументы

свернуть все

Линейные контроллеры MPC создаются для каждого номинального условия, возвращенного как одно из следующего:

  • Один mpc возразите когда N = 1.

  • Массив ячеек mpc объекты длины N, когда N> 1. Каждый объект соответствует одному номинальному условию.

convertToMPC копирует следующие свойства контроллера с nlmpcobj контроллерам в mpcobj:

  • 'SampleTime'

  • Прогноз и горизонты управления

  • Настройка весов

  • Границы на выходных переменных, переменных, которыми управляют и плавающих курсах, которыми управляют,

  • Масштабные коэффициенты, имена и модули для переменных и воздействий

Если nlmpcobj:

  • Имеет неизмеренные каналы воздействия, затем контроллеры в mpcobj имейте усиления единицы для их возмущений ввода и вывода.

  • Не имеет неизмеренных каналов воздействия, затем контроллеры в mpcobj имейте выходные возмущения по умолчанию.

Любое состояние ограничивает в nlmpcobj пропущены во время преобразования.

Введенный в R2018b