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