lsqnonlin с моделью Simulink ®В этом примере показано, как настроить параметры модели Simulink. Модель, optsim, включен в optim/demos папки установки MATLAB ®. Модель включает нелинейную технологическую установку, смоделированную как блок-схема Simulink.

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

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

Модель с замкнутым контуром
Для решения этой проблемы минимизируйте ошибку между выходом и входным сигналом. (Напротив, в примере Использование fminimax с моделью Simulink ® решение включает минимизацию максимального значения выходного сигнала.) Переменные являются параметрами контроллера пропорциональной интегральной производной (PID). Если необходимо минимизировать ошибку только за одну единицу времени, у вас будет скалярная целевая функция. Но цель состоит в том, чтобы минимизировать ошибку для всех временных шагов от 0 до 100, таким образом создавая мультиобъективную функцию (по одной функции для каждого временного шага).
Использовать lsqnonlin для выполнения наименьших квадратов при отслеживании выходного сигнала. Отслеживание выполняется функцией tracklsq, которая вложена в runtracklsq в конце этого примера. tracklsq возвращает сигнал ошибки yout, выходные данные, вычисленные путем вызова sim, минус входной сигнал 1.
Функция runtracklsq устанавливает все требуемые значения и затем вызывает lsqnonlin с целевой функцией tracklsq. Переменная 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 для выполнения моделирования в текущей рабочей области. runtracklsq запускает моделирование до 100 секунд.
По завершении моделирования runtracklsq создает myobj объект в текущей рабочей области (то есть рабочая область tracklsq). Блок Outport в модели блок-схемы помещает yout поле объекта в текущей рабочей области в конце моделирования.
При выполнении runtracklsq, оптимизация дает решение для пропорциональной, интегральной и производной (Kp, Ki, Kd) усиления контроллера.
[Kp, Ki, Kd] = runtracklsq
Kp = 3.1330
Ki = 0.1465
Kd = 14.3918
Область действия показывает оптимизированный отклик шага с замкнутым контуром.

Реакция с замкнутым контуром после lsqnonlin
Примечание: Вызов sim приводит к вызову одного из решателей обыкновенного дифференциального уравнения Симулинка (ОДУ). Необходимо выбрать тип решателя. С точки зрения оптимизации решатель ОДУ с фиксированным шагом является наилучшим выбором, если его достаточно для решения ОДУ. Однако в случае жесткой системы для решения ОДУ может потребоваться способ ОДУ с переменным шагом.
Численное решение, полученное решателем с переменным шагом, однако, не является плавной функцией параметров из-за механизмов управления размером шага. Это отсутствие гладкости может предотвратить сходимость процедуры оптимизации. Отсутствие сглаживания не является проблемой при использовании решателя с фиксированным шагом. (Дополнительные пояснения см. в [53].)
Программное обеспечение Simulink Design Optimization™ рекомендуется для решения задач многообъективной оптимизации совместно с решателями переменных шагов Simulink. Это программное обеспечение обеспечивает специальный числовой градиентный расчет, который работает с Simulink и позволяет избежать возникновения проблемы отсутствия гладкости.
Следующий код создает runtracklsq функция помощника.
function [Kp,Ki,Kd] = runtracklsq % RUNTRACKLSQ demonstrates using LSQNONLIN with Simulink. mdl = 'optsim'; open_system(mdl) % Load the model in = Simulink.SimulationInput(mdl); % Create simulation input object in = in.setModelParameter('StopTime','100'); % Stop time 100 pid0 = [0.63 0.0504 1.9688]; % Initial gain values a1 = 3; a2 = 43; % Initialize model plant variables options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt',... 'Display','off','StepTolerance',0.001,'OptimalityTolerance',0.001); % Optimize the gains set_param(mdl,'FastRestart','on'); % Fast restart pid = lsqnonlin(@tracklsq,pid0,[],[],options); set_param(mdl,'FastRestart','off'); % Return the gains Kp = pid(1); Ki = pid(2); Kd = pid(3); function F = tracklsq(pid) % Track the output of optsim to a signal of 1 % Set the simulation input object parameters in = in.setVariable('Kp',pid(1),'Workspace',mdl); in = in.setVariable('Ki',pid(2),'Workspace',mdl); in = in.setVariable('Kd',pid(3),'Workspace',mdl); % Simulate out = sim(in); F = out.get('yout') - 1; end end
Авторское право 2019-2020 The MathWorks, Inc.