convertToMPC

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

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

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

Синтаксис

mpcobj = convertToMPC(nlmpcobj,states,inputs)
mpcobj = convertToMPC(nlmpcobj,states,inputs,MOIndex)
mpcobj = convertToMPC(nlmpcobj,states,inputs,MOIndex,parameters)

Описание

пример

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 22-Feb-2019 01:45:42):
---------------------------------------------
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