Вычислите оптимальное действие управления для нелинейного контроллера MPC
задает дополнительные параметры времени выполнения для вычисления оптимальных перемещений управления. Используя mv = nlmpcmove(nlmpcobj,x,lastmv,ref,md,options)optionsможно задать начальные предположения для состояния и изменяемых траекторий, обновить веса настройки для ограничений или изменить параметры модели прогнозирования.
вычисляет оптимальное действие управления для текущего времени. Для моделирования нелинейного управления MPC с замкнутым контуром вызовите mv = nlmpcmove(nlmpcMSobj,x,lastmv)nlmpcmove неоднократно.
указывает дополнительный mv = nlmpcmove(nlmpcobj,x,lastmv,simdata)simdata структура, содержащая измеренные возмущения, границы времени выполнения, параметры для функций состояния и этапа и исходные догадки для состояний и манипулируемых переменных траекторий. В целом важно вернуть новый simdata (содержащий обновленные начальные догадки) в качестве второго выходного аргумента, используя синтаксис ниже.
[ возвращает обновленный mv,simdata] = nlmpcmove(___)simdata структура, которая содержит новые начальные догадки для состояния и манипулированных траекторий, которые будут использоваться в следующем интервале управления. Хорошие начальные догадки важны, поскольку они помогают решателю быстрее прийти к решению.
Создайте нелинейный контроллер MPC с шестью состояниями, шестью выходами и четырьмя входами.
nx = 6; ny = 6; nu = 4; nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время и горизонты выборки контроллера.
Ts = 0.4; p = 30; c = 4; nlobj.Ts = Ts; nlobj.PredictionHorizon = p; nlobj.ControlHorizon = c;
Укажите функцию состояния модели прогнозирования и якобиан функции состояния. В этом примере используется модель летающего робота.
nlobj.Model.StateFcn = "FlyingRobotStateFcn"; nlobj.Jacobian.StateFcn = "FlyingRobotStateJacobianFcn";
Укажите пользовательскую функцию затрат для контроллера, который заменит функцию стандартных затрат.
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:))); nlobj.Optimization.ReplaceStandardCost = true;
Укажите пользовательскую функцию ограничения для контроллера.
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
Задайте линейные ограничения для переменных, которыми манипулируют.
for ct = 1:nu nlobj.MV(ct).Min = 0; nlobj.MV(ct).Max = 1; end
Проверка модели прогнозирования и пользовательских функций в начальных состояниях (x0) и начальные входы (u0) робота.
x0 = [-10;-10;pi/2;0;0;0]; u0 = zeros(nu,1); validateFcns(nlobj,x0,u0);
Model.StateFcn is OK. Jacobian.StateFcn is OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Вычислите оптимальное состояние и управляемые переменные траектории, которые возвращаются в info.
[~,~,info] = nlmpcmove(nlobj,x0,u0);
Slack variable unused or zero-weighted in your custom cost function. All constraints will be hard.
Постройте график оптимальных траекторий.
FlyingRobotPlotPlanning(info)
Optimal fuel consumption = 4.712383



Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.
nlobj = nlmpc(4,2,1);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время выборки и горизонты контроллера.
Ts = 0.1; nlobj.Ts = Ts; nlobj.PredictionHorizon = 10; nlobj.ControlHorizon = 5;
Укажите функцию состояния контроллера, которая находится в файле pendulumDT0.m. Эта дискретно-временная модель интегрирует непрерывную временную модель, определенную в pendulumCT0.m с использованием многоступенчатого прямого метода Эйлера.
nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;Модель прогнозирования использует необязательный параметр, Ts, для представления времени выборки. Укажите количество параметров.
nlobj.Model.NumberOfParameters = 1;
Укажите функцию вывода модели, передав параметр времени выборки в качестве входного аргумента.
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];
Определите стандартные ограничения для контроллера.
nlobj.Weights.OutputVariables = [3 3]; nlobj.Weights.ManipulatedVariablesRate = 0.1; nlobj.OV(1).Min = -10; nlobj.OV(1).Max = 10; nlobj.MV.Min = -100; nlobj.MV.Max = 100;
Проверка функций модели прогнозирования.
x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj, x0, u0, [], {Ts});Model.StateFcn is OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Измеримы только два состояния растений. Поэтому создайте расширенный фильтр Калмана для оценки четырех состояний установки. Его функция перехода состояния определена в pendulumStateFcn.m и его измерительная функция определена в pendulumMeasurementFcn.m.
EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);
Определите начальные условия для моделирования, инициализируйте расширенное состояние фильтра Калмана и укажите нулевое начальное управляемое значение переменной.
x = [0;0;-pi;0]; y = [x(1);x(3)]; EKF.State = x; mv = 0;
Укажите выходное ссылочное значение.
yref = [0 0];
Создание nlmpcmoveopt и укажите параметр времени выборки.
nloptions = nlmpcmoveopt;
nloptions.Parameters = {Ts};Запустить моделирование для 10 секунд. В течение каждого контрольного интервала:
Исправьте предыдущий прогноз с помощью текущего измерения.
Вычисление оптимальных перемещений управления с помощью nlmpcmove. Эта функция возвращает вычисленные оптимальные последовательности в nloptions. Передача обновленного объекта опций nlmpcmove в следующем интервале управления обеспечивает начальные догадки для оптимальных последовательностей.
Спрогнозировать состояния модели.
Примените первое вычисленное оптимальное контрольное перемещение к установке, обновив состояния установки.
Генерируйте данные датчика с белым шумом.
Сохраните состояния завода.
Duration = 10; xHistory = x; for ct = 1:(Duration/Ts) % Correct previous prediction xk = correct(EKF,y); % Compute optimal control moves [mv,nloptions] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions); % Predict prediction model states for the next iteration predict(EKF,[mv; Ts]); % Implement first optimal control move x = pendulumDT0(x,mv,Ts); % Generate sensor data y = x([1 3]) + randn(2,1)*0.01; % Save plant states xHistory = [xHistory x]; end
Постройте график результирующих траекторий состояния.
figure subplot(2,2,1) plot(0:Ts:Duration,xHistory(1,:)) xlabel('time') ylabel('z') title('cart position') subplot(2,2,2) plot(0:Ts:Duration,xHistory(2,:)) xlabel('time') ylabel('zdot') title('cart velocity') subplot(2,2,3) plot(0:Ts:Duration,xHistory(3,:)) xlabel('time') ylabel('theta') title('pendulum angle') subplot(2,2,4) plot(0:Ts:Duration,xHistory(4,:)) xlabel('time') ylabel('thetadot') title('pendulum velocity')

В этом примере показано, как создать и смоделировать очень простой многоступенчатый MPC-контроллер в замкнутом контуре.
Создание многоступенчатого MPC-контроллера
Создайте многоступенчатый MPC-объект с 5-ступенчатым горизонтом, одним состоянием и одной управляемой переменной.
nlmsobj = nlmpcMultistage(5,1,1);
Укажите функцию перехода состояния для модели прогнозирования (mystatefcn определяется в конце файла).
nlmsobj.Model.StateFcn = @mystatefcn;
Укажите функции затрат для последних трех этапов (mycostfcn определяется в конце файла).
for i=3:6 nlmsobj.Stages(6).CostFcn = @mycostfcn; end
Моделирование контроллера в замкнутом контуре
Инициализация состояния установки и ввода.
x=3; mv=0;
Проверка функций.
validateFcns(nlmsobj,x,mv);
Model.StateFcn is OK. "CostFcn" of the following stages 6 are OK. Analysis of user-provided model, cost, and constraint functions complete.
Смоделировать контур управления в течение 10 шагов.
for k=1:10 mv = nlmpcmove(nlmsobj, x, mv); % calculate move (without initial guess) x = x + (mv-sqrt(x))*1; % update x: x(t+1)=x(t)+xdot*Ts end
Отображение последнего значения состояния и управляемых переменных.
disp(['Final value of x =' num2str(x)])Final value of x =0.57118
disp(['Final value of mv =' num2str(mv)])Final value of mv =0.75571
Функции поддержки
Функция перехода состояния.
function xdot = mystatefcn(x,u) xdot = u-sqrt(x); end
Функции затрат этапа.
function j = mycostfcn(s,x,u) j = abs(u)/s+s*x^2; end
В этом примере показано, как создать и смоделировать очень простой многоступенчатый MPC-контроллер в замкнутом контуре.
Создание многоступенчатого MPC-контроллера
Создайте многоступенчатый MPC-объект с 7-ступенчатым горизонтом, одним состоянием и одной управляемой переменной.
nlmsobj = nlmpcMultistage(7,1,1);
Укажите функцию перехода состояния для модели прогнозирования (mystatefcn определяется в конце файла).
nlmsobj.Model.StateFcn = @mystatefcn;
Рекомендуется использовать якобинцы всякий раз, когда они доступны, в противном случае решатель должен вычислить их численно.
Укажите якобиан функции перехода состояния (mystatejacobian определяется в конце файла).
nlmsobj.Model.StateJacFcn = @mystatejac;
Укажите функции затрат для всех этапов, кроме первых двух (mycostfcn определяется в конце файла).
for i=3:8 nlmsobj.Stages(6).CostFcn = @mycostfcn; end
Определение начальных условий, создание структуры данных и проверка функций
Инициализация состояния установки и ввода.
x=3; mv=0;
Создание структуры исходных данных моделирования.
simdata = getSimulationData(nlmsobj)
simdata = struct with fields:
StateMin: []
StateMax: []
MVMin: []
MVMax: []
InitialGuess: []
Проверка функций и структуры данных.
validateFcns(nlmsobj,x,mv,simdata);
Model.StateFcn is OK. Model.StateJacFcn is OK. "CostFcn" of the following stages 6 are OK. Analysis of user-provided model, cost, and constraint functions complete.
Моделирование контроллера в замкнутом контуре
Смоделировать контур управления в течение 10 шагов.
for k=1:10 [mv,simdata] = nlmpcmove(nlmsobj, x, mv, simdata); % calculate move x = x + (mv-sqrt(x))*1; % update x: x(t+1)=x(t)+xdot*Ts end
Отображение последнего значения состояния и управляемых переменных.
disp(['Final value of x =' num2str(x)])Final value of x =1.6556
disp(['Final value of mv =' num2str(mv)])Final value of mv =1.2816
Функции поддержки
Функция перехода состояния.
function xdot = mystatefcn(x,u) xdot = u-sqrt(x); end
Якобиан государственной переходной функции.
function [A,B] = mystatejac(x,~) A = -1/(2*x^(1/2)); B = 1; end
Функции затрат этапа.
function j = mycostfcn(s,x,u) j = abs(u)/s+s*x^2; end
nlmpcobj - Нелинейный контроллер MPCnlmpc объектНелинейный контроллер MPC, указанный как nlmpc объект.
x - Текущие состояния модели прогнозированияТекущие состояния модели прогнозирования, заданные как вектор lengthNx, где Nx - количество состояний модели прогнозирования. Поскольку нелинейный контроллер MPC не выполняет оценку состояния, необходимо измерить или оценить текущие состояния модели прогнозирования в каждом интервале управления. Дополнительные сведения о нелинейных моделях прогнозирования MPC см. в разделе Указание модели прогнозирования для нелинейных MPC.
lastmv - Управляющие сигналы, используемые в установке на предыдущем интервале управленияУправляющие сигналы, используемые в установке на предыдущем контрольном интервале, определяемом как вектор длины Nmv, где Nmv - количество манипулируемых переменных.
Примечание
Определить lastmv как управляемые переменные сигналы, подаваемые на установку в предыдущем интервале управления. Обычно эти сигналы являются значениями, генерируемыми контроллером, хотя это не всегда так. Например, если контроллер находится в автономном режиме и работает в режиме отслеживания; то есть выход контроллера не приводит в действие установку, а затем подает фактический управляющий сигнал на last_mv может помочь достичь безударной передачи, когда контроллер переключен обратно в оперативный режим.
ref - Ссылочные значения выходных данных завода[] (по умолчанию) | вектор строки | массивИсходные значения вывода растения, заданные как вектор строки длиной Ny или массив со столбцами Ny, где Ny - количество выходных переменных. Если не указать ref, ссылочные значения по умолчанию равны нулю.
Чтобы использовать одни и те же ссылочные значения для всего горизонта прогнозирования, укажите вектор строки.
Чтобы изменять опорные значения по горизонту прогнозирования от времени k + 1 до времени k + p, укажите массив, содержащий до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит ссылочные значения для одного шага горизонта прогнозирования. Если указано меньше p строк, значения в последней строке используются для оставшихся шагов горизонта прогнозирования.
md - Измеренные значения возмущений[] (по умолчанию) | вектор строки | массивИзмеренные значения возмущений, определенные как вектор строки длиной Nmd или матрица со столбцами Nmd, где Nmd - количество измеренных возмущений. Если контроллер измерил нарушения, необходимо указать md. Если у вашего контроллера нет измеренных возмущений, укажите md как [].
Чтобы использовать одни и те же значения возмущений в горизонте прогнозирования, укажите вектор строки.
Чтобы изменять значения возмущений по горизонту прогнозирования от времени k до времени k + p, укажите массив, содержащий до p + 1 строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит значения возмущений для одного шага горизонта прогнозирования. Если указано меньше p строк, значения в последней строке используются для оставшихся шагов горизонта прогнозирования.
options - Параметры времени выполненияnlmpcmoveopt объектПараметры времени выполнения, указанные как nlmpcmoveopt объект. Используя эти опции, можно:
Настройка веса контроллера
Обновление линейных зависимостей
Задать управляемые переменные цели
Укажите параметры модели прогнозирования
Предоставление исходных предположений для состояния и регулируемых траекторий
Эти параметры применяются только к текущему nlmpcmove мгновенное время.
Для повышения эффективности решателя рекомендуется задавать начальные догадки для состояния и манипулируемых переменных траекторий.
nlmpcMSobj - Нелинейный многоступенчатый контроллер MPCnlmpcMultistage объектМногоступенчатый нелинейный контроллер MPC, указанный как nlmpcMultistage объект.
simdata - Структура данных моделирования во время выполненияСтруктура данных моделирования во время выполнения. Он должен быть первоначально создан getSimulationData, а затем заполнен (при необходимости) перед передачей в nlmpcmove в качестве входного аргумента. Обновленная версия всегда возвращается в качестве второго выходного аргумента nlmpcmove. Обратите внимание, что MVMin, MVMax, StateMin, StateMax, MVRateMin, MVRateMax поля необходимы только при необходимости изменения этих границ во время выполнения. Эти поля существуют в структуре, возвращенной getSimulationData только если включить их явным образом при вызове getSimulationData. simdata структура имеет следующие поля.
MeasuredDisturbance - Измеренные значения возмущений[] (по умолчанию) | вектор строки | массивИзмеренные значения возмущений, определенные как вектор строки длиной Nmd или матрица со столбцами Nmd, где Nmd - количество измеренных возмущений. Если для многоступенчатого объекта MPC определен какой-либо измеренный канал возмущения, необходимо указать MeasuredDisturbance. Если контроллер не имеет измеренных возмущений, это поле не существует в структуре, созданной getSimulationData.
Чтобы использовать одни и те же значения возмущений в горизонте прогнозирования, укажите вектор строки.
Чтобы изменять значения возмущений по горизонту прогнозирования от времени k до времени k + p, укажите массив, содержащий до p + 1 строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит значения возмущений для одного шага горизонта прогнозирования. Если указано меньше p строк, значения в последней строке используются для оставшихся шагов горизонта прогнозирования.
MVMin - Манипулируемые переменные нижние границы[] (по умолчанию) | вектор строки | матрицаНижние границы манипулируемой переменной, задаваемые как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVMin(:,i) заменяет ManipulatedVariables(i).Min свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
MVMax - Манипулируемые переменные верхние границы[] (по умолчанию) | вектор строки | матрицаВерхние границы манипулируемых переменных, заданные как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVMax(:,i) заменяет ManipulatedVariables(i).Max свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
MVRateMin - Манипулируемые нижние границы переменной скорости[] (по умолчанию) | вектор строки | матрицаНижние границы манипулируемой переменной скорости, заданные как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVRateMin(:,i) заменяет ManipulatedVariables(i).RateMin свойства контроллера во время выполнения. MVRateMin границы должны быть непозволительными.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
MVRateMax - Манипулируемые верхние границы переменной скорости[] (по умолчанию) | вектор строки | матрицаВерхние границы манипулируемой переменной скорости, заданные как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVRateMax(:,i) заменяет ManipulatedVariables(i).RateMax свойства контроллера во время выполнения. MVRateMax границы должны быть неотрицательными.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
StateMin - Нижние границы состояния[] (по умолчанию) | вектор строки | матрицаНижние границы состояния, заданные как вектор строки длиной Nx или матрица со столбцами Nx, где Nx - число состояний. StateMin(:,i) заменяет States(i).Min свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменить границы по горизонту прогнозирования от времени k + 1 до времени k + p, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
StateMax - Верхние границы состояния[] (по умолчанию) | вектор строки | матрицаВерхние границы состояния, заданные как вектор строки длиной Nx или матрица со столбцами Nx, где Nx - число состояний. StateMax(:,i) заменяет States(i).Max свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменить границы по горизонту прогнозирования от времени k + 1 до времени k + p, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
StateFcnParameters - Значения параметров функции состояния[] (по умолчанию) | векторЗначения параметров функции состояния, заданные как вектор с длиной, равной значению Model.ParameterLength свойство объекта многоступенчатого контроллера. Если Model.StateFcn требуется вектор параметра, необходимо указать его значение во время выполнения с помощью этого поля. Если Model.ParameterLength является 0 это поле не существует в структуре, возвращенной getSimulationData.
StageFcnParameters - Значения параметров функции этапа[] (по умолчанию) | векторЗначения параметра Stage functions, заданные как вектор с длиной, равной сумме всех значений в Stages(i).ParameterLength свойства объекта многоступенчатого контроллера. Если какая-либо функция затрат или ограничений определена в Stages свойство нуждается в векторе параметров, с помощью этого поля необходимо предоставить все векторы параметров во время выполнения (сгруппированные в один столбец). Если ни одна из функций этапа не имеет параметра, это поле не существует в структуре, возвращаемой getSimulationData.
Векторы параметров для всех ступеней должны располагаться в векторе столбца StateFcnParameters как:
[parameter vector for stage 1; parameter vector for stage 2; ... parameter vector for stage p+1; ]
TerminalState - Состояние терминала[] (по умолчанию) | векторТерминальное состояние, указанное как вектор столбца с таким количеством элементов, как количество состояний. Терминальное состояние является требуемым состоянием на последнем этапе прогнозирования. Чтобы указать требуемые состояния терминала во время выполнения с помощью этого поля, необходимо указать конечные значения в TerminalState области Model имущество nlmpcMSobj. Определить inf для состояний, которые не должны быть ограничены значением клеммы. Во время выполнения, nlmpcmove игнорирует любые значения в TerminalState поле simdata которые соответствуют inf значения в nlmpcMSobj. Если не указано условие значения клеммы в nlmpcMSobj, это поле не создано в simdata.
Если нет TerminalState в simdata то ограничение состояния терминала (если присутствует) не изменяется во время выполнения.
InitialGuess - Начальные догадки для переменных принятия решения[] (по умолчанию) | векторНачальные догадки для переменных решения, заданных как вектор столбца длиной, равной сумме длин всех векторов переменных решения для каждого этапа. Хорошие начальные догадки важны, поскольку они помогают решателю быстрее прийти к решению. При моделировании контура управления путем вызова nlmpcmove повторно в цикле, поэтому важно пройти simdata в качестве входного аргумента (так можно использовать начальные догадки), а заодно вернуть обновленную версию simdata (с новыми начальными догадками для следующего интервала управления), в качестве выходного аргумента.
Начальные догадки для всех этапов должны быть уложены в вектор столбца InitialGuess как:
[state vector guess for stage 1; manipulated variable vector guess for stage 1; manipulated variable vector rate guess for stage 1; % if used slack variable vector guess for stage 1; % if used state vector guess for stage 2; manipulated variable vector guess for stage 2; manipulated variable vector rate guess for stage 2; % if used slack variable vector guess for stage 2; % if used ... state vector guess for stage p; manipulated variable vector guess for stage p; manipulated variable vector rate guess for stage p; % if used slack variable vector guess for stage p; % if used state vector guess for stage p+1; slack variable vector guess for stage p+1; % if used ]
Если InitialGuess является [], начальные догадки по умолчанию вычисляются из x и lastmv аргументы, переданные nlmpcmove).
Как правило, при моделировании с замкнутым контуром не указывается InitialGuess себя. Вместо этого при вызове nlmpcmove, вернуть simdata выходной аргумент, содержащий вычисленные начальные догадки для следующего интервала управления. Затем вы можете пройти simdata в качестве входного аргумента для nlmpcmove для следующего интервала управления. Эти шаги являются оптимальными, даже если не указаны другие параметры времени выполнения.
mv - Оптимальное управляемое действие переменнойОптимальное управляющее действие манипулируемой переменной, возвращаемое в виде вектора столбца длиной Nmv, где Nmv - количество манипулируемых переменных.
Если решатель сходится к локальному оптимальному решению (info.ExitFlag является положительным), то mv содержит оптимальное решение.
Если решатель достигает максимального числа итераций без нахождения оптимального решения (info.ExitFlag = 0) и:
nlmpcobj.Optimization.UseSuboptimalSolution является true, то mv содержит неоптимальное решение
nlmpcobj.Optimization.UseSuboptimalSolution является false, то mv содержит lastmv
Если решатель не работает (info.ExitFlag отрицательный), то mv содержит lastmv.
opt - Параметры времени выполнения с исходными предположениямиnlmpcmoveopt объектОпции времени выполнения с начальными предположениями для состояния и регулируемых переменных траекторий, которые будут использоваться в следующем интервале управления, возвращаемые как nlmpcmoveopt объект. Любые параметры времени выполнения, указанные с помощью options, такие как веса, ограничения или параметры, копируются в opt.
Начальные догадки для состояний (opt.X0) и управляемые переменные (opt.MV0) являются оптимальными траекториями, вычисленными nlmpcmove и соответствуют последним строкам p-1 info.Xopt и info.MVoptсоответственно.
Чтобы использовать эти начальные догадки в следующем интервале управления, укажите opt в качестве options входной аргумент для nlmpcmove.
info - Сведения о решенииПодробные данные решения, возвращенные в виде структуры со следующими полями.
MVopt - Оптимальная управляемая последовательность переменныхОптимальная последовательность манипулируемых переменных, возвращаемая как массив (p + 1) -byNmv, где p - горизонт прогнозирования, а Nmv - количество манипулируемых переменных.
MVopt(i,:) содержит вычисленные оптимальные значения манипулируемых переменных в момент времени k+i-1, для i = 1,...,p, где k - текущее время. MVopt(1,:) содержит те же значения манипулируемой переменной, что и выходной аргумент mv. Поскольку контроллер не вычисляет оптимальные перемещения управления в момент времени k+p, MVopt(p+1,:) равно MVopt(p,:).
Xopt - Оптимальная последовательность состояний модели прогнозированияОптимальная последовательность состояний модели прогнозирования, возвращаемая как массив (p + 1) -byNx, где p - горизонт прогнозирования, а Nx - количество состояний в модели прогнозирования.
Xopt(i,:) содержит вычисленные значения состояния в момент времени k+i-1, для i = 2,...,p+1, где k - текущее время. Xopt(1,:) совпадает с текущими состояниями в x.
Yopt - Оптимальная последовательность выходных переменныхОптимальная последовательность выходных переменных, возвращаемая как массив (p + 1) -by-Ny, где p - горизонт прогнозирования, а Ny - количество выходов.
Yopt(i,:) содержит вычисленные выходные значения в момент времени k+i-1, для i = 2,...,p+1, где k - текущее время. Yopt(1,:) вычисляется на основе текущих состояний в x и ток измеренных возмущений в md, если есть.
Topt - Последовательность времени горизонта прогнозированияВременная последовательность горизонта прогнозирования, возвращаемая как вектор столбца длиной p + 1, где p - горизонт прогнозирования.Topt содержит временную последовательность от времени k до времени k + p, где k - текущее время.
Topt(1) = 0 представляет текущее время. Последующие шаги времени Topt(i) являются Ts*(i-1), где Ts - время выборки контроллера.
Использовать Topt при печати MVopt, Xopt, или Yopt последовательности.
Slack - Вектор сложенных переменных слабостиВектор сложенных переменных ослабления, используемый при смягчении ограничений. Если все элементы равны нулю, то все мягкие ограничения удовлетворяются по всему горизонту прогнозирования. Если какой-либо элемент больше нуля, нарушается хотя бы одно мягкое ограничение.
Переменный вектор провисания для всех стадий складывается как:
[slack variable vector for stage 1; % if used slack variable vector for stage 2; % if used ... slack variable vector for stage p+1; % if used ]
ExitFlag - Код выхода из оптимизацииКод завершения оптимизации, возвращаемый как один из следующих:
Положительное целое число - найдено оптимальное решение
0 - выполнимое неоптимальное решение, найденное после максимального числа итераций;
Отрицательное целое число - выполнимое решение не найдено
Iterations - количество итераций;Число итераций, используемых решателем нелинейного программирования, возвращаемое как положительное целое число.
Cost - Стоимость целевой функцииСтоимость целевой функции, возвращаемая как неотрицательное скалярное значение. Стоимость количественно определяет степень достижения контролером своих целей.
Значение стоимости имеет значение только тогда, когда ExitFlag является неотрицательным.
simdata - Структура данных моделирования во время выполненияОбновленные данные моделирования во время выполнения, содержащие новые начальные догадки для состояния и управляемые траектории, которые будут использоваться в следующем интервале управления. Это структура со следующими полями.
MeasuredDisturbance - Измеренные значения возмущений[] (по умолчанию) | вектор строки | массивИзмеренные значения возмущений, определенные как вектор строки длиной Nmd или матрица со столбцами Nmd, где Nmd - количество измеренных возмущений. Если для многоступенчатого объекта MPC определен какой-либо измеренный канал возмущения, необходимо указать MeasuredDisturbance. Если контроллер не имеет измеренных возмущений, это поле не существует в структуре, созданной getSimulationData.
Чтобы использовать одни и те же значения возмущений в горизонте прогнозирования, укажите вектор строки.
Чтобы изменять значения возмущений по горизонту прогнозирования от времени k до времени k + p, укажите массив, содержащий до p + 1 строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит значения возмущений для одного шага горизонта прогнозирования. Если указано меньше p строк, значения в последней строке используются для оставшихся шагов горизонта прогнозирования.
MVMin - Манипулируемые переменные нижние границы[] (по умолчанию) | вектор строки | матрицаНижние границы манипулируемой переменной, задаваемые как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVMin(:,i) заменяет ManipulatedVariables(i).Min свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
MVMax - Манипулируемые переменные верхние границы[] (по умолчанию) | вектор строки | матрицаВерхние границы манипулируемых переменных, заданные как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVMax(:,i) заменяет ManipulatedVariables(i).Max свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
MVRateMin - Манипулируемые нижние границы переменной скорости[] (по умолчанию) | вектор строки | матрицаНижние границы манипулируемой переменной скорости, заданные как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVRateMin(:,i) заменяет ManipulatedVariables(i).RateMin свойства контроллера во время выполнения. MVRateMin границы должны быть непозволительными.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
MVRateMax - Манипулируемые верхние границы переменной скорости[] (по умолчанию) | вектор строки | матрицаВерхние границы манипулируемой переменной скорости, заданные как вектор строки длиной Nmv или матрица со столбцами Nmv, где Nmv - количество манипулируемых переменных. MVRateMax(:,i) заменяет ManipulatedVariables(i).RateMax свойства контроллера во время выполнения. MVRateMax границы должны быть неотрицательными.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменять границы по горизонту прогнозирования от времени k до времени k + p-1, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
StateMin - Нижние границы состояния[] (по умолчанию) | вектор строки | матрицаНижние границы состояния, заданные как вектор строки длиной Nx или матрица со столбцами Nx, где Nx - число состояний. StateMin(:,i) заменяет States(i).Min свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменить границы по горизонту прогнозирования от времени k + 1 до времени k + p, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
StateMax - Верхние границы состояния[] (по умолчанию) | вектор строки | матрицаВерхние границы состояния, заданные как вектор строки длиной Nx или матрица со столбцами Nx, где Nx - число состояний. StateMax(:,i) заменяет States(i).Max свойства контроллера во время выполнения.
Чтобы использовать те же границы по горизонту прогнозирования, укажите вектор строки.
Чтобы изменить границы по горизонту прогнозирования от времени k + 1 до времени k + p, укажите матрицу, содержащую до p строк. Здесь k - текущее время, а p - горизонт прогнозирования. Каждая строка содержит границы для одного шага горизонта прогнозирования. Если указано меньше p строк, конечные границы используются для оставшихся шагов горизонта прогнозирования.
StateFcnParameters - Значения параметров функции состояния[] (по умолчанию) | векторЗначения параметров функции состояния, заданные как вектор с длиной, равной значению Model.ParameterLength свойство объекта многоступенчатого контроллера. Если Model.StateFcn требуется вектор параметра, необходимо указать его значение во время выполнения с помощью этого поля. Если Model.ParameterLength является 0 это поле не существует в структуре, возвращенной getSimulationData.
StageFcnParameters - Значения параметров функции этапа[] (по умолчанию) | векторЗначения параметра Stage functions, заданные как вектор с длиной, равной сумме всех значений в Stages(i).ParameterLength свойства объекта многоступенчатого контроллера. Если какая-либо функция затрат или ограничений определена в Stages свойство нуждается в векторе параметров, с помощью этого поля необходимо предоставить все векторы параметров во время выполнения (сгруппированные в один столбец). Если ни одна из функций этапа не имеет параметра, это поле не существует в структуре, возвращаемой getSimulationData.
Векторы параметров для всех ступеней должны располагаться в векторе столбца StateFcnParameters как:
[parameter vector for stage 1; parameter vector for stage 2; ... parameter vector for stage p+1; ]
TerminalState - Состояние терминала[] (по умолчанию) | векторТерминальное состояние, указанное как вектор столбца с таким количеством элементов, как количество состояний. Терминальное состояние является требуемым состоянием на последнем этапе прогнозирования. Чтобы указать требуемые состояния терминала во время выполнения с помощью этого поля, необходимо указать конечные значения в TerminalState области Model имущество nlmpcMSobj. Определить inf для состояний, которые не должны быть ограничены значением клеммы. Во время выполнения, nlmpcmove игнорирует любые значения в TerminalState поле simdata которые соответствуют inf значения в nlmpcMSobj. Если не указано условие значения клеммы в nlmpcMSobj, это поле не создано в simdata.
Если нет TerminalState в simdata то ограничение состояния терминала (если присутствует) не изменяется во время выполнения.
InitialGuess - Начальные догадки для переменных принятия решения[] (по умолчанию) | векторНачальные догадки для переменных решения, заданных как вектор столбца длиной, равной сумме длин всех векторов переменных решения для каждого этапа. Хорошие начальные догадки важны, поскольку они помогают решателю быстрее прийти к решению. При моделировании контура управления путем вызова nlmpcmove повторно в цикле, поэтому важно пройти simdata в качестве входного аргумента (так можно использовать начальные догадки), а заодно вернуть обновленную версию simdata (с новыми начальными догадками для следующего интервала управления), в качестве выходного аргумента.
Начальные догадки для всех этапов должны быть уложены в вектор столбца InitialGuess как:
[state vector guess for stage 1; manipulated variable vector guess for stage 1; manipulated variable vector rate guess for stage 1; % if used slack variable vector guess for stage 1; % if used state vector guess for stage 2; manipulated variable vector guess for stage 2; manipulated variable vector rate guess for stage 2; % if used slack variable vector guess for stage 2; % if used ... state vector guess for stage p; manipulated variable vector guess for stage p; manipulated variable vector rate guess for stage p; % if used slack variable vector guess for stage p; % if used state vector guess for stage p+1; slack variable vector guess for stage p+1; % if used ]
Если InitialGuess является [], начальные догадки по умолчанию вычисляются из x и lastmv аргументы, переданные nlmpcmove).
Как правило, при моделировании с замкнутым контуром не указывается InitialGuess себя. Вместо этого при вызове nlmpcmove, вернуть simdata выходной аргумент, содержащий вычисленные начальные догадки для следующего интервала управления. Затем вы можете пройти simdata в качестве входного аргумента для nlmpcmove для следующего интервала управления. Эти шаги являются оптимальными, даже если не указаны другие параметры времени выполнения.
Во время моделирования с замкнутым контуром рекомендуется разогреть запуск нелинейного решателя, используя предсказанное состояние и управляемые переменные траектории из предыдущего интервала управления в качестве начальных предположений для текущего интервала управления. Чтобы использовать эти траектории в качестве начальных предположений:
Вернуть opt выходной аргумент при вызове nlmpcmove. Это nlmpcmoveopt объект содержит любые параметры времени выполнения, указанные при предыдущем вызове nlmpcmove, наряду с начальными догадками для государства (opt.X0) и управляемая переменная (opt.MV0) траектории.
Передать этот объект как options входной аргумент для nlmpcmove для следующего интервала управления.
Эти шаги являются оптимальными, даже если не указаны другие параметры времени выполнения.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.