Massimizzazione globale di costose funzioni oggettive


12

Sono interessato a massimizzare a livello globale una funzione di molti ( ) parametri reali (risultato di una simulazione complessa). Tuttavia, la funzione in questione è relativamente costosa da valutare e richiede circa 2 giorni per ciascun set di parametri. Sto confrontando diverse opzioni e mi chiedevo se qualcuno avesse dei suggerimenti.30

So che esiste una serie di metodi per questo tipo di processo che prevede lo sviluppo di funzioni approssimative e quindi la massimizzazione di quelle (ad es. Jones et al. "Ottimizzazione globale efficiente delle costose funzioni della scatola nera" ). Tuttavia, questo sembra essere relativamente coinvolto nel codice.

Ho la possibilità di eseguire un gran numero di simulazioni in parallelo (50+). Questo sembrava suggerire di usare qualcosa come algoritmi genetici per fare questa ottimizzazione, dal momento che posso creare una popolazione di soluzioni candidate il più rapidamente possibile.

Ecco le mie domande: 1) Qualcuno ha esperienze con implementazioni liberamente disponibili di questo tipo di solutori / raccomandazioni globali? 2) Ci sono ragioni per preferire o evitare algoritmi genetici qui?

Questo è un problema fisico e i miei primi esperimenti hanno mostrato che la figura del merito cambia abbastanza facilmente mentre cambio i parametri.

AGGIORNARE:

Grazie per l'aiuto! Qualche dettaglio in più: non ho bisogno di informazioni oltre la posizione del massimo. La simulazione è deterministica, non Monte Carlo, quindi la complicazione non è un grosso problema. Non ci sono limiti o vincoli espliciti sui parametri. Un'altra informazione che ho (e che non ho menzionato prima) è il senso della dimensione del massimo richiesto. Mentre cerco un massimo globale, sarei anche felice con qualsiasi cosa di questa scala o più grande - non so se questo fornirebbe alcun aiuto. Spero che se faccio la proiezione in modo più sistematico (ipercubi latini come suggerito da Brian Borchers), questo verrà mostrato.


Quando si valuta la funzione obiettivo, produce ulteriori informazioni, esp. derivati ​​(o approssimazioni) rispetto ai parametri? Poiché la stessa funzione obiettivo è costosa da calcolare, è possibile che tali calcoli debbano essere munti per informazioni supplementari.
Hardmath,

(Un anno dopo), cosa sei finito facendo - variando alcuni dei 30 parametri, modello ...?
denis,

denis: sono stato in grado di usare un po 'di intuizione fisica (e fortuna) per indovinare i parametri più cruciali, e poi variare da loro per ottenere un risultato "abbastanza buono". (In questo caso, trovare l'esatto ottimale non era così importante come trovare una risposta abbastanza grande.) Non ho finito per aver bisogno della piena potenza di queste tecniche, ma è bello averle a portata di mano.
AJK

Ammesso che ciò avvenisse 2 anni e mezzo fa, ma hai una scelta del livello di accuratezza nella valutazione delle funzioni obiettive (simulazione deterministica) e puoi compensare l'accuratezza rispetto al tempo di esecuzione?
Mark L. Stone,

Risposte:


11

Gli algoritmi genetici sono una scelta molto scadente quando la funzione obiettivo è estremamente costosa da valutare: questi metodi richiedono molte valutazioni di funzione in ogni generazione (con cui il parallelismo può aiutare) e molte generazioni (che sono intrinsecamente sequenziali). Due giorni per generazione, questo sarebbe molto lento.

Non hai menzionato da dove provenga questo problema. Stai analizzando statisticamente una superficie di verosimiglianza (nel qual caso vorrai più dei parametri e del valore obiettivo ottimali) o semplicemente ottimizzando una funzione obiettivo?

Non hai menzionato se il calcolo della funzione obiettivo è preciso o impreciso. Spesso quando la funzione obiettivo viene calcolata dalla simulazione Monte Carlo, i valori sono piuttosto rumorosi. Ciò può indurre in errore molti algoritmi di ottimizzazione. I metodi della superficie di risposta aiutano a risolvere questo problema attenuando il rumore.

Non hai menzionato alcun vincolo sui parametri. Sono delimitati? Ci sono vincoli lineari o non lineari tra i parametri?

È probabile che la maggior parte dei 30 parametri non sia così importante per il problema. Suggerirei di utilizzare un approccio di screening di progettazione sperimentale per determinare prima quale dei 30 parametri sono veramente importanti nell'ottimizzazione, e poi dopo aver impostato valori ragionevoli per i parametri non importanti, ottimizzare sopra i parametri importanti. Metodi come il campionamento latino Hypercube possono essere molto utili nello screening dei parametri relativamente poco importanti. In questa fase di screening è possibile utilizzare facilmente centinaia di processori.

Dopo aver ridotto il numero di parametri a una dimensione più ragionevole, utilizzerei un metodo di superficie di risposta per ottimizzare i restanti parametri. Se la superficie di risposta è davvero multimodale e si utilizza un modello di superficie di risposta eccessivamente semplice (in genere la gente si adatta solo a un modello quadratico), si potrebbe facilmente essere fuorvianti e perdere il massimo globale. Stai attento! In questa fase è possibile utilizzare nuovamente numerosi processori utilizzando un design sperimentale che offre un'ottima copertura dello spazio dei parametri. Cerca i punti di progettazione in cui il modello montato è lontano dai valori calcolati, questo indica che la superficie di risposta non funziona bene in quella regione. Potrebbe essere necessario creare superfici di risposta in aree separate dello spazio dei parametri.

Come ultimo passo, puoi iniziare con i parametri dall'ottimizzazione della superficie di risposta e provare a migliorare i valori dei parametri schermati regolandoli uno alla volta (discesa delle coordinate).

Seguirò la raccomandazione di DAKOTA come framework per questo tipo di ottimizzazione. Se eseguirai questa ottimizzazione solo una volta, potrebbe essere più semplice organizzare i calcoli a mano, ma se lo farai ripetutamente, DAKOTA sarebbe molto utile.


4
  1. Non ho alcuna esperienza con questo tipo di solutori; alcuni dei miei colleghi li hanno usati. DAKOTA sembra essere il pacchetto software consigliato per questo tipo di attività. Include un'interfaccia che consente a un utente di inviare ripetutamente lavori a una coda di invio e utilizzare l'output per studi di parametri, analisi di sensibilità, ecc. Non ho abbastanza familiarità con esso da sapere se trarrà vantaggio o meno dall'esecuzione di molte simulazioni contemporaneamente.

  2. Supponendo che i parametri siano continui, se la figura di merito cambia in modo uniforme al variare dei parametri, un modello surrogato dovrebbe fare un ragionevole lavoro di adattamento della figura di merito e le informazioni derivate surrogate dovrebbero essere utili per raffinare la convergenza. Per 30 parametri, dovrebbero essere utili anche metodi di ottimizzazione senza derivati ​​deterministici; anche in questo caso, la scorrevolezza dovrebbe aiutare. Al contrario, gli algoritmi genetici non useranno affatto le informazioni derivate e spesso richiedono l'ottimizzazione di parametri come il tasso di mutazione, il tasso di ricombinazione e i parametri di selezione per ottenere buone prestazioni. Come scelta algoritmica, utilizzerei algoritmi genetici come fallback, perché mi aspetto che un'ottimizzazione surrogata ben progettata o un metodo di ottimizzazione deterministico privo di derivati ​​abbiano un comportamento di convergenza migliore.


Un paio di ragioni per cui l'uso di un metodo di ottimizzazione deterministico senza derivati ​​potrebbe non essere saggio. Innanzitutto, si tratta di metodi di ricerca locali che potrebbero finire per trovare un massimo locale e perdere un punto molto migliore altrove nello spazio dei parametri. In secondo luogo, questi metodi in genere richiedono molte iterazioni con relativamente poche valutazioni delle funzioni per iterazione, quindi non si parallelizzano bene.
Brian Borchers,

Hai ragione sui metodi di ricerca locali. Esistono metodi di ricerca globali (DIRECT, ricerca coordinate coordinata multilivello) che non costruiscono modelli surrogati e dovrebbero comportarsi meglio dei metodi di ricerca locali. Non posso parlare dell'efficacia di parallelizzare questi metodi.
Geoff Oxberry,

1

Dai un'occhiata a TOMLAB, DAKOTA e OpenMDAO per l'ottimizzazione della scatola nera.


Modifica n. 3: l'ottimizzazione bayesiana è molto simile a EGO:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

licenze limitate:

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


Modifica n. 2:

Il primo approccio è quello di costruire un metamodello / surrogato (usando kriging / GP) attorno a funzioni costose e utilizzare queste informazioni aggiuntive per trovare il punto ottimale globale più velocemente e con meno valutazioni (EGO).

Il secondo approccio, come in MDAS, è quello di fare una ricerca diretta con alcuni adattamenti intelligenti su più livelli.

Gli approcci euristici sono genetici / randomizzati in natura e senza alcuna garanzia.


Modifica n. 1:

TOMLAB è uno strumento basato su MATLAB che ha la migliore velocità / qualità di ottimizzazione secondo la carta di Sahinidis. Ma questo è uno strumento commerciale con un utilizzo aziendale significativo. Non lo sto usando.

DAKOTA è più personalizzato per la quantificazione dell'incertezza, oltre all'ottimizzazione generale. Basato su c ++ e alcuni codici Fortran legacy. Sebbene sotto licenza LGPL e binari disponibili per il download, è molto difficile ricompilare almeno dalla mia esperienza su Win7 con GCC o MSVS / ifort. Ha dipendenze su boost, lapack, cmake per build. Fondamentalmente questo è un wrapper per numerosi solutori open source e pochi commerciali. Questo è un prodotto SNL ed è strettamente integrato con altri progetti di Sandia NL. Sono stato in grado di integrare con successo questo invece di alcune routine IMSL. L'articolo di Sahinidis ha mancato il massiccio parallelismo possibile con DAKOTA.

OpenMDAO è un software di progettazione basato sull'ottimizzazione sviluppato in Python dalla NASA con licenza APACHE. Sto provando questo attualmente.


Benvenuto in SciComp! Come attualmente scritto, il tuo post non spiega davvero perché guardare TOMLAB o OpenMDAO sarebbe una buona idea (altre risposte già parlano di DAKOTA). Siamo alla ricerca di risposte che non solo forniscano raccomandazioni, ma discutiamo del motivo per cui tali raccomandazioni sono utili, potenziali insidie ​​e così via.
Geoff Oxberry,

Mi sono precipitato prima con la mia risposta e ora ho aggiunto una spiegazione.
denfromufa,

0

Se non puoi permetterti 30 corse, ognuna variando un parametro, variale in gruppi:
ad esempio, 8 corre ciascuno variando 4 parametri insieme, quindi affina i migliori 2 cicli / 8 parametri ...
(Non ho idea di come fare un compromesso guadagno di informazioni rispetto a runtime totale; bandito multi-armato ?)


-3

Ecco un codice che consente di ottimizzare in modo efficiente le costose funzioni della scatola nera utilizzando CPU multicore.

Una descrizione della matematica dietro il codice è fornita qui .


1
Questa è la stessa risposta che hai fornito in questo post . Inoltre, sembra che questo sia il tuo lavoro. Se questo è vero, si prega di dichiararlo esplicitamente nella risposta.
Nicoguaro

Potete fornire dettagli sull'approccio descritto nel documento e implementato nel software? Qual è il metodo usato? Perché va bene? Cosa viene fornito in questo approccio che le altre risposte non coprono?
Nicoguaro

1
Inoltre, tieni presente che sei l'autore di questo software , quindi chiunque legga questo sarà a conoscenza del fatto che a) sai di cosa stai parlando eb) potrebbe essere un po 'parziale.
Christian Clason,
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.