Jak stwierdza Paweł, bez dodatkowych informacji trudno jest udzielać rad bez założeń.
Przy 10–20 zmiennych i kosztownych ocenach funkcji istnieje tendencja do rekomendowania algorytmów optymalizacji bez pochodnych. Nie zgadzam się zdecydowanie z radą Paula: ogólnie potrzebujesz gradientu precyzji maszyny, chyba że używasz jakiejś specjalnej metody (na przykład stochastyczny spadek gradientu w uczeniu maszynowym wykorzysta formę celu, aby wymyślić rozsądny szacunki gradientu).
Każdy krok quasi-Newton będzie miał postać:
H.~( xk) dk= - ∇ f( xk) ,
gdzie jest pewnym przybliżeniem macierzy Hesji, d k jest kierunkiem wyszukiwania, x k jest wartością zmiennych decyzyjnych przy bieżącej iteracji, f jest funkcją celu, a ∇ f jest gradientem celu, a zmienne decyzyjne są aktualizowane jak x k + 1 = x k + α k d k , gdzie α kH.~rekxkfa∇ fxk + 1= xk+ αkrekαkto wielkość kroku określona w pewien sposób (np. wyszukiwanie linii). Możesz uciec od przybliżenia Hesji na różne sposoby, a twoje iteracje zbiegną się, chociaż jeśli użyjesz czegoś w rodzaju przybliżonej skończonej różnicy Hesji za pomocą dokładnych gradientów, możesz cierpieć z powodu problemów z powodu złego warunkowania. Zazwyczaj Hesjan jest aproksymowany przy użyciu gradientu (na przykład metody typu BFGS z aktualizacjami 1-go rzędu dla Hesji).
Przybliżenie Hesji i gradientu zarówno różnicami skończonymi jest złym pomysłem z wielu powodów:
- będziesz miał błąd w gradiencie, więc zastosowana metoda quasi-Newtona jest zbliżona do znalezienia źródła funkcji szumu
- N.N.
- jeśli masz błąd w gradiencie, będziesz miał więcej błędów w swoim Hesji, co jest dużym problemem pod względem warunkowania układu liniowego
- N.2)
Aby uzyskać jedną złą iterację quasi-Newtona, robisz coś w rodzaju do 420 ocen funkcji przy 30 minutach na ocenę, co oznacza, że albo będziesz czekał chwilę na każdą iterację, albo będziesz potrzebuję dużego klastra tylko do oceny funkcji. Rzeczywiste rozwiązania liniowe będą składały się z macierzy 20 na 20 (co najwyżej!), Więc nie ma powodu, aby je równolegle łączyć. Jeśli możesz uzyskać informacje o gradiencie, na przykład rozwiązując problem przylegania, może być bardziej opłacalne, w takim przypadku warto spojrzeć na książkę taką jak Nocedal & Wright.
Jeśli zamierzasz wykonać wiele ocen funkcji równolegle, powinieneś zamiast tego spojrzeć na metody modelowania zastępczego lub na generowanie metod wyszukiwania zestawów, zanim podejmiesz podejście quasi-Newton. Klasyczne artykuły przeglądowe to te autorstwa Riosa i Sahinidisa na temat metod wolnych od pochodnych , które zostały opublikowane w 2012 roku i zapewniają naprawdę dobre, szerokie porównanie; artykuł porównawczy More and Wild z 2009 roku; podręcznik z 2009 r. „Wprowadzenie do optymalizacji bez pochodnych instrumentów” Conn, Scheinberg i Vicente; oraz artykuł przeglądowy na temat generowania metod wyszukiwania zestawów przez Kolda, Lewis i Torczon z 2003 roku.
Jak wspomniano powyżej, pakiet oprogramowania DAKOTA będzie implementował niektóre z tych metod, podobnie jak NLOPT , który implementuje DIRECT, oraz kilka zastępczych metod modelowania Powell. Możesz także rzucić okiem na MCS ; jest napisany w MATLAB, ale być może możesz przenieść implementację MATLAB na wybrany język. DAKOTA to przede wszystkim zbiór skryptów, których można użyć do uruchomienia drogiej symulacji i zebrania danych do algorytmów optymalizacyjnych, a NLOPT ma interfejsy w wielu językach, więc wybór języka programowania nie powinien stanowić dużego problemu przy korzystaniu z dowolnego pakietu oprogramowania; Nauka DAKOTA zajmuje jednak trochę czasu i ma do przeszukania ogromną ilość dokumentacji.