Установившаяся симуляция с основанным на проекции оптимизатором для обрезки

В этом примере показано, как найти установившуюся рабочую точку для модели Simscape™ Multibody™ с помощью findop функция с основанным на проекции оптимизатором.

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

Открытая модель

Модель для этого примера является системой экскаватора типа обратная лопата, смоделированной в Simscape Multibody.

Откройте модель Simulink.

mdl = 'scdbackhoeTRIM';
open_system(mdl)

Задайте технические требования рабочей точки

Чтобы задать технические требования рабочей точки, сначала создайте объект спецификации. Вход, выход и значения состояния в ops совпадайте с начальными условиями модели.

opspec = operspec(mdl);

Укажите, что выходные параметры модели являются известными значениями для обрезки.

opspec.Outputs(1).Known = true(10,1);

Задайте известные значения для углов в системе экскаватора типа обратная лопата.

opspec.Outputs(1).y(1) = 0;    % Bucket angle
opspec.Outputs(1).y(3) = 50;   % Upper angle
opspec.Outputs(1).y(5) = -50;  % Lower angle
opspec.Outputs(1).y(7) = 0;    % Base angle
opspec.Outputs(1).y(9) = -45;  % Support angle

Для соответствующих скоростей вращения известные значения являются нулем, которые совпадают с начальными условиями модели в opspec.

Модель для обрезки

Создайте набор опции для обрезки и задайте тип оптимизатора с помощью OptimizerType опция. Поскольку этот пример использует основанный на проекции решатель градиентного спуска. Чтобы просмотреть итеративное обновление прогресса обрезки в Командном окне, установите DisplayReport опция к 'iter'.

opt = findopOptions('OptimizerType','graddescent-proj',...
                    'DisplayReport','iter');

Задайте максимальное количество вычислений функции для оптимизации.

opt.OptimizationOptions.MaxFunEvals = 20000;

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

op = findop(mdl,opspec,opt);
Optimizing to solve for all desired dx/dt=0, x(k+1)-x(k)=0, and y=ydes.
 
(Maximum Error)  Block
 ---------------------------------------------------------
(4.50000e+01) scdbackhoeTRIM/Out1
(3.54436e+00) scdbackhoeTRIM/Out1
(2.29690e-01) scdbackhoeTRIM/Out1
(3.84952e-02) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Right/Revolute Joint  Arm
(9.31982e-03) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Right/Revolute Joint  Arm
(7.25861e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(6.61699e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(8.93141e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(1.41364e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(9.73877e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate
(1.01718e-06) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Right/Revolute Joint  Arm
(1.04643e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate
(5.67263e-08) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate
(5.67263e-08) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate

Operating point specifications were successfully met.

Модель симулируется

Сконфигурируйте модель, чтобы использовать вычисленную рабочую точку op как начальное условие модели.

set_param(mdl,'LoadExternalInput','on')
set_param(mdl,'ExternalInput','getinputstruct(op)')
set_param(mdl,'LoadInitialState','on')
set_param(mdl,'InitialState','getstatestruct(op)')

Симулируйте модель.

sim(mdl);

Просмотрите траектории угла поворота шарнира.

open_system([mdl, '/Joint Angle Trajectories'])

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

Смотрите также

Функции

Похожие темы