Алгоритм управления на основе поиска экстремума
Алгоритм управления на основе поиска экстремума¶
Управление на основе поиска экстремума (Extremum Seeking Control) – это эффективный алгоритм оптимизации управления, который адаптируется к медленно меняющимся параметрам и не требует модель объекта управления. Для этого метода мы выбираем некоторую целевую функцию и находим ее максимум или минимум для функции затрат. Оптимальное управление соответствует точке экстремума этой функции.
Неизменяемая часть¶
Представим, что на вход некоторой системы поступает сигнал u, а на выходе – сигнал y. Выходы формируют целевую функцию, максимум которой мы хотим найти.
В нашей модели мы представим это простым квадратным уравнением $J = 100-(10-u)^2$ в блоке Engee Function.
В блоке Engee Function используется следующий код:
struct Block <: AbstractCausalComponent; end
function (c::Block)(t::Real, u)
J = 100-(10-u)^2;
return J
end
Построим зависимость целевой функции от входного сигнала. В Engee это легко сделать, выбрав тип отображения Зависимость одного сигнала от другого. По графику мы видим, что целевая функция достигает максимума $100$ при $u = 10$. Теперь дело за малым - научить наш контроллер искать этот экстремум.
Модуляция¶
Представим, что мы не знаем, что оптимальное значение $u = 10$ и выберем любое начальное предположение, например $u = 5$. ES-контроллер должен автоматически определять,оптимально ли это значение. В случае, если это не так, контроллер должен установить, является ли это значение слишком малым или слишком большим. Для этого подадим на вход не постоянный сигнал, а колеблющийся вокруг нашего начального предположения, добавив к входному сигналу низкоамплитудный синусоидальный сигнал $asin(ωt)$. Этот этап называется модуляцией.
a = 0.3;
ω = 30.0; #Рад/с
φ2 = 0.0; #Рад
Синусоидальная составляющая позволяет определить наклон целевой функции при выбранном значении $u$. Поскольку $u = 5$ меньше искомого экстремума, то мы ожидаем, что эти два сигнала будут в одной фазе, то есть при увеличении $u$, выход $J$ так же увеличивается.
Если же мы выберем значение $u = 12$, что больше искомого экстремума, то эти два сигнала будут не в фазе, так как при увеличении $u$ значение $J$ уменьшается.
Демодуляция¶
На графике оранжевая синусоида это входной сигнал, колеблющийся вокруг $u = 12$, а синяя - выходной сигнал системы.
Определить, находится ли сигнал целевой функции c входным сигналом в одной фазе может быть затруднительно, поскольку они смещены относительно друг друга. Но нас интересуют не их абсолютные значения, а лишь изменения. Изменение входного сигнала и есть сама синусоида $asin(ωt)$. Изменение значения целевой функции можно получить, пропустив её через фильтр высоких частот.
w_h = 5.0; # Частота среза фильтра высоких частот
Если перемножить эти два сигнала, то мы получим сигнал $ξ$, принимающий неотрицательные значения в случае, если сигналы находятся в одной фазе. И, напротив, если сигналы в противофазе, то произведение будет принимать преимущественно отрицательные значения. Этот этап называется Демодуляция.
Обновление параметров¶
На последнем этапе демодулированный сигнал $ξ$ интегрируется. Если $u$ слишком мало, то демодулированный сигнал положителен и результат интегрирования будет увеличиваться. Если u напротив велико - уменьшаться. Причем, чем дальше мы находимся от оптимального значения, тем быстрее увеличивается или уменьшается сумма.
В этом можно убедиться, если вместо константы поставить на вход линейный сигнал Ramp. Чем ближе мы к оптимальному значению, тем точнее становятся шаги и около экстремума сигнал лишь незначительно колеблется.
ES-контроллер для статической системы¶
Таким образом, мы можем использовать эту сумму в качестве входного сигнала, и тогда система шаг за шагом постепенно будет смещаться к экстремуму. Обратите внимание, что такой алгоритм находит только локальный экстремум целевой функции.
Давайте так и сделаем в модели. Мы видим, что наша система не достигла оптимального состояния.
Для того, чтобы ускорить процесс сходимости, добавим к интегратору коэффициент усиления.
k = 5.0;
Подбирая коэффициент усиления важно соблюдать баланс, так как слишком быстрое ускорение сделает систему неустойчивой.
ES-контроллер для динамической системы¶
Как мы упоминали в самом начале, ES-контроллер хорошо адаптируется к изменяющейся динамике, но изменения должны быть небыстрыми, чтобы поиск оптимального управления успевал сходиться к оптимуму. Посмотрим это на примере. Изменим уравнение в блоке Engee function, чтобы оно зависело от времени. Например, будем постепенно сдвигать параболу вправо. Теперь ES-контроллеру необходимо постоянно увеличивать входное значение u, чтобы поддерживать максимальное выходное значение J в 100.
Теперь вход u постоянно меняется, чтобы выход J оставался близким к максимальному значению.
Параметры ES-контроллера¶
Итак, мы на примере рассмотрели упрощенную версию ES-контроллера. На рисунке показана его полная версия со всеми параметрами, настраивая которые, можно получить результат, который быстро и надежно сходится к оптимальному решению. В него также добавлен фильтр низких частот для удаления высокочастотного шума из демодулированного сигнала. Большое количество настраиваемых параметров считается одним из недостатков ES-контроллера.
- ω - Частота модулирующего сигнала;
- a - Амплитуда демодулирующего сигнала;
- b - Амплитуда модулирующего сигнала;
- φ1 - Фаза демодулирующего сигнала;
- φ2 - Фаза модулирующего сигнала;
- K - Скорость сходимости оптимизации;
- x0 - Начальные условия интегратора;
- ωl - Частота среза фильтра низких частот;
- ωh - Частота среза фильтра высоких частот;