Последовательное квадратичное программирование

редактировать

Последовательное квадратичное программирование (SQP ) - это итерационный метод для ограниченная нелинейная оптимизация. Методы SQP используются в математических задачах, для которых целевая функция и ограничения дважды непрерывно дифференцируемы.

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

Содержание
  • 1 Основы алгоритмов
  • 2 Альтернативные подходы
  • 3 Реализации
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки
Основы алгоритмов

Рассмотрим задачу нелинейного программирования вида:

min xf (x) st б (Икс) ≥ 0 с (Икс) = 0. {\ Displaystyle {\ begin {array} {rl} \ min \ limits _ {x} f (x) \\ {\ t_dv {st}} b (x) \ geq 0 \\ c (x) = 0. \ end {array}}}\ begin { array} {rl} \ min \ limits_ {x} f (x) \\ \ t_dv {st} b (x) \ ge 0 \\ c (x) = 0. \ end {array}

лагранжиан для этой задачи равен

L (x, λ, σ) = f (x) - λ б (Икс) - σ с (Икс), {\ Displaystyle {\ mathcal {L}} (х, \ lambda, \ sigma) = f (x) - \ lambda b (x) - \ sigma c (x),}{\ displaystyle {\ mathcal {L}} (x, \ lambda, \ sigma) = f (x) - \ lambda b (x) - \ sigma c (x),}

где λ {\ displaystyle \ lambda}\ lambda и σ {\ displaystyle \ sigma}\ sigma - множители Лагранжа. На итерации xk {\ displaystyle x_ {k}}x_ {k} базовый алгоритм последовательного квадратичного программирования определяет соответствующее направление поиска dk {\ displaystyle d_ {k}}d_{k}как решение подзадачи квадратичного программирования

min df (xk) + ∇ f (xk) T d + 1 2 d T ∇ xx 2 L (xk, λ k, σ k) ds. т. б (xk) + ∇ b (xk) T d ≥ 0 c (xk) + ∇ c (xk) T d = 0. {\ displaystyle {\ begin {array} {rl} \ min \ limits _ {d} f (x_ {k}) + \ nabla f (x_ {k}) ^ {T} d + {\ tfrac {1} {2}} d ^ {T} \ nabla _ {xx} ^ {2} {\ mathcal { L}} (x_ {k}, \ lambda _ {k}, \ sigma _ {k}) d \\\ mathrm {st} b (x_ {k}) + \ nabla b (x_ {k}) ^ { T} d \ geq 0 \\ c (x_ {k}) + \ nabla c (x_ {k}) ^ {T} d = 0. \ End {array}}}\ begin {array} {rl} \ min \ limits_ {d} f (x_k) + \ nabla f (x_k) ^ Td + \ tfrac {1} {2} d ^ T \ nabla_ {xx} ^ 2 \ mathcal {L} (x_k, \ lambda_k, \ sigma_k) d \\ \ mathrm {st} b (x_k) + \ nabla b (x_k) ^ Td \ ge 0 \\ c (x_k) + \ nabla с (x_k) ^ T d = 0. \ конец {массив}

Обратите внимание, что термин f (xk) {\ displaystyle f (x_ {k})}f (x_ {k}) в приведенном выше выражении может быть не учтено для задачи минимизации, поскольку оно постоянно в пределах min d {\ displaystyle \ min \ limits _ {d}}{\ displaystyle \ min \ limits _ {d}} оператор.

Альтернативные подходы
Реализации

Методы SQP были реализованы в хорошо известных числовых средах, таких как MATLAB и GNU Octave. Также существует множество программных библиотек, в том числе с открытым исходным кодом:

  • SciPy (де-факто стандарт для научного Python) имеет решатель scipy.optimize.minimize (method = 'SLSQP').
  • NLopt (C / C ++ с многочисленными интерфейсами, включая Julia, Python, R, MATLAB / Octave), реализованный Дитером Крафт как часть пакета для оптимального управления и модифицированный SG Johnson.
  • LabVIEW
  • KNITRO ( C, C ++, C #, Java, Python, Fortran)
  • NPSOL (Fortran)
  • SNOPT (Fortran)
  • NLPQL (Fortran)
  • MATLAB
  • SuanShu (Java)
См. Также
Примечания
Ссылки
Внешние ссылки

.

Последняя правка сделана 2021-06-07 10:46:17
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте