Используя параллельные вычисления, чтобы ускорить настройку

В этом примере показано, как усилить 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

Мы готовы настроить усиления автопилота с 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)

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

(Simulink Control Design) | (Simulink Control Design) |