В этом примере показано, как использовать Toolbox™ Parallel Computing для ускорения многозаходных стратегий настройки систем управления фиксированной структурой.
Оба systune и looptune использовать методы локальной оптимизации для настройки существующей архитектуры управления. Для снижения риска, связанного с локальным оптимальным, но глобально плохим дизайном, рекомендуется выполнить несколько оптимизаций, начиная с различных случайных начальных точек. Если у вас есть многоядерный компьютер или у вас есть доступ к распределенным вычислительным ресурсам, вы можете значительно ускорить этот процесс с помощью Parallel Computing Toolbox.
В этом примере показано, как выполнить параллельную настройку автопилота планера с помощью looptune. Дополнительные сведения об этом приложении см. в примере «Настройка двухконтурного автопилота». looptune.
Динамика планера и автопилот смоделированы в Simulink.
open_system('rct_airframe1')

Автопилот состоит из двух каскадных контуров, перестраиваемые элементы которых включают в себя два коэффициента усиления контроллера PI (блок «az Control») и один коэффициент усиления в контуре частоты основного тона (блок «q Gain»). Вертикальное ускорение az должен отслеживать команду azref с 1 секундным временем отклика. Использовать slTuner для настройки этой задачи настройки (для получения дополнительной информации см. пример «Настройка двухконтурного автопилота»):
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) | systune (slTuner)(Проект управления Simulink)