В этом примере показано, как усилить Parallel Computing Toolbox™, чтобы ускориться, мультизапускают стратегии настройки систем управления фиксированной структуры.
Оба systune
и looptune
используйте локальные методы оптимизации для настройки архитектуры управления под рукой. Чтобы снизить риск окончания с локально оптимальным, но глобально плохим проектом, рекомендуется запустить несколько оптимизации, начинающей с различных случайным образом сгенерированных начальных точек. Если вы имеете многожильную машину или имеете доступ к ресурсам распределенных вычислений, можно значительно ускорить этот процесс с помощью Parallel Computing Toolbox.
В этом примере показано, как параллелизировать настройку автопилота корпуса с looptune
. Смотрите, что пример "Настраивается Автопилота 2D Цикла" для получения дополнительной информации об этом приложении looptune
.
Динамика корпуса и автопилот моделируются в Simulink.
open_system('rct_airframe1')
Автопилот состоит из двух каскадных циклов, настраиваемые элементы которых включают два усиления ПИ-контроллера ("блок" Управления азимутом) и одно усиление в цикле уровня тангажа ("q Усиление" блок). Вертикальное ускорение az
должен отследить команду azref
с 1 вторым временем отклика. Используйте slTuner
чтобы сконфигурировать эту настраивающую задачу (см. "Настройку примера" Автопилота 2D Цикла для деталей):
ST0 = slTuner('rct_airframe1',{'az Control','q Gain'}); addPoint(ST0,{'az ref','delta fin','az','q'}) % Design requirements wc = [3,12]; % bandwidth TrackReq = TuningGoal.Tracking('az ref','az',1); % tracking
Мы готовы настроить усиления автопилота с looptune
. Чтобы минимизировать риск получения низкокачественного локального минимума, запустите 30 оптимизации, начинающей с 30 случайным образом сгенерированных значений трех усилений. Сконфигурируйте looptune
опции, чтобы включить параллельную обработку этих 30 запусков:
rng('default') Options = looptuneOptions('RandomStart',30,'UseParallel',true);
Затем вызовите looptune
запустить настраивающийся алгоритм. 30 запусков автоматически распределяются на доступных вычислительных ресурсах:
Controls = 'delta fin'; Measurements = {'az','q'}; [ST,gam,Info] = looptune(ST0,Controls,Measurements,wc,TrackReq,Options);
Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers. Final: Failed to enforce closed-loop stability (max Re(s) = 0.042) Final: Failed to enforce closed-loop stability (max Re(s) = 0.039) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.082) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Peak gain = 1.23, Iterations = 53 Final: Peak gain = 62, Iterations = 92 Some closed-loop poles are marginally stable (decay rate near 1e-07) Final: Peak gain = 62, Iterations = 128 Some closed-loop poles are marginally stable (decay rate near 1e-07) Final: Peak gain = 1.23, Iterations = 128 Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Peak gain = 1.23, Iterations = 130 Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.04) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.082) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Peak gain = 1.23, Iterations = 98 Final: Peak gain = 61.9, Iterations = 79 Final: Failed to enforce closed-loop stability (max Re(s) = 0.039) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.082) Final: Failed to enforce closed-loop stability (max Re(s) = 0.051) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Failed to enforce closed-loop stability (max Re(s) = 0.041) Final: Peak gain = 1.23, Iterations = 42
Большинство запусков возвращается 1.23 как оптимальное значение усиления, предполагая, что этот локальный минимум имеет широкую область привлекательности и, вероятно, будет глобальным оптимумом. Используйте showBlockValue
видеть соответствующие значения усиления:
showBlockValue(ST)
AnalysisPoints_ = D = u1 u2 u3 u4 y1 1 0 0 0 y2 0 1 0 0 y3 0 0 1 0 y4 0 0 0 1 Name: AnalysisPoints_ Static gain. ----------------------------------- az_Control = 1 Kp + Ki * --- s with Kp = 0.00165, Ki = 0.00166 Name: az_Control Continuous-time PI controller in parallel form. ----------------------------------- q_Gain = D = u1 y1 1.985 Name: q_Gain Static gain.
Постройте ответ с обратной связью для этого набора усилений:
T = getIOTransfer(ST,'az ref','az'); step(T,5)
systune (slTuner)
(Simulink Control Design) | slTuner
(Simulink Control Design) | systune