2012-11-21 7 views
6

Kennt irgendjemand eine mächtige Routine/einen Algorithmus (vorzugsweise in scipy/python), um "alle" lokalen Minima für eine skalare reelle Funktion von N zu lokalisieren Variablen in einem definierten ("rechteckigen") Bereich des N-dimensionalen Vektorraums?Minimierung in scipy, Algorithmus zum Finden aller lokalen Minima einer N-dimensionalen Skalarfunktion

die mit und ohne Nebenminimierungsalgorithmen in scipy alle Rückkehr nur ein einziges Minimum (global oder lokal)

+9

Eine Funktion kann unendlich viele lokale Minima in einem begrenzten Intervall haben. Zum Beispiel, f (x) = sin (1/x) 'für" 0 unutbu

+0

offensichtlich ... mein schlechtes. Tut mir leid dass ich gefragt habe. –

+0

Das ist eine gute Frage. Ich denke nur, es wäre eine Herausforderung für einen Algorithmus, sie alle zu generieren - auch für reibungslose Funktionen. – unutbu

Antwort

2

Scipy des basinhopping hat ein callback Argument, das verwendet werden kann, um alle gefundenen Minima zu speichern.

Zum Beispiel:

all_minima = [] 
def save_minima(x, f, accepted): 
    all_minima.append(x) 

basinhopping(func, x0, callback=save_minima) 

Offensichtlich ist dies nicht alle lokalen Minima zurückkehren unbedingt. Aber es gibt alles zurück, was es findet.