Metodo di ottimizzazione che tiene conto del costo variabile nel tempo della funzione obiettivo per parametri diversi


9

Sto lavorando per migliorare il processo di ottimizzazione di alcuni software di modellazione demografica in modo che possa adattare meglio i modelli demografici ai dati. Vorremmo ridurre i tempi di ottimizzazione.

Il tempo necessario per valutare la nostra funzione oggettiva varia molto, a seconda dei valori di input. È nota la relazione tra tempo per valutare la funzione obiettivo e l'input. Mi chiedo se ci siano metodi di ottimizzazione che tengano conto del costo relativo del tempo della funzione obiettivo nella scelta dei punti da valutare.

Grazie!

Aggiornare:

Come Paul ha richiesto, ecco alcune caratteristiche salienti di questa particolare funzione oggettiva:

  1. Il numero di parametri è moderato (~ 12ish)
  2. Il nostro problema è non convesso, o almeno ci sono "creste" strette e piatte nella superficie della funzione obiettivo. In questo momento abbiamo a che fare con questo utilizzando più ottimizzazioni da diversi punti, ma ci piacerebbe fare di meglio.
  3. La funzione obiettivo è piuttosto regolare, sebbene possiamo calcolare solo approssimazioni a differenza finita ai derivati.
  4. Il costo di valutazione è anche una funzione regolare dei valori dei parametri ed è abbastanza prevedibile. in termini approssimativi, per ciascun parametro il costo da valutare è elevato a un'estremità dell'intervallo e basso all'altra estremità. Quindi abbiamo ampie regioni di insiemi di parametri costosi da valutare, ma sappiamo dove sono.

2
Ciao Kate, e benvenuto su Scicomp! Potresti condividere alcune delle caratteristiche della tua funzione oggettiva? Ciò può aiutare a individuare un metodo specifico per il tuo caso.
Paul

Non ho mai sentito parlare di alcun algoritmo che consideri esplicitamente il costo della valutazione della funzione obiettivo (o di eventuali vincoli) nella scelta dei punti da valutare. Tuttavia, esistono algoritmi di ottimizzazione senza derivati ​​che tentano di scegliere abilmente il punto successivo da valutare dall'ottimizzatore. La premessa è che il numero di valutazioni delle funzioni dovrebbe essere ridotto al minimo se le valutazioni delle funzioni sono costose. Tuttavia, non sono sicuro che l'utilizzo di algoritmi privi di derivati ​​ti aiuterà nel tuo caso d'uso.
Geoff Oxberry,

Ciao @Paul, grazie per l'accoglienza! Sono entusiasta di aver trovato questa community. Ho aggiunto caratteristiche. Fammi sapere se ci sono altre funzionalità più importanti.
nova,

Ho ragione a dedurre dal tuo numero 2 che sei interessato a un minimizer globale ? O sei soddisfatto di una riduzione "sufficiente"? L'ottimizzazione globale è un campo a sé stante e la questione del raggiungimento di una soluzione globale (se esiste) può essere completamente separata dall'evitare costosi punti di prova.
Dominique,

Dominique, avevamo ipotizzato che un ottimizzatore globale sarebbe troppo lento per il nostro problema, quindi siamo rimasti soddisfatti degli ottimizzatori locali. Gli ottimizzatori globali sono qualcosa che intendiamo esaminare in futuro.
nova,

Risposte:


4

Un approccio comune alla gestione di costose funzioni oggettive è quello di costruire (ad esempio la modellazione della regressione) un "modello di superficie di risposta" che approssima la funzione obiettivo originale e quindi ottimizzare su quella superficie di risposta piuttosto che lavorare con la funzione originale. In pratica, le superfici di risposta sono in genere solo modelli quadratici che si adattano alla regressione, quindi trovare un minimo della superficie di risposta diventa un problema di ottimizzazione molto semplice.

Non hai detto nulla sulla scorrevolezza o convessità della tua funzione oggettiva. Se la funzione è non liscia o non convessa, questo ovviamente diventa molto, molto più difficile.

Inoltre non hai detto nulla su dove si trovano i punti costosi nel tuo spazio parametri. Se sono distribuiti casualmente nello spazio dei parametri, è possibile utilizzare la progettazione di tecniche di esperimenti per costruire il modello di superficie di risposta evitando i punti costosi. Se vi sono aree più grandi dello spazio dei parametri in cui le valutazioni sono costose, è possibile provare a ridurre al minimo il numero di punti in quelle aree utilizzate nella costruzione del modello di superficie di risposta. Naturalmente, se il tuo ottimale si trova nel mezzo di una tale regione, sarai condannato a valutare le funzioni nella costosa regione.


1

Non conosco metodi che pesano specificamente i costi relativi della valutazione dell'obiettivo in diversi punti di prova, ma se si è in grado di prevedere in modo relativamente affidabile se un candidato sarà costoso da valutare o meno, allora potrei suggerire di provare a metodo diretto . I metodi diretti rientrano nella famiglia di metodi senza derivati. Non è necessariamente un male usarli anche se sospetti che il tuo problema sia abbastanza regolare perché possono fornire un certo livello di flessibilità che i metodi per l'ottimizzazione regolare non possono.

L'idea è che i metodi diretti definiscono una mesh (dipendente dall'iterazione) sull'iterata corrente e un "passaggio" della mesh (dipendente dall'iterazione). Sulla base di questo passaggio della mesh, il metodo determina i punti di prova sulla mesh che sono vicini dell'iterato corrente (si trovano sulla mesh e si trovano a una distanza definita dal passaggio della mesh). Quindi procederà alla valutazione dell'obiettivo presso i vicini. Non appena viene trovato un candidato migliore, diventa il nuovo iterato corrente. A tua scelta, puoi anche valutare tutti i vicini e scegliere il migliore.

Nel tuo caso, potrebbe essere una buona idea ordinare i vicini in base alla tua stima del costo della valutazione dell'obiettivo lì. Valutali in questo ordine e scegli il primo successo come prossimo iterato. Intuitivamente, stai favorendo candidati a basso costo. Nei metodi diretti, tali ordinamenti rientrano nella categoria dei modelli surrogati , un concetto che generalizza quello di un modello di superficie di risposta menzionato da Brian.

Ecco un'implementazione eccellente di un metodo diretto (in C ++): http://www.gerad.ca/nomad/Project/Home.html

Se questo sembra dare risultati promettenti, non esitare a ricontattarmi e potrei essere in grado di suggerire altri miglioramenti.

Credo che NOMAD abbia anche funzionalità per l'ottimizzazione globale (come il multi-start che stai attualmente applicando) basato sul concetto di ricerca di vicinato variabile .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.