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 является количеством входных параметров модели предсказания.

Свойства

развернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Модель Prediction в виде структуры со следующими полями.

Функция состояния в виде строки, вектора символов или указателя на функцию. Для модели предсказания непрерывного времени, 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.

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

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

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

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

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

МВ твердая верхняя граница в виде скаляра или вектора. По умолчанию этой верхней границей является +Inf.

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

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

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

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

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

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

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

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

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

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

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

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

Модули мВ в виде строки или вектора символов.

Информация об измеренном воздействии (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 mustBeNonpositive.

  • 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

Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in 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

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

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

Длина слабого переменного вектора, используемого стоимостью и ограничением, функционирует на этапе iВ виде неотрицательного целого числа. Можно использовать слабые переменные, чтобы реализовать мягкие ограничения для данного этапа, с помощью соответствующего 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
Для просмотра документации необходимо авторизоваться на сайте