slajdy z sqp
Transkrypt
slajdy z sqp
Sekwencyjne programowanie kwadratowe Przy użyciu pakietu optim w Octave SQP • Sequential quadratic programming (SQP) is an iterative method for nonlinear optimization. SQP methods are used on problems for which the objective function and the constraints are twice continuously differentiable. SQP • Rozważmy programowania nieliniowego: • Lagrangian tego problemu to: • W k-tej iteracji, podstawowy algorytm sqp definiuje odpowiedni kierunek poszukiwao dk jako rozwiązanie następującego podproblemu programowania kwadratowego. SQP • Metoda SQP rozwiązuje ciąg podproblemów optymalizacyjnych, każdy z nich optymalizuje model kwadratowy funkcji celu przy zlinearyzowanych warunkach ograniczających. • Jeśli problem jest bez ograniczeo, metoda redukuje się do metody Newtona znajdowania zerowego gradientu. • Jeśli problem ma tylko ograniczenia w postaci równości, wtedy metoda jest równoważna zastosowaniu metody Newtona do warunków optymalizacji pierwszego rzędu (warunki Karush Kuhn Tuckera) dla danego problemu. Implementacja SQP w optim w Octave • Plik funkcji: – – – – – – • [x, obj, info, iter, nf, lambda] = sqp (x0, phi) [...] = sqp (x0, phi, g) [...] = sqp (x0, phi, g, h) [...] = sqp (x0, phi, g, h, lb, ub) [...] = sqp (x0, phi, g, h, lb, ub, maxiter) [...] = sqp (x0, phi, g, h, lb, ub, maxiter, tolerance) Rozwiąż program nielinowy: • P.w. min phi (x) x g(x) = 0 h(x) ≥ 0 lb ≤ x ≤ ub [...] = sqp (x0, phi, g, h, lb, ub, maxiter, tolerance) • Pierwszy argument to punkt początkowy, czyli wektor x0. • Drugi argument to etykieta funkcji wskazująca na funkcję celu w następującej formie: – y = phi (x), gdzie x jest wektorem a y skalarem. • Drugi argument może również byd 2- lub 3- elementowy wektor etykiet funkcji. Pierwszy element powinien wskazywad na funkcję celu, drugi na funkcję, która wylicza gradient funkcji celu, a trzeci powinien wskazywad na funkcję, która wylicza Hesjan funkcji celu – Jeśli gradient nie jest podany, będzie policzony przy użyciu skooczonych różnic. – Jeśli Hesjan nie jest podany, formuła algorytmu BFGS będzie użyta jako przybliżenie Hesjanu • Jeśli podany, gradient powinien byd w następującej formie – g = gradient (x), gdzie x jest wektorem i g jest wektorem. • Jeśli podany, Hesjan powinien byd w następującej formie – h = hessian (x), gdzie x jest wektorem i h jest macierzą. • Trzeci i czwarty argument to etykiety funkcji wskazujące na funkcje, które wyliczają ograniczenia w postaci, odpowiednio, równości i nierówności. • Jeśli problem nie ma ograniczeo w postaci równości (lub nierówności), użyj pustą macierz ([]). • Jeśli podane, funkcje ograniczeo w postaci równości i nierówności powinny byd w następującej formie – r = f (x), gdzie x jest wektorem i r jest wektorem. [...] = sqp (x0, phi, g, h, lb, ub, maxiter, tolerance) • Trzeci i czwarty argument może byd 2elementowymi wektorami etykiet funkcji – Pierwszy element powinien wskazywad na funkcję ograniczeo a drugi powinien wskazywad na funkcję wyliczającą gradient funkcji ograniczeo [ d f(x) d f(x) d f(x) ] transpose ( [ ------- ----- ... ------ ] ) [ dx_1 dx_2 dx_N ] • Piąty i szósty argument zawiera dolne i górne ograniczenie na x. Muszą byd zgodne z ograniczeniami. Jeśli są skalarne, to wszystkie elementy x mają to samo ograniczenie. Jeśli nie podany, to używa wartośd bazową (-realmax,+realmax) • Siódmy argument podaje maksymalną liczbę iteracji. Wartośd bazowa 100 • Ósmy argument podaje tolerancję kryteriów stopu. Wartośd bazowa sqrt(eps) [x, obj, info, iter, nf, lambda] = sqp (x0, phi, g, h, lb, ub, maxiter, tolerance) • Wartość info może przyjmowad wartości: – The algorithm terminated normally. Either all constraints meet the requested tolerance, or the stepsize, delta x, is less than tol * norm (x). – The BFGS update failed. – The maximum number of iterations was reached. Przykład Przykład function r = g (x) r = [ sumsq(x)-10; x(2)*x(3)-5*x(4)*x(5); x(1)^3+x(2)^3+1 ]; endfunction function obj = phi (x) obj = exp(prod(x)) - 0.5*(x(1)^3+x(2)^3+1)^2; Endfunction x0 = [-1.8; 1.7; 1.9; -0.8; -0.8]; [x, obj, info, iter, nf, lambda] = sqp (x0, @phi, @g, [])