Postanowiłem radykalnie edytować swoją odpowiedź na podstawie niektórych komentarzy.
Nie korzystałem z TAO. Z wglądu w dokumentację wydaje się, że jedynym sposobem, w jaki TAO może poradzić sobie z ograniczonymi problemami optymalizacji (wyłączając szczególny przypadek tylko ograniczeń pudełkowych), jest przekształcenie problemu w nierówność wariacyjną przy użyciu warunków Karush-Kuhn-Tucker (KKT) , które są konieczne w ramach kwalifikacji ograniczeń (typ, który zwykle widzę to warunek punktu Slatera ) i wystarczające w wypukłości celu i ograniczeń (bardziej ogólnie, wypukłość typu 1). Jeślifjest niep wypukły, sformułowanie nierówności wariacyjnej przy użyciu warunków KKT NIE jest równoważne pierwotnemu problemowi optymalizacji, więc ściśle mówiąc, jeśli chcesz globalnego optimum dla problemu optymalizacji, nie powinieneś wyrażać go jako nierówności wariacyjnej. W każdym razie trudno byłoby znaleźć globalne optimum dla optymalizacji ograniczonej przez PDE (patrz poniżej), więc może ignorowanie tego szczegółu jest w porządku. Biorąc pod uwagę to, co powiedział Wolfgang, byłbym sceptycznie nastawiony do korzystania z TAO; Jestem już sceptyczny, ponieważ nie implementuje metod rozwiązywania programów nieliniowych (NLP) jako NLP, a nie nierówności wariacyjne.
Nie jestem ekspertem od optymalizacji ograniczonej przez PDE; współpracownicy i współpracownicy kopalni pracują nad problemami optymalizacji ograniczonymi przez ODE. Wiem, że w przypadku natrętnych sformułowań, Larry Biegler (i inni) zastosuje metody kolokacji, aby zdyskretować PDE i uczynić go bardzo dużym, rzadkim NLP, a następnie rozwiąże go przy użyciu wewnętrznych metod punktowych. Aby naprawdę rozwiązać problem z optymalizacją globalną, należy również wygenerować wypukłe rozluźnienia, ale o ile mi wiadomo, takie podejście nie jest stosowane, ponieważ problemy optymalizacji ograniczone przez PDE prowadzą do tak dużych NLP, że trudno byłoby je rozwiązać globalna optymalizacja. Wspominam o tych szczegółach tylko dlatego, że sformułowanie problemu ma duży wpływ na wybór pakietu solvera. W przypadku nieinwazyjnych preparatów powtarzane PDE rozwiązuje informacje o gradiencie wydajności dla algorytmów optymalizacyjnych.
Niektóre osoby, które badają problemy optymalizacji ograniczone przez ODE, stosują podobne podejście do dyskretyzacji problemu za pomocą kolokacji i metody numerycznej, a następnie rozluźnienia wynikowego NLP, aby uzyskać wypukłą formułę stosowaną w globalnym algorytmie optymalizacji. Alternatywnym podejściem do optymalizacji ograniczonej przez ODE jest złagodzenie problemu, a następnie dyskretyzacja ODE, co jest podejściem przyjętym w moim laboratorium. Może być możliwe złagodzenie pewnych klas problemów związanych z optymalizacją ograniczonych przez PDE, ale nie znam żadnej pracy wykonanej nad tym problemem. (W pewnym momencie był to potencjalny projekt w moim laboratorium).
Ostatecznie liczy się nie różnicowalność pierwotnego PDE, ale różnicowalność dyskretyzacji w odniesieniu do zmiennych decyzyjnych.
Jeśli dyskretny problem można dwukrotnie rozróżnić w odniesieniu do zmiennych decyzyjnych, następujące pakiety obliczą lokalne rozwiązanie:
- IPOPT to open source wewnętrzny punkt rozwiązywania problemów opracowany przez Andreasa Wächtera w IBM. Jest to kod bardzo wysokiej jakości. Jako solver z punktami wewnętrznymi lepiej nadaje się do funkcji obiektywnych z dużymi, rzadkimi macierzami jakobskimi i byłby użyteczny do optymalizacji ograniczonej przez PDE
- SNOPT to komercyjny sekwencyjny kwadratowy solver programistyczny, który jest kolejnym wysokiej jakości kodem. Jest lepszy dla funkcji obiektywnych z małymi, gęstymi jakobianowymi macierzami, więc nie spodziewałbym się, że będzie przydatny do optymalizacji ograniczonej przez PDE, ale możesz spróbować.
- NLopt to mały, otwarty kod źródłowy napisany przez Stevena Johnsona z MIT, który zawiera podstawowe implementacje szeregu nieliniowych algorytmów optymalizacji. Wszystkie algorytmy powinny być odpowiednie do rozwiązywania problemów związanych z ograniczeniami.
fmincon
w Matlab implementuje szereg algorytmów (w tym programowanie punktów wewnętrznych i sekwencyjne programowanie kwadratowe) dla optymalizacji nieliniowej
- GAMS i AMPL są komercyjnymi językami modelowania używanymi do formułowania problemów optymalizacyjnych i zawierają interfejsy do dużej liczby nieliniowych solverów programistycznych. Wiem, że GAMS ma wersję próbną, której można używać w przypadku mniejszych problemów, a przypadki problemów można również przesyłać na serwer NEOS w celu rozwiązania.
Możliwe jest jednak, że dyskretyzacja jest tylko raz rozróżnialna w odniesieniu do zmiennych decyzyjnych, w którym to przypadku należy zastosować prognozowane najbardziej strome zejście lub inną metodę optymalizacji pierwszego rzędu przy obliczaniu rozwiązania lokalnego. Ponieważ wiele badań koncentruje się na problemach, w których można zastosować metody drugiego rzędu (a kiedy można ich użyć, ich lepsze właściwości zbieżności sprawiają, że są lepszym wyborem), nie mogłem znaleźć wielu implementacji najbardziej stromego zejścia, które nie byłyby rozwiązaniami do zadań domowych. GNU Scientific Library zawiera implementację, ale to tylko w celach demonstracyjnych. Prawdopodobnie będziesz musiał zakodować własną implementację.
Jeśli problem jest ciągły tylko w odniesieniu do zmiennych decyzyjnych, możesz użyć metod bezpośrednich, aby rozwiązać go lokalnie. Istnieje doskonała ankieta na temat metod bezpośrednich przeprowadzona przez Koldę, Lewisa i Torczona . Najbardziej znaną z tych metod jest algorytm simpleksowy Neldera-Meada . Nie można zagwarantować, że zbiega się do lokalnego minimum w wielu wymiarach, ale i tak znalazło znaczne praktyczne zastosowanie.
Wybór pakietu naprawdę zależy od języka, którego chcesz użyć do rozwiązania problemu, jeśli rozwiązanie problemu związanego z ograniczeniami jest tylko częścią algorytmu, który chcesz zaimplementować (lub jeśli jest to jedyny krok w algorytmie, w którym to przypadku języki modelowania stają się bardziej opłacalne dla kodu produkcyjnego), rodzaju i wielkości problemu, a jeśli potrzebujesz jakiejkolwiek równoległości.