Znalezienie globalnego minimum płynnej, ograniczonej, niewypukłej funkcji 2D, która jest kosztowna w ocenie


17

Mam ograniczoną niewypukłą funkcję 2-D, którą chciałbym znaleźć minimum. Funkcja jest dość płynna. Ocena jest kosztowna. Dopuszczalny błąd wynosi około 3% domeny funkcji w każdej osi.

Próbowałem uruchomić implementację algorytmu DIRECT w bibliotece NLOPT, ale nie dało to znacznej poprawy w porównaniu z wyszukiwaniem brutalnej siły pod względem ilości ocen funkcji potrzebnych do wymaganej dokładności i były pewne odchylenia.

Jakie inne globalne rozwiązania optymalizacyjne powinienem rozważyć?


Czy potrafisz obliczyć gradienty, czy też chciałbyś je przybliżać za pomocą ilorazów różnic?
Arnold Neumaier

Muszę je przybliżać za pomocą ilorazów różnic.
Victor,

W takim przypadku nie można zalecić metody Newtona, ponieważ druga pochodna numeryczna jest bardzo niestabilna numerycznie i trudno dostroić ją do bezpiecznej pracy.
Arnold Neumaier

@Victor May, z czym się skończyłeś? (Jeśli mógłbyś opublikować funkcję podobną do twojej, to naprawdę pomogłoby ludziom porównać i dostroić różne algorytmy.)
den

@Denis, starałem się uzyskać większą prędkość algorytmu do śledzenia obiektu na wideo. Dane wyjściowe algorytmu były oszacowaniem prawdopodobieństwa dla każdego położenia obrazu zawierającego śledzony obiekt. Obraz zawierający te szacunki prawdopodobieństwa jest funkcją, którą próbowałem zoptymalizować. Skończyłem z brutalnym wymuszaniem na kilku krokach rozwiązania. Aby uzyskać więcej informacji na temat omawianego algorytmu śledzenia, przeczytaj artykuł „Solidne śledzenie oparte na fragmentach za pomocą zintegrowanego histogramu”.
Victor May

Odpowiedzi:


12

Chciałbym zasugerować nieco inne podejście w porównaniu do innych odpowiedzi, chociaż @barron pośrednio omawiał to samo.

Zamiast bezpośrednio optymalizować swoją funkcję, tj. Oceniając ją w szeregu punktów punktów, które (miejmy nadzieję) są zbieżne z (lokalnym) optimum, możesz skorzystać z koncepcji modelowania zastępczego , która jest bardzo dobrze nadaje się do problemów opisywanego typu (wysoki koszt, gładki, ograniczony, mało wymiarowy, tj. mniej niż 20 niewiadomych).x1,x2,,xksurrogate modelling

Konkretnie, modelowanie zastępcza działa poprzez utworzenie funkcji modelu swojej prawdziwej funkcji f R dR . Kluczem jest to, że chociaż c oczywiście nie doskonale reprezentuje f , jest o wiele tańszy do oceny.cRdRfRdRcf

Typowy proces optymalizacji wyglądałby następująco:

  1. Oszacuj na zbiorze j początkowych punktów x 1 , x 2 , , x j . Należy pamiętać, że instrumenty pochodne nie są potrzebne. Zauważ również, że punkty te powinny być rozmieszczone równomiernie w przestrzeni wyszukiwania, np. Przez Latin Hypercube Sampling lub podobny projekt wypełniania przestrzeni.fjx1,x2,,xj
  2. Na podstawie tego oryginalnego zestawu danych utwórz funkcję modelu . Możesz użyć weryfikacji krzyżowej, aby sprawdzić swój model (tj. Użyć tylko podzestawu oryginalnych punktów j, aby utworzyć c , a następnie użyć pozostałej części zestawu danych, aby sprawdzić, jak dobrze c przewiduje te wartości)cjcc
  3. Użyj kryterium, takiego jak kryterium oczekiwanej poprawy (EI), aby dowiedzieć się, gdzie „wypełnić” więcej próbek, aby zwiększyć dokładność poprzez pobranie próbki f . Jest to właściwie znacznie lepiej zbadane teoretycznie, niż mogłoby się wydawać, a kryterium EI jest bardzo dobrze zbadane. Kryterium EI nie jest również chciwym kryterium, więc oboje uzyskuje się dobrą ogólną poprawę dokładności modelu, przy jednoczesnym priorytetowym traktowaniu dokładności w pobliżu potencjalnych optymów.cf
  4. Jeśli twój model nie jest wystarczająco dokładny, powtórz krok 3, w przeciwnym razie użyj ulubionej procedury optymalizacji, aby znaleźć optymalną wartość , która będzie bardzo tania w ocenie (abyś mógł zastosować dowolną procedurę, nawet wymagającą pochodnych, lub po prostu ocenić funkcję w drobnej siatce).c

Zasadniczo to właśnie oznacza EGO, Efficient Global Optimization, jak sugerował @barron. Chciałbym podkreślić, że dla twojej aplikacji wydaje się to idealnie odpowiednie - otrzymujesz zaskakująco dokładny model oparty na stosunkowo niewielu ocenach , a następnie możesz użyć dowolnego algorytmu optymalizacji, który chcesz. Często interesujące jest również to, że możesz teraz ocenić c na siatce i narysować ją, uzyskując w ten sposób wgląd w ogólny wygląd f . Innym interesującym punktem jest to, że większość zastępczych technik modelowania zapewnia również szacunki błędów statystycznych, umożliwiając w ten sposób oszacowanie niepewności.fcf

Jak skonstruować jest oczywiście pytaniem otwartym, ale często stosuje się modele Kriginga lub tak zwane modele mapowania przestrzeni.c

Oczywiście jest to dość sporo pracy z kodowaniem, ale wiele innych osób wykonało bardzo dobre wdrożenia. W Matlab znam tylko programowy zestaw narzędzi DACE. DACE jest bezpłatny. TOMLAB może również oferować pakiet Matlab, ale kosztuje, ale uważam, że działa również w C ++ i ma znacznie więcej możliwości niż kiedykolwiek będzie miał DACE. (Uwaga: jestem jednym z twórców nowej wersji DACE, która wkrótce zostanie wydana, która zaoferuje dodatkowe wsparcie dla EGO.)

Mam nadzieję, że ten ogólny przegląd pomógł ci, zadawaj pytania, czy są pewne kwestie, które można wyjaśnić, lub rzeczy, które mi pominęły, lub jeśli chcesz uzyskać więcej materiałów na ten temat.


Fwiw, google surogate-model przywołuje Surrogate Modeling Lab na Uniwersytecie w Gandawie oraz książkę Engineering Design via Surrogate Modeling , 2008 228p 0470770791. Problemem z każdym bardzo ogólnym podejściem jest to, że wkrótce masz zlew kuchenny pełen wariantów metod, więcej niż rzeczywiste funkcje testowe.
denis


3

Aby zapewnić płynne działanie, metoda wydajnej globalnej optymalizacji powinna działać całkiem dobrze i być znacznie bardziej wydajna niż DIRECT. Implementacje są dostępne w TOMLAB (sam nie korzystałem z niego) i DAKOTA (z którym miałem pewien sukces).


1

Ponieważ funkcja jest płynna, metoda Newtona będzie niezwykle wydajną metodą znajdowania minimum. Ponieważ funkcja nie jest wypukła, będziesz musiał zastosować zwykłe sztuczki, aby metoda Newtona zbiegła się (modyfikacja Levenberga-Marquardta, wyszukiwanie linii lub region zaufania w celu globalizacji). Jeśli nie możesz uzyskać pochodnych funkcji, spróbuj ją obliczyć za pomocą różnic skończonych lub zaktualizować BFGS. Jeśli podejrzewasz, że problem ma więcej niż jedno lokalne minimum, wystarczy po prostu uruchomić metodę Newtona z zestawu losowo lub niezbyt losowo wybranych punktów i sprawdzić, gdzie się zbiegają.


Mój problem rzeczywiście ma lokalne minima. Jakie są metody wyboru punktów początkowych?
Victor,

1
O ile nie wiesz nic o problemie, próbkowanie statystyczne jest zasadniczo twoim jedynym wyborem.
Wolfgang Bangerth

@Wolfgang: Jakieś pomysły na podejście do „próbkowania statystycznego”? Po prostu spróbuj 10, 100, ... losowych wstępnych domysłów? Czy istnieją „bardziej rygorystyczne” podejścia? Pytam, ponieważ mam mniej więcej podobny problem (patrz scicomp.stackexchange.com/q/4708/1789 )
André

Wszystko zależy od tego, co wiesz o funkcji. Jeśli znasz coś w rodzaju „typowej skali długości” dla swojej funkcji, która wskazywałaby, jak daleko odległa będzie ekstrema lokalna. To da ci również wskazówkę, od ilu punktów możesz zacząć, i jak daleko od siebie powinny być wybrane.
Wolfgang Bangerth,

0

Ponieważ twoje oceny są drogie, musisz skorzystać z równoległego wykonywania ocen funkcji różnych.

Polecam zajrzeć do tego kodu . Opisana tutaj matematyka .


1
czy ten kod i artykuł zostały napisane przez ciebie? Jeśli tak, czy możesz to wyraźnie powiedzieć w swojej odpowiedzi? Również teraz możesz poprawić odpowiedź, podając opis swojej sugestii.
nicoguaro
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.