Ponieważ cytowano jedną z moich odpowiedzi, postaram się wyjaśnić, dlaczego zasugerowałem użycie IPOPT zamiast MINPACK.
Moje zastrzeżenia do używania MINPACK nie mają nic wspólnego z algorytmami używanymi przez MINPACK i wszystkim, co ma związek z ich implementacją. Moje główne zastrzeżenie polega na tym, że oprogramowanie pochodzi z 1980 r. I zostało ostatnio zaktualizowane w 1999 r. Jorge Moré jest na emeryturze; Wątpię, czy on lub którykolwiek z innych autorów oprogramowania ma to na oku, i nie ma zespołu ludzi aktywnie go wspierających. Jedyną dokumentacją, którą mogę znaleźć na temat oprogramowania, jest oryginalny raport techniczny Argonne z 1980 roku napisany przez Jorge Moré i innych autorów MINPACK. (Rozdziały 1-3 można znaleźć tutaj , a rozdział 4 można znaleźć tutaj.) Po przeszukaniu kodu źródłowego MINPACK i przejrzeniu dokumentacji (pliki PDF to zeskanowane obrazy i nie można ich przeszukiwać), nie widzę żadnych opcji, aby uwzględnić ograniczenia. Ponieważ oryginalny plakat nieliniowego problemu najmniejszych kwadratów chciał rozwiązać ograniczony problem nieliniowego najmniejszego kwadratu, MINPACK nawet nie rozwiąże tego problemu.
Jeśli spojrzysz na listę mailingową IPOPT, niektórzy użytkownicy wskazują, że wydajność pakietu w przypadku problemów z nieliniowymi najmniejszymi kwadratami (NLS) jest mieszana w porównaniu do algorytmów Levenberga-Marquardta i bardziej wyspecjalizowanych algorytmów NLS (patrz tutaj , tutaj i tutaj ). Wydajność IPOPT w stosunku do algorytmów NLS jest oczywiście zależna od problemu. Biorąc pod uwagę opinie użytkowników, IPOPT wydaje się rozsądną rekomendacją w stosunku do algorytmów NLS.
Trzeba jednak przyznać, że należy zbadać algorytmy NLS. Zgadzam się. Po prostu uważam, że należy użyć pakietu nowocześniejszego niż MINPACK, ponieważ uważam, że będzie działał lepiej, będzie bardziej użyteczny i będzie obsługiwany. Ceres wydaje się interesującym pakietem kandydackim, ale nie radzi sobie teraz z ograniczonymi problemami. TAOdziałałby na ograniczonych kwadratach problemach najmniejszych kwadratów, chociaż nie implementuje klasycznego Levenberga-Marquardta, ale zamiast tego implementuje algorytm bez pochodnych. Algorytm bez pochodnych prawdopodobnie działałby dobrze w przypadku problemów na dużą skalę, ale nie używałbym go w przypadku problemów na małą skalę. Nie mogłem znaleźć żadnych innych pakietów, które wzbudziłyby duże zaufanie do ich inżynierii oprogramowania. Na przykład GALAHAD na pierwszy rzut oka nie używa kontroli wersji ani żadnych automatycznych testów. Wydaje się, że MINPACK też tego nie robi. Jeśli masz doświadczenie z MINPACK lub zalecenia dotyczące lepszego oprogramowania, jestem cały w uszach.
Mając to na uwadze, wracając do cytatu mojego komentarza:
Każdy układ równań jest równoznaczny z problemem optymalizacji, dlatego metody optymalizacji oparte na Newtonie przypominają metody rozwiązywania układów równań nieliniowych oparte na Newtonie.
Lepszy komentarz jest prawdopodobnie efektem:
Kiedy chcemy rozwiązać układ równań z niewiadomymi , możemy sformułować to jako problem optymalizacji najmniejszych kwadratów. (Parafraza ostatniego akapitu str. 102 programowania nieliniowego , wydanie drugie, autor: Dmitri Bertsekas.)n g ( x ) = 0nng(x)=0
To stwierdzenie dotyczy nawet rozwiązywania układów równań w ograniczeniach. Nie znam żadnych algorytmów, które są uważane za „rozwiązujące równania” dla przypadku, w którym istnieją ograniczenia dotyczące zmiennych. Powszechnie znanym mi podejściem, być może zlekceważonym przez kilka semestrów kursów optymalizacyjnych i badań w laboratorium optymalizacyjnym, jest włączenie ograniczeń układu równań do sformułowania optymalizacyjnego. Jeśli spróbujesz użyć ograniczeń w schemacie podobnym do Newtona-Raphsona do rozwiązywania równań, prawdopodobnie uzyskasz prognozowany gradient lub metodę prognozowanego regionu zaufania, podobnie jak metody stosowane w ograniczonej optymalizacji.
Jeśli dany system nieliniowy jest warunkiem optymalizacji pierwszego rzędu dla problemu optymalizacji, wówczas często możemy stworzyć bardziej niezawodny algorytm, wykorzystując te informacje. Rozważmy na przykład równanie
To oczywiście ma unikalne minimum i oczekujemy, że nasza metoda optymalizacji ją znajdzie, niezależnie od punktu początkowego. Ale jeśli spojrzymy tylko na warunki optymalności pierwszego rzędu, szukamy rozwiązania z [Wolfram Alpha]x ∇f(x)=0
który ma unikalne rozwiązanie, ale wiele metod wyszukiwania korzeni może utknąć na lokalnym minimum.
Jeśli przeformułujemy nowy problem optymalizacji w celu zminimalizowania normy kwadratu gradientu, szukamy globalnego minimum z [Wolfram Alpha], który ma wiele lokalnych minimów.x ∥∇f(x)∥2
Podsumowując, zaczęliśmy od problemu optymalizacji, który miał unikalne rozwiązanie, które mogliśmy zagwarantować, że metoda znajdzie. Przeformułowaliśmy jako nieliniowy problem ze znalezieniem korzenia, który miał unikalne rozwiązanie, które moglibyśmy zidentyfikować lokalnie, ale metoda znajdowania korzeni (jak Newton) mogła się zatrzymać przed osiągnięciem. Następnie przeformułowaliśmy problem znalezienia roota jako problem optymalizacji, który miał wiele lokalnych rozwiązań (nie można zastosować żadnej lokalnej miary, aby stwierdzić, że nie jesteśmy na globalnym minimum).
Zasadniczo za każdym razem, gdy przekształcamy problem z optymalizacji w wyszukiwanie korzeni lub odwrotnie, zmniejszamy dostępne metody i powiązane z nimi gwarancje zbieżności. Rzeczywista mechanika metod jest często bardzo podobna, więc możliwe jest ponowne użycie dużej ilości kodu między rozwiązaniami nieliniowymi a optymalizacją.
źródło