lsqnonlin с Моделью Simulink

Предположим, что вы хотите оптимизировать параметры управления в модели optsim.mdl Simulink®. (Эта модель может быть найдена в папке optim/optimdemos. Обратите внимание на то, что Simulink должен быть установлен в вашей системе, чтобы загрузить эту модель.) Модель включает нелинейный обрабатывающий завод, смоделированный как Диаграмму Simulink.

Объект с насыщением привода

Объект под - ослабленная модель третьего порядка с пределами привода. Пределы привода являются пределом насыщения и пределом скорости просмотра. Предел насыщения привода отключает входные значения, больше, чем 2 модуля или меньше чем-2 модуля. Предел скорости просмотра привода является 0,8 модулями/секунда. Ответ с обратной связью системы к входу шага показывают в Ответе С обратной связью. Вы видите, этот ответ путем открытия модели (введите optsim в командной строке или кликните по имени модели), и при выборе Run из меню Simulation. Ответ строит к осциллографу.

Ответ с обратной связью

Проблема состоит в том, чтобы разработать цикл управления с обратной связью, который отслеживает модульный вход шага к системе. Объект с обратной связью вводится с точки зрения блоков, куда объект и привод были помещены в иерархический блок Subsystem. Блок Scope отображает выходные траектории во время процесса проектирования.

Модель с обратной связью

Один способ решить эту проблему состоит в том, чтобы минимизировать ошибку между выводом и входным сигналом. Переменные являются параметрами контроллера Пропорциональной интегральной производной (PID). Если бы только необходимо минимизировать ошибку когда-то модуль, это была бы одна целевая функция. Но цель состоит в том, чтобы минимизировать ошибку, навсегда продвигается от 0 до 100, таким образом производя многоцелевую функцию (одна функция для каждого временного шага).

Стандартный lsqnonlin используется, чтобы выполнить подгонку наименьших квадратов на отслеживании вывода. Отслеживание выполняется через функциональный tracklsq, который возвращает сигнал ошибки yout, вывод, вычисленный путем вызова sim, минус входной сигнал 1. Код для tracklsq содержится в файле runtracklsq.m, показанный ниже.

Функциональный runtracklsq настраивает все необходимые значения и затем вызывает lsqnonlin с целевой функцией tracklsq, который вкладывается в runtracklsq. Переменная options, переданная lsqnonlin, задает характеристики отображения и критерии. В этом случае вы просите вывод, используете алгоритм 'levenberg-marquardt' и даете допуски завершения к ступенчатой и целевой функции на порядке 0.001.

Чтобы запустить симуляцию в модели optsim, переменные Kp, Ki, Kd, a1 и a2 (a1 и a2 являются переменными в блоке Plant) должны все быть заданы. Kp, Ki и Kd являются переменными, которые будут оптимизированы. Функциональный tracklsq вкладывается в runtracklsq так, чтобы переменные a1 и a2 были совместно использованы двумя функциями. Переменные a1 и a2 инициализируются в runtracklsq.

Целевая функция tracklsq запускает симуляцию. Симуляция может быть запущена или в базовом рабочем пространстве или в текущей рабочей области, то есть, рабочей области функции, вызвав sim, который в этом случае является рабочей областью tracklsq. В этом примере опция SrcWorkspace собирается в 'Current' сказать sim запускать симуляцию в текущей рабочей области. Симуляция выполняется к секундам 100.

Когда симуляция завершается, объект myobj создается в текущей рабочей области (то есть, рабочей области tracklsq). Блок Outport в модели блок-схемы помещает поле yout объекта в текущую рабочую область в конце симуляции.

Следующее является кодом для runtracklsq:

function [Kp,Ki,Kd] = runtracklsq
% RUNTRACKLSQ demonstrates using LSQNONLIN with Simulink.

optsim                       % Load the model
pid0 = [0.63 0.0504 1.9688]; % Set initial values
a1 = 3; a2 = 43;             % Initialize model plant variables
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt',...
   'Display','off','StepTolerance',0.001,'OptimalityTolerance',0.001);
pid = lsqnonlin(@tracklsq, pid0, [], [], options);
Kp = pid(1); Ki = pid(2); Kd = pid(3); 

    function F = tracklsq(pid)
      % Track the output of optsim to a signal of 1
        
      % Variables a1 and a2 are needed by the model optsim.
      % They are shared with RUNTRACKLSQ so do not need to be
      % redefined here.
      Kp = pid(1);
      Ki = pid(2);
      Kd = pid(3);

      % Set sim options and compute function value
      myobj = sim('optsim','SrcWorkspace','Current', ...
          'StopTime','100');
      F = myobj.get('yout') - 1;
    end
end

Скопируйте код для runtracklsq в файл с именем runtracklsq.m, помещенный в папку на вашем пути MATLAB®.

Когда вы запускаете runtracklsq, оптимизация дает решение для пропорционального, интеграла и производной (Kp, Ki, Kd) усиления контроллера:

[Kp, Ki, Kd] = runtracklsq

Kp =
    3.1330

Ki =
    0.1465

Kd =
   14.3918

Вот получившийся переходной процесс с обратной связью.

Ответ с обратной связью Используя lsqnonlin

Примечание

Вызов sim приводит к вызову одного из решателей для обыкновенных дифференциальных уравнений (ОДУ) Simulink. Выбор должен быть сделан о типе решателя, чтобы использовать. С точки зрения оптимизации решатель фиксированного шага является лучшим выбором, если это достаточно, чтобы решить ОДУ. Однако в случае жесткой системы, метод переменного шага может потребоваться, чтобы решать ОДУ.

Числовое решение, произведенное решателем переменного шага, однако, не является сглаженной функцией параметров из-за механизмов управления неродного размера. Это отсутствие гладкости может препятствовать тому, чтобы стандартная программа оптимизации сходилась. Отсутствие гладкости не введено, когда решатель фиксированного шага используется. (Для дальнейшего объяснения см. [53].)

Программное обеспечение Simulink Design Optimization™ рекомендуется для решения многоцелевых задач оптимизации в сочетании с решателями переменного шага Simulink. Это обеспечивает специальное числовое вычисление градиента, которое работает с Simulink и старается не вводить проблему отсутствия гладкости.

Для просмотра документации необходимо авторизоваться на сайте