2012-11-21 12 views
6

Qualcuno conosce una potente routine/algoritmo (preferibilmente in scipy/python) per localizzare "tutti" i minimi locali per una funzione reale scalare di N variabili in una regione definita ("rettangolare") di spazio vettoriale N-dimensionale?minimizzazione in scipy, algoritmo per trovare tutti i minimi locali di una funzione scalare N dimensionale

gli algoritmi di minimizzazione vincolati e non vincolati a SciPy restituiscono tutte un solo minimo (globale o locale)

+9

Una funzione può avere un numero infinito di minimi locali in un intervallo limitato. Ad esempio, 'f (x) = sin (1/x)' per '0 unutbu

+0

ovviamente ... il mio male. Scusa la domanda. –

+0

Questa è una buona domanda. Penso solo che sarebbe difficile per un algoritmo generarli tutti, anche per funzioni regolari. – unutbu

risposta

2

di SciPy basinhopping ha un argomento callback che può essere utilizzato per salvare tutti i minimi trovati.

Ad esempio:

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

basinhopping(func, x0, callback=save_minima) 

Ovviamente, questo non restituisce tutti minimi locali necessariamente. Ma restituisce tutto ciò che trova.