nlmpcMultistage

Многоступенчатый прогнозирующий контроллер нелинейной модели

Описание

Многоступенчатый нелинейный прогнозирующий контроллер модели вычисляет оптимальные перемещения управления через горизонт предсказания p используя нелинейную модель предсказания. Этапы включают текущие k времени и все шаги предсказания (от k + 1 до k + p). На каждом этапе могут быть заданы различные функции затрат и ограничений. Эти функции зависят только от информации о объекте, такой как состояния и входы, доступные на этом этапе. Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.

Создание

Описание

пример

nlobj = nlmpcMultistage(p,nx,nu) создает nlmpcMultistage объект с горизонтом предсказания p, и чья модель предсказания имеет nx состояния, и nu входы, и где все входы являются управляемыми переменными. Используйте этот синтаксис, если ваша модель не имеет измеренных или не измеренных входов нарушения порядка.

пример

nlobj = nlmpcMultistage(p,nx,'MV',mvIndex,'MD',mdIndex) создает nlmpcMultistage объект, чья модель предсказания имеет измеренные входы нарушения порядка. Задайте входные индексы для манипулируемых переменных, mvIndexи измеренные нарушения порядка, mdIndex.

пример

nlobj = nlmpcMultistage(p,nx,'MV',mvIndex,'UD',udIndex) создает nlmpcMultistage объект, чья модель предсказания имеет неизмеренные входы нарушения порядка. Задайте входные индексы для манипулируемых переменных, mvIndexи неизмеренные нарушения порядка, udIndex.

пример

nlobj = nlmpcMultistage(p,nx,'MV',mvIndex,'MD',mdIndex,'UD',udIndex) создает nlmpcMultistage объект, чья модель предсказания имеет как измеренные, так и неизмеренные входы нарушения порядка. Задайте входные индексы для манипулируемых переменных, измеренных нарушений порядка и неизмеренных нарушений порядка.

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

расширить все

Количество шагов горизонта предсказания, заданное как положительное целое число. Этот синтаксис устанавливает свойство только для чтения PredictionHorizon равен входной параметр p. Поскольку это свойство доступно только для чтения, вы не можете изменить его после создания объекта контроллера. Обратите внимание, что p также определяет количество каскадов (p+1).

Количество состояний модели предсказания, заданное как положительное целое число. Это значение сохранено в Dimensions.NumberOfStates свойство только для чтения контроллера. Вы не можете изменить количество состояний после создания объекта контроллера.

Количество входов модели предсказания, которые все заданы как управляемые переменные, заданное в виде положительного целого числа. Это значение сохранено в Dimensions.NumberOfInputs свойство только для чтения контроллера. Вы не можете изменить количество манипулируемых переменных после создания объекта контроллера.

Манипулируемые индексы переменных, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение сохранено в Dimensions.MVIndex свойство контроллера.

Объединенный набор индексов из mvIndex, mdIndex, и udIndex должны содержать все целые числа от 1 через Nu, где Nu - количество входов модели предсказания.

Измеренные индексы нарушения порядка, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение сохранено в Dimensions.MDIndex свойство контроллера.

Объединенный набор индексов из mvIndex, mdIndex, и udIndex должны содержать все целые числа от 1 через Nu, где Nu - количество входов модели предсказания.

Неизмеренные индексы нарушения порядка, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение сохранено в Dimensions.UDIndex свойство контроллера.

Объединенный набор индексов из mvIndex, mdIndex, и udIndex должны содержать все целые числа от 1 через Nu, где Nu - количество входов модели предсказания.

Свойства

расширить все

Модель предсказания шага расчета, заданная как положительный конечный скаляр. Контроллер использует модель в дискретном времени со шаг расчета Ts для предсказания. Если вы задаете модель предсказания в непрерывном времени (Model.IsContinuousTime является true), затем контроллер дискретизирует модель с помощью встроенного неявного метода трапеций с шагом расчета Ts.

Это свойство доступно только для чтения.

Шаги горизонта предсказания, заданные как положительное целое число только для чтения. Область продукта PredictionHorizon и Ts - время предсказания; то есть как далеко контроллер смотрит в будущее.

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

  • Необходимо задать жесткие верхние или нижние границы скорости СН.

  • Ставка MV появляется как термин в функции затрат или ограничений на любом этапе.

  • Вам нужно реализовать блочные ходы (которые вы можете сделать это путем установки RateMin и RateMax ограничения на соответствующих этапах равны нулю)

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

Это свойство доступно только для чтения.

Размерная информация модели предсказания, заданная когда контроллер создан и сохранен как структура со следующими полями.

Это свойство доступно только для чтения.

Количество состояний в модели предсказания, заданное как положительное целое число. Это значение соответствует nx.

Это свойство доступно только для чтения.

Количество входов в модели предсказания, заданное в виде положительного целого числа. Это значение соответствует любому из nmv или сумму длин mvIndex, mdIndex, и udIndex.

Это свойство доступно только для чтения.

Манипулируемые индексы переменных для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует mvIndex.

Это свойство доступно только для чтения.

Измеренные индексы нарушения порядка для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует mdIndex.

Это свойство доступно только для чтения.

Неизмеренные индексы нарушения порядка для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует udIndex.

Модель предсказания, заданная как структура со следующими полями.

Функция состояния, заданная как строка, вектор символов или указатель на функцию. Для модели предсказания в непрерывном времени, StateFcn - производная от состояния функция. Для модели предсказания в дискретном времени, StateFcn - функция обновления состояния.

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

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

Вы можете задать свою функцию состояния одним из следующих способов:

  • Имя функции в текущей рабочей папке или в MATLAB® путь, заданный как строковый или символьный вектор

    Model.StateFcn = "myStateFunction";
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Model.StateFcn = @myStateFunction;

Функция состояния должна иметь следующие входные и выходные параметры:

if Model.ParameterLength>0
     out = myStateFunction(x,u,pm);
else
     out = myStateFunction(x,u);
end

где x - вектор состояния, u - вектор входа, и pm является вектором параметра модели. Если IsContinuousTime тогда верно out должно быть значением производной состояния относительно времени, в противном случае это должно быть значение состояния в следующем временном интервале.

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

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

Можно задать выходную функцию одним из следующих способов:

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Model.StateJacFcn = "myStateJacFunction";
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Model.StateJacFcn = @myStateJacFunction;

Якобианская функция состояния должна иметь следующие входные и выходные параметры:

if Model.ParameterLength>0
     [A,Bmv] = myStateJacFunction(x,u,pm);
else
     [A,Bmv] = myStateJacFunction(x,u);
end

где x - вектор состояния, u - вектор входа, и pm является вектором параметра модели. A является якобианом функции состояния (непрерывное или дискретное время) относительно вектора состояния и B якобиан функции состояния относительно манипулируемого вектора переменной. A - квадратная матрица с Nx строками и столбцами, где Nx - количество состояний (Dimensions.NumberOfStates). Bmv должно иметь Nx строки и Nmv столбцов, где Nmv количество манипулируемых переменных.

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

Флаг, указывающий временной интервал модели предсказания, заданный как один из следующих:

  • true - Модель предсказания в непрерывном времени. В этом случае контроллер автоматически дискретизирует модель во время предсказания, используя Ts.

  • false - Модель предсказания в дискретном времени. В этом случае Ts - шаг расчета модели.

Примечание

Если IsContinuousTime является true, StateFcn должен вернуть производную состояния относительно времени, в текущее время. В противном случае StateFcn необходимо вернуть состояние в следующий контрольный интервал.

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

Конечное состояние, заданная как вектор-столбец с таким количеством элементов, как количество состояний. Это конечное состояние является желаемым состоянием на последнем шаге предсказания. Если какие-либо состояния в векторе не имеют терминальных значений, задайте inf в соответствующих местах, чтобы оставить их значения терминалов свободными.

Значение по умолчанию этого свойства [], что означает, что никакое ограничение конечного состояния не применяется.

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

Жесткая нижняя граница состояния, заданная как скаляр или вектор. По умолчанию эта нижняя граница -Inf.

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

Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.

Границы состояний всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).

Жесткая верхняя граница состояния, заданная как скаляр или вектор. По умолчанию эта верхняя граница Inf.

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

Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.

Границы состояний всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).

Имя состояния, заданное как строковый или символьный вектор. Имя состояния по умолчанию "x#", где # - его индекс состояния.

Модули измерения состояния, заданные как строковый или символьный вектор.

Информация и жесткие границы Манипулированной Переменной (MV), заданные как массив структур с Nmv элементами, где Nmv - количество манипулированных переменных. Для доступа к этому свойству можно использовать псевдоним MV вместо ManipulatedVariables.

Каждый структурный элемент имеет следующие поля.

MV жесткая нижняя граница, заданная как скаляр или вектор. По умолчанию эта нижняя граница -Inf.

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

Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.

Ограничения СН всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).

MV жесткая верхняя граница, заданная как скаляр или вектор. По умолчанию эта верхняя граница Inf.

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

Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.

Ограничения СН всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).

Скорость изменения MV жесткая нижняя граница, заданная как непозитивный скаляр или вектор. Скорость изменения СН на этапе i определяется как MV (i) - MV (i-1). По умолчанию эта нижняя граница -Inf. Если UseMVRate false это значение игнорируется.

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

Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.

Ограничения скорости MV всегда являются жесткими ограничениями. Используйте ограничение неравенства каскадов для реализации мягких границ (см. Этапы).

Скорость изменения MV жесткая верхняя граница, заданная в виде неотрицательного скаляра или вектора. Скорость изменения СН на этапе i определяется как MV (i) - MV (i-1). По умолчанию эта верхняя граница Inf.

Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение. Если UseMVRate false это значение игнорируется.

Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.

Ограничения скорости СН всегда являются жесткими ограничениями. Используйте ограничение неравенства каскадов для реализации мягких границ (см. Этапы).

Имя MV, заданное как строковый или символьный вектор. Имя MV по умолчанию "u#", где # является его входным индексом.

Модули измерения MV, заданные как строковый или символьный вектор.

Информация о измеренном нарушении порядка (MD), заданная как массив структур с Nmd элементами, где Nmd - количество измеренных нарушений порядка. Если ваша модель не имеет измеренных нарушений порядка, то MeasuredDisturbances является []. Для доступа к этому свойству можно использовать псевдоним MD вместо MeasuredDisturbances.

Каждый структурный элемент имеет следующие поля.

MD- имени, заданный как строка или вектор символов. Имя MD по умолчанию "u#", где # является его входным индексом.

MD- модулей, заданный как строка или вектор символов.

Поэтапные функции и функции ограничений, заданные как массив p+1 структуры (где p - горизонт предсказания), каждый с следующими полями.

Функция затрат на этапе i, (где i находится в диапазоне от 1 на p+1), заданный как указатель на строку, вектор символов или функцию. Общая функция затрат нелинейной задачи MPC является суммой функций затрат на каждом этапе.

Вы можете задать функцию стоимости этапа одним из следующих способов:

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Stages(i).CostFcn = 'myCostFunction';
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Stages(i).CostFcn = @myCostFunction;

В самом общем случае, в котором UseMVRate true, и то и другое Stages(i).ParameterLength и Stages(i).SlackVariableLength больше 0, функция затрат должна иметь следующие входные и выходные параметры:

Ji = myCostFunction(i,x,u,dmv,e,pv);

где

  • Ji - двойной скаляр, выражающий стоимость для этапа i.

  • i - номер этапа из 1 (текущий контрольный интервал), чтобы p+1 (конец горизонта предсказания).

  • x - вектор состояния.

  • u - вектор входа.

  • dmv - управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).

  • e - вектор переменной замедления каскада.

  • pv - вектор параметров каскада.

Если UseMVRate является false, затем dmv вход должен быть пропущен.

Если Stages(i).SlackVariableLength является 0 затем e вход должен быть пропущен.

Если Stages(i).ParameterLength является 0 затем pv вход должен быть пропущен.

В сводные данные:

if UseMVRate is true
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            Ji = myCostFunction(i,x,u,dmv,e,pv);
        else
            Ji = myCostFunction(i,x,u,dmv,e);
        end
    else
        if Stages(i).ParameterLength>0
            Ji = myCostFunction(i,x,u,dmv,pv);
        else
            Ji = myCostFunction(i,x,u,dmv);
        end
    end
else
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            Ji = myCostFunction(i,x,u,e,pv);
        else
            Ji = myCostFunction(i,x,u,e);
        end
    else
        if Stages(i).ParameterLength>0
            Ji = myCostFunction(i,x,u,pv);
        else
            Ji = myCostFunction(i,x,u);
        end
    end
end

Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).CostFcn и что все функции имеют необходимое количество входов и выходов в необходимом порядке.

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

Градиент функции затрат на этапе i, (где i находится в диапазоне от 1 на p+1), заданный как указатель на строку, вектор символов или функцию. Лучшая практика использовать якобианы (в данном случае градиенты) всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.

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

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Stages(i).CostJacFcn = 'myCostJacFunction';
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Stages(i).CostJacFcn = @myCostJacFunction;

В самом общем случае, в котором UseMVRate true, и то и другое Stages(i).ParameterLength и Stages(i).SlackVariableLength больше 0функция градиента стоимости каскада должна иметь следующие входные и выходные параметры:

[Gx,Gmv,Gdmv,Ge] = myCostJacFunction(i,x,u,dmv,e,pv);

где

  • Gx - градиент функции стоимости для этапа i относительно вектора состояний x. Это должен быть вектор-столбец с Nx элементами, где Nx количество состояний.

  • Gmv - градиент функции затрат для этапа i относительно манипулируемого вектора переменной mv. Это должен быть вектор-столбец с Nmv элементами, где Nmv - количество манипулируемых переменных.

  • Gdmv - градиент функции затрат для этапа i относительно управляемого изменения вектора переменной dmv. Это должен быть вектор-столбец с Nmv элементами, где Nmv - количество манипулируемых переменных.

  • Ge - градиент функции затрат для этапа i относительно вектора переменной замедления каскада e. Это должен быть вектор-столбец с Ne элементами, где Ne количество переменных замедления каскада.

  • i - номер этапа из 1 (текущий контрольный интервал), чтобы p+1 (конец горизонта предсказания).

  • x - вектор состояния.

  • u - вектор входа.

  • dmv - управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).

  • e - вектор переменной замедления каскада.

  • pv - вектор параметров каскада.

Если UseMVRate является false, затем dmv вход и Gdmv выход должен быть пропущен.

Если Stages(i).SlackVariableLength является 0 затем e вход и Ge выход должен быть пропущен.

Если Stages(i).ParameterLength является 0 затем pv вход должен быть пропущен.

В сводные данные:

if UseMVRate is true
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            [Gx,Gmv,Gdmv,Ge] = myCostJacFunction(i,x,u,dmv,e,pv);
        else
            [Gx,Gmv,Gdmv,Ge] = myCostJacFunction(i,x,u,dmv,e);
        end
    else
        if Stages(i).ParameterLength>0
            [Gx,Gmv,Gdmv] = myCostJacFunction(i,x,u,dmv,pv);
        else
            [Gx,Gmv,Gdmv] = myCostJacFunction(i,x,u,dmv);
        end
    end
else
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            [Gx,Gmv,Ge] = myCostJacFunction(i,x,u,e,pv);
        else
            [Gx,Gmv,Ge] = myCostJacFunction(i,x,u,e);
        end
    else
        if Stages(i).ParameterLength>0
            [Gx,Gmv] = myCostJacFunction(i,x,u,pv);
        else
            [Gx,Gmv] = myCostJacFunction(i,x,u);
        end
    end
end

Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).CostJacFcn и что все функции имеют необходимое количество входов и выходов в необходимом порядке.

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

Функция ограничения равенства на этапе i, (где i находится в диапазоне от 1 на p), заданный как указатель на строку, вектор символов или функцию. Обратите внимание, что установка ограничения равенства для последнего этапа (p+ 1) не поддерживается. Используйте TerminalState поле Model вместо этого свойство.

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

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Stages(i).EqConFcn = 'myEqConFunction';
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Stages(i).EqConFcn = @myEqConFunction;

В самом общем случае, в котором UseMVRate true, и Stages(i).ParameterLength больше 0, функция ограничения равенства должна иметь следующие входные и выходные параметры:

Ceq = myEqConFunction(i,x,u,dmv,pv);

где

  • Ceq является вектором, выражающим ограничения равенства для этапа i. При любом возможном решении задачи MPC возвращенный Ceq должно быть равно 0. Обратите внимание, что количество элементов в Ceq должно быть меньше, чем количество манипулируемых переменных, в противном случае задача переопределена и обычно недопустима.

  • i - номер этапа из 1 (текущий контрольный интервал), чтобы p+1 (конец горизонта предсказания).

  • x - вектор состояния.

  • u - вектор входа.

  • dmv - управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).

  • pv - вектор параметров каскада.

Если UseMVRate является false, затем dmv вход должен быть пропущен.

Если Stages(i).ParameterLength является 0 затем pv вход должен быть пропущен.

В сводных данных

if UseMVRate is true
        if Stages(i).ParameterLength>0
            Ceq = myEqConFunction(i,x,u,dmv,pv);
        else
            Ceq = myEqConFunction(i,x,u,dmv);
        end
else   
        if Stages(i).ParameterLength>0
            Ceq = myEqConFunction(i,x,u,pv);
        else
            Ceq = myEqConFunction(i,x,u);
        end
end

Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).EqConFcn и что все функции имеют необходимое количество входов и выходов в необходимом порядке.

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

Якобиан функции ограничения равенства на этапе i, (где i находится в диапазоне от 1 на p), заданный как указатель на строку, вектор символов или функцию. Обратите внимание, что установка ограничения равенства (и, следовательно, его якобианской функции) для последнего этапа (p+ 1) не поддерживается.

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

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

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Stages(i).EqConJacFcn = 'myEqConJacFunction';
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Stages(i).EqConJacFcn = @myEqConJacFunction;

В самом общем случае, в котором UseMVRate true, и Stages(i).ParameterLength больше 0, ограничивающая равенство якобианская функция должна иметь следующие входные и выходные параметры:

[Ceqx,Ceqmv,Ceqdmv] = myEqConJacFunction(i,x,u,dmv,pv);

где

  • Ceqx является якобианом функции ограничения равенства для стадии i, относительно вектора состояний x. Это должна быть матрица с NCeq строками и Nx столбцами, где NCeq - количество ограничений равенства каскадов и Nx количество состояний. Обратите внимание, что NCeq должно быть меньше, чем NCmv в противном случае проблема переопределена и обычно недопустима.

  • Ceqmv является якобианом функции ограничения равенства для стадии i, относительно манипулируемого вектора переменной mv. Это должна быть матрица с NCeq строками и Nmv столбцами, где NCeq - количество ограничений равенства каскадов и Nmv количество манипулируемых переменных.

  • Ceqdmv является якобианом функции ограничения равенства для стадии i, относительно манипулируемого изменения вектора переменной (скорости) dmv. Это должна быть матрица с NCeq строками и Nmv столбцами, где NCeq - количество ограничений равенства каскадов и Nmv количество манипулируемых переменных.

  • i - номер этапа из 1 (текущий контрольный интервал), чтобы p+1 (конец горизонта предсказания).

  • x - вектор состояния.

  • u - вектор входа.

  • dmv - управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).

  • pv - вектор параметров каскада.

Если UseMVRate является false, затем dmv вход и Ceqdmv выход должен быть пропущен.

Если Stages(i).ParameterLength является 0 затем pv вход должен быть пропущен.

В сводных данных

if UseMVRate is true
        if Stages(i).ParameterLength>0
            [Ceqx,Ceqmv,Ceqdmv] = myEqConJacFunction(i,x,u,dmv,pv);
        else
            [Ceqx,Ceqmv,Ceqdmv] = myEqConJacFunction(i,x,u,dmv);
        end
else   
        if Stages(i).ParameterLength>0
            [Ceqx,Ceqmv] = myEqConJacFunction(i,x,u,pv);
        else
            [Ceqx,Ceqmv] = myEqConJacFunction(i,x,u);
        end
end

Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).EqConJacFcn и что все функции имеют необходимое количество входов и выходов в необходимом порядке.

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

Функция ограничения неравенства на этапе i, (где i находится в диапазоне от 1 на p+1), заданный как указатель на строку, вектор символов или функцию.

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

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Stages(i).IneqConFcn = 'myIneqConFunction';
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Stages(i).IneqConFcn = @myIneqConFunction;

В самом общем случае, в котором UseMVRate true, и то и другое Stages(i).ParameterLength и Stages(i).SlackVariableLength больше 0Функция ограничения неравенства должна иметь следующие входные и выходные параметры:

C = myIneqConFunction(i,x,u,dmv,e,pv);

где

  • C является вектором, выражающим ограничения неравенства для этапа i. Для любого возможного решения задачи MPC, C не должно быть положительным.

  • i - номер этапа из 1 (текущий контрольный интервал), чтобы p+1 (конец горизонта предсказания).

  • x - вектор состояния.

  • u - вектор входа.

  • dmv - управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).

  • e - вектор переменной замедления каскада.

  • pv - вектор параметров каскада.

Если UseMVRate является false, затем dmv вход должен быть пропущен.

Если Stages(i).SlackVariableLength является 0 затем e вход должен быть пропущен.

Если Stages(i).ParameterLength является 0 затем pv вход должен быть пропущен.

В сводные данные:

if UseMVRate is true
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            C = myIneqConFunction(i,x,u,dmv,e,pv);
        else
            C = myIneqConFunction(i,x,u,dmv,e);
        end
    else
        if Stages(i).ParameterLength>0
            C = myIneqConFunction(i,x,u,dmv,pv);
        else
            C = myIneqConFunction(i,x,u,dmv);
        end
    end
else
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            C = myIneqConFunction(i,x,u,e,pv);
        else
            C = myIneqConFunction(i,x,u,e);
        end
    else
        if Stages(i).ParameterLength>0
            C = myIneqConFunction(i,x,u,pv);
        else
            C = myIneqConFunction(i,x,u);
        end
    end
end

Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).IneqConFcn и что все функции имеют необходимое количество входов и выходов в необходимом порядке.

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

Якобиан функции ограничения неравенства на стадии i, (где i находится в диапазоне от 1 на p+1), заданный как указатель на строку, вектор символов или функцию. Лучшую практику использовать якобиан всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.

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

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Stages(i).IneqConJacFcn = 'myIneqConJacFunction';
  • Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB

    Stages(i).IneqConJacFcn = @myIneqConJacFunction;

В самом общем случае, в котором UseMVRate true, и то и другое Stages(i).ParameterLength и Stages(i).SlackVariableLength больше 0, якобианская функция стоимости этапа должна иметь следующие входные и выходные параметры:

[Cx,Cmv,Cdmv,Ce] = myEqConJacFunction(i,x,u,dmv,e,pv);

где

  • Cx является якобианом функции ограничения неравенства для стадии i, относительно вектора состояний x. Это должна быть матрица с NC строками и Nx столбцами, где NC - количество ограничений неравенства каскадов и Nx количество состояний.

  • Cmv является якобианом функции ограничения неравенства для стадии i, относительно манипулируемого вектора переменной mv. Это должна быть матрица с NC строками и Nmv столбцами, где NC - количество ограничений неравенства каскадов и Nmv количество манипулируемых переменных.

  • Cdmv является якобианом функции ограничения неравенства для стадии i, относительно манипулируемого изменения переменной (скорости) dmv. Это должна быть матрица с NC строками и Nmv столбцами, где NC - количество ограничений неравенства каскадов и Nmv количество манипулируемых переменных.

  • Ce является якобианом функции ограничения неравенства для стадии i, относительно вектора переменной ослабления каскада e. Это должна быть матрица с NC строками и Ne столбцами, где NC - количество ограничений неравенства каскада и Ne количество переменных замедления каскада.

  • i - номер этапа из 1 (текущий контрольный интервал), чтобы p+1 (конец горизонта предсказания).

  • x - вектор состояния.

  • u - вектор входа.

  • dmv - управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).

  • e - вектор переменной замедления каскада.

  • pv - вектор параметров каскада.

Если UseMVRate является false, затем dmv вход и Cdmv выход должен быть пропущен.

Если Stages(i).SlackVariableLength является 0 затем e вход и Ce выход должен быть пропущен.

Если Stages(i).ParameterLength является 0 затем pv вход должен быть пропущен.

В сводные данные:

if UseMVRate is true
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            [Cx,Cmv,Cdmv,Ce] = myIneqConJacFunction(i,x,u,dmv,e,pv);
        else
            [Cx,Cmv,Cdmv,Ce] = myIneqConJacFunction(i,x,u,dmv,e);
        end
    else
        if Stages(i).ParameterLength>0
            [Cx,Cmv,Cdmv] = myIneqConJacFunction(i,x,u,dmv,pv);
        else
            [Cx,Cmv,Cdmv] = myIneqConJacFunction(i,x,u,dmv);
        end
    end
else
    if Stages(i).SlackVariableLength>0
        if Stages(i).ParameterLength>0
            [Cx,Cmv,Ce] = myIneqConJacFunction(i,x,u,e,pv);
        else
            [Cx,Cmv,Ce] = myIneqConJacFunction(i,x,u,e);
        end
    else
        if Stages(i).ParameterLength>0
            [Cx,Cmv] = myIneqConJacFunction(i,x,u,pv);
        else
            [Cx,Cmv] = myIneqConJacFunction(i,x,u);
        end
    end
end

Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).IneqConFcn и что все функции имеют необходимое количество входов и выходов в необходимом порядке.

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

Длина вектора переменной slack, используемой функциями cost и constraint на этапе i, заданный как неотрицательное целое число. Можно использовать переменные slack для реализации мягких ограничений для заданного этапа, используя соответствующую IneqConFcn и CostFcn функций.

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

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

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

  • Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор

    Optimization.CustomSolverFcn = "myNLPSolver";
  • Указатель на функцию в текущей рабочей папке или на пути MATLAB

    Optimization.CustomSolverFcn = @myNLPSolver;

Для получения дополнительной информации смотрите Сконфигурируйте решатель оптимизации для нелинейного MPC.

Опции решателя, заданные как объект опций для fmincon или [].

Если у вас есть программное обеспечение Optimization Toolbox, SolverOptions содержит объект опции для fmincon решатель.

Если у вас нет Optimization Toolbox, SolverOptions является [].

Для получения дополнительной информации смотрите Сконфигурируйте решатель оптимизации для нелинейного MPC.

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

  • Замораживает значения СН, если UseSuboptimalSolution является false

  • Применяет неоптимальное решение, найденное решателем после окончательной итерации, если UseSuboptimalSolution является true

Чтобы задать максимальное количество итераций, используйте Optimization.SolverOptions.MaxIter.

Коэффициент, используемый для вычисления размеров возмущений, применяемых к переменным принятия решений при использовании прямых конечных различий для оценки производных. Вектор размера возмущения для вектора переменной принятия решения z является PerturbationRatio*max(abs(z),1). Значение по умолчанию для этого параметра является 1e-6. Если ваша модель предсказания жесткая, а ваши условия стоимости/ограничения чувствительны, используйте меньшее значение, такое как 1e-8.

Функции объекта

nlmpcmoveВычислите оптимальное действие управления для нелинейного контроллера MPC
validateFcnsИсследуйте модель предсказания и пользовательские функции nlmpc или nlmpcMultistage объекты для потенциальных проблем
getSimulationDataСоздайте структуру данных, чтобы симулировать многоступенчатый контроллер MPC с nlmpcmove

Примеры

свернуть все

Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 5 шаги, 2 состояния, и 1 управляемая переменная.

nlobj = nlmpcMultistage(5,2,1);

Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 5 шаги, 2 состояния, и 2 входы, где первый вход является измеренными нарушениями порядка, а второй - манипулируемой переменной.

nlobj = nlmpcMultistage(5,2,'MV',2,'MD',1);

Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 5 шаги, 2 состояния, и 2 входы, где первый является манипулированной переменной, а второй - неизмеренным нарушением порядка.

nlobj = nlmpcMultistage(5,2,'MV',1,'UD',2);

Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 6 шаги, 3 состояния, и 4 входы, где первые два входных сигнала являются измеренными нарушениями порядка, третий является манипулированной переменной, а четвертый является неизмеренным нарушением порядка.

nlobj = nlmpcMultistage(6, 3, 'MV',3,'MD',[1 2],'UD',4);

Установите время дискретизации 2 секунд и отобразите nlobj объект

nlobj.Ts = 2
nlobj = 

  nlmpcMultistage with properties:

                      Ts: 2
       PredictionHorizon: 6
               UseMVRate: 0
              Dimensions: [1×1 struct]
                   Model: [1×1 struct]
                  States: [1×3 struct]
    ManipulatedVariables: [1×1 struct]
    MeasuredDisturbances: [1×2 struct]
                  Stages: [1×7 struct]
            Optimization: [1×1 struct]
Введенный в R2021a