Как работает алгоритм оптимизации SLSQP? - PullRequest
0 голосов
/ 19 января 2020

Я использую алгоритм SLSQP в openMDAO, но мне сложно понять, как он на самом деле работает. Я просто смотрю на общий пример параболоида, который имеет 2 проектные переменные и стремится минимизировать f без каких-либо ограничений. Распечатывая значения x, y и f для каждой итерации (итерация, вероятно, не является подходящим словом для этого), я вижу, что иногда первая производная оценивается с использованием конечной разности вперед для каждой проектной переменной (x, y). Эти производные затем используются для нахождения следующих значений x и y, однако я не могу видеть шаблон.

Кроме того, когда я читаю о методе SLSQP, вторые производные также необходимы. Однако я не вижу, что это рассчитывается. Позвольте мне привести пример моего вывода:

iteration 1:
x = 0
y = 0
f = 22

iteration 2:
x = 0.01
y = 0
f = 21.9401

iteration 3:
x = 0
y = 0.01
f = 22.0801

из этих двух последних итераций, которые мы можем вычислить, df / dx = 5.99, df / dy = -8.01

Следующая итерация происходит быть:

x = 5.99
y = -8.01
f = -25.9597

Затем снова два вычисления конечных разностей с этой точки, чтобы найти: df / dx = 2.02, df / dy = 2.02

Тогда следующая итерация имеет переменные: x = 8.372726 , у = -6,66007 И я понятия не имею, как получить эти значения.

Кроме того, иногда делается большой шаг, даже не вычисляя производные в этой точке. Возможно, потому что предыдущий шаг был слишком большим, в результате чего функция уходила от минимума.

Я надеюсь, что кто-то может объяснить мне или дать полезный источник для точного алгоритма, который используется, или дать какие-либо советы, которые могли бы быть использованы, чтобы лучше понять его. Большое спасибо!

...