Na podstawie tego, co powiedziałeś: Zakładam, że musisz zoptymalizować pod kątem 50 zmiennych; Zakładam również, że masz sytuację, że znalezienie analitycznych pochodnych jest bardzo drogie (nie mówiąc już o wydobyciu liczb) i że twoja optymalizacja nie jest ograniczona.
Pozwólcie, że podkreślę, że jesteście trochę nieszczęśliwie, ponieważ pomiędzy 25-30 a 100 zmiennymi jest to trochę strefa zmierzchu, jeśli chodzi o wybór między procedurami optymalizacji na dużą lub małą skalę. Powiedziawszy to, nic nie jest stracone.
Biorąc pod uwagę, że nawet pochodne pierwszego rzędu są drogie, aby uzyskać tego rodzaju, zabija ideę metody Newtona. Możesz mieć jednak trochę szczęścia z Quasi-Newtonem (BFGS), jeśli twój Hesjan jest lekko przekątny, jak na początek. CG jest zwykle nieco wolniejsze niż BFGS, więc prawdopodobnie nie poprawi to zbyt wiele; użyj go, jeśli problem stanowi także pamięć (lub w takim przypadku wybierz L-BFGS). Dodatkowo, biorąc pod uwagę, jak wolno ocenia się twoją funkcję, prosty najbardziej stromy algorytm zejścia / wyszukiwania linii byłby kręto wolny; to samo dzieje się z symulowanym wyżarzaniem i innymi losowymi wariantami wyszukiwania (zakładam, że nie masz dostępu do konsoli HMC i całego tego jazzu).
Tak więc, gdy potrzebujesz najlepszego zwrotu pieniędzy, jeśli chodzi o ocenę pojedynczej funkcji: Idź z metodą Powella i przetestuj COBYLA; mimo że jest ograniczonym algorytmem optymalizacji, ponieważ wewnętrznie liniowo aproksymuje gradient funkcji w celu przyspieszenia rzeczy, będzie w stanie skorzystać z liniowości funkcji. Również zdecydowanie spróbować NLopt dla Pythona . Mają wiele optymalizatorów bez gradientu; spróbuj UOBYQA; to także pomysł Powella (Unconstrained Optimization BY Quadratic Approximations).
Bardzo krótko: Algorytmy N-CG zależą od obliczenia Hesji, a twój Hesjan wydaje się bardzo drogi do obliczenia. NLCG i BFGS nie wymagają tego, chociaż mogą próbować go obliczyć raz w pierwszym kroku.
Celowo pominąłem algorytm simpleks, ponieważ jest to zupełnie inna bestia; nie ma nic wspólnego z gradientami jako takimi. Spróbuj, ale tak naprawdę nie mogę tego komentować; to naprawdę zależy od natury twojego problemu.
Pierwsze dobre odniesienie do optymalizacji numerycznej Książka CTKelly Iterative Methods for Optimization zaprowadzi cię dość daleko, całkiem nieźle.