2013-05-30 8 views
7

Sto cercando di utilizzare il pacchetto scipy.optimize per ottimizzare un problema di ottimizzazione discreto (ottimizzazione globale). Acc alla doc, la ricottura simulata implementata in scipy.optimize.anneal dovrebbe essere una buona scelta per lo stesso. Ma non sono sicuro di come forzare l'ottimizzatore per cercare solo valori interi dello spazio di ricerca. Qualcuno può aiutare?Ottimizzazione discreta in python

Un esempio illustrativo:

f(x1,x2) = (1-0.4*x1)^2 + 100*(0.6*x2 -0.4*x1^2)^2

where, $x1, x2 \in I$

risposta

4

ho controllato scipy.optimize.anneal, e non può vedere un modo per utilizzare valori discreti. Il modo per implementarlo tu stesso è creare una funzione di "spostamento" personalizzata, ma il modo in cui devi specificare la pianificazione (tramite una stringa) ti impedisce di farlo.

Penso che sia un grosso errore, se si potesse semplicemente passare una classe di pianificazione personalizzata come parametro, è possibile personalizzarlo per l'utilizzo di variabili discrete e molte altre cose.

La soluzione che ho trovato è quello di utilizzare quest'altra attuazione invece: https://github.com/perrygeo/python-simulated-annealing

Poiché è necessario fornire la funzione che modifica lo stato, si ha il controllo su quali valori può avere, o se sono discreti o continuo.

Spero che aiuti.

+0

grazie mille .. super: stavo cercando qualcosa di simile. Nel frattempo ho implementato la SA personalmente per avere il controllo che hai detto – goofd