Pacchetto software per l'ottimizzazione vincolata?


21

Sto cercando di risolvere un problema di ottimizzazione vincolata in cui conosco i limiti di alcune delle variabili (in particolare un vincolo inscatolato).

argminuf(u,x)

soggetto a

a d ( u , x ) b

c(u,x)=0
ad(u,x)b

dove u è un vettore di variabili di progettazione, x è un vettore di variabili di stato e c(u,x) è un vincolo di uguaglianza (di solito un PDE). I vincoli inferiore e superiore a e b possono essere spazialmente variabile.

Quali pacchetti sono in grado di gestire sistemi di questo modulo?


1
La versione modificata non sembra un problema di ottimizzazione vincolata dalla casella. Un problema di ottimizzazione vincolato dalla casella avrebbe un vincolo \ leq u \ leq baub . È u doveva essere una funzione di x ? È c lineare u ? In caso contrario, è due volte differenziabile? È f convessa in u ? E 'due volte differenziabile in u ? Infine, argminu indica l'insieme di punti in u in cui viene raggiunto il valore minimo di f . Intendi invece minu ?
Geoff Oxberry,

d(u,x)=u è un caso speciale, ma questa forma più generale è in realtà comune nella pratica. È sempre possibile introdurre variabili aggiuntive se il metodo può trattare solo con vincoli direttamente su . Di solito siamo più interessati al valore al quale viene raggiunto un minimo che al valore minimo di . Sean ha aggiunto il tag [pde], quindi potresti averne un po 'di regolarità. Non ha affermato se il sistema fosse iperbolico o meno, quindi non assumiamo. Non supponiamo che sia convesso, poiché spesso non lo è. u f fuuff
Jed Brown,

È abbastanza comune per coinvolgere la regolarizzazione o , quindi non dovremmo assumere due derivati. L 1 W 1 , 1fL1W1,1
Jed Brown,

@JedBrown: ha senso; era confuso vedere "vincolo di casella" menzionato senza, ovviamente, un vincolo di casella esplicito. Per i tipi di problemi di cui stai parlando (problemi di progettazione, problemi di controllo), è sicuramente più interessante, ma i problemi di ottimizzazione sono in genere valutate con il di notazione, e il loro set di soluzioni sono descritti utilizzando il notazione. m i n arg minuminargmin
Geoff Oxberry,

Può essere utile specificare in quale lingua / ambiente modellare i PDE. Potrebbe limitare la scelta degli ottimizzatori.
Dominique,

Risposte:


18

Ho deciso di modificare radicalmente la mia risposta sulla base di alcuni dei commenti.

Non ho usato TAO. Dando un'occhiata alla documentazione, sembra che l'unico modo in cui TAO sia in grado di gestire i problemi di ottimizzazione vincolata (escluso il caso speciale dei soli vincoli di scatola) è di convertire il problema in una disuguaglianza variazionale usando le condizioni di Karush-Kuhn-Tucker (KKT) , che sono necessari in base alla qualifica di vincolo (il tipo che di solito vedo è la condizione del punto Slater ) e sufficiente sotto convessità dell'obiettivo e dei vincoli (più in generale, l'invessità di tipo 1). Sefnon è convesso, la formulazione della disuguaglianza variazionale usando le condizioni di KKT NON è equivalente al problema di ottimizzazione originale, quindi in senso stretto, se si desidera un ottimale globale per il problema di ottimizzazione, non si deve esprimerlo come una disuguaglianza variazionale. Sarebbe difficile trovare comunque un ottimo globale per l'ottimizzazione vincolata alla PDE (vedi sotto), quindi forse ignorare questo dettaglio va bene. Dato ciò che Wolfgang ha detto, sarei scettico sull'uso del TAO; Sono già scettico perché non implementa metodi per risolvere i programmi non lineari (PNL) come PNL, piuttosto che disuguaglianze variazionali.

Non sono un esperto di ottimizzazione vincolata alla PDE; i miei collaboratori e i miei collaboratori lavorano su problemi di ottimizzazione vincolati da ODE. So che per le formulazioni intrusive, Larry Biegler (e altri) utilizzerà i metodi di collocazione per discretizzare il PDE e renderlo un PNL molto ampio e rado, e quindi lo risolverà utilizzando metodi di punti interni. Per risolvere veramente il problema dell'ottimalità globale, dovresti anche generare rilassamenti convessi, ma per quanto ne so, questo approccio non viene adottato perché i problemi di ottimizzazione vincolati dalla PDE portano a PNL così grandi che sarebbe difficile risolverli ottimalità globale. Cito questi dettagli solo perché la formulazione del problema influenza fortemente la scelta del pacchetto di risoluzione. Per le formulazioni non invasive, le soluzioni PDE ripetute forniscono informazioni sul gradiente per gli algoritmi di ottimizzazione.

Alcune persone che studiano problemi di ottimizzazione vincolati da ODE usano un approccio simile per discretizzare il problema usando la collocazione e un metodo numerico, e quindi rilassando la PNL risultante per produrre una formulazione convessa utilizzata in un algoritmo di ottimizzazione globale. Un approccio alternativo all'ottimizzazione vincolata da ODE è quello di allentare il problema e quindi discretizzare l'ODE, che è l'approccio adottato nel mio laboratorio. Potrebbe essere possibile rilassare alcune classi di problemi di ottimizzazione vincolati dalla PDE, ma non conosco alcun lavoro esistente svolto su tale problema. (Era un potenziale progetto nel mio laboratorio ad un certo punto.)

In definitiva, ciò che conta non è la differenziabilità della PDE originale, ma la differenziazione della discretizzazione rispetto alle variabili decisionali.

Se il problema discretizzato è due volte differenziabile rispetto alle variabili di decisione, i seguenti pacchetti calcoleranno una soluzione locale:

  • IPOPT è un risolutore di punti per interni open source sviluppato da Andreas Wächter presso IBM. È un codice di altissima qualità. Come risolutore di punti interni, è meglio per le funzioni oggettive con matrici giacobine grandi e sparse e sarebbe utile per l'ottimizzazione limitata dalla PDE
  • SNOPT è un solutore di programmazione quadratica sequenziale commerciale che è un altro codice di alta qualità. È meglio per le funzioni oggettive con matrici giacobine piccole e dense, quindi non mi aspetterei che sia utile per l'ottimizzazione limitata dalla PDE, ma potresti provarci.
  • NLopt è un piccolo codice open source scritto da Steven Johnson al MIT che contiene implementazioni di base di numerosi algoritmi di ottimizzazione non lineare. Tutti gli algoritmi dovrebbero essere adeguati per risolvere problemi limitati.
  • fmincon in Matlab implementa una serie di algoritmi (inclusi punti interni e programmazione quadratica sequenziale) per l'ottimizzazione non lineare
  • GAMS e AMPL sono entrambi linguaggi di modellazione commerciale utilizzati per formulare problemi di ottimizzazione e contengono interfacce per un gran numero di solutori di programmazione non lineari. So che GAMS ha una versione di prova che può essere utilizzata per problemi minori e che anche le istanze del problema possono essere inviate al server NEOS per una soluzione.

Tuttavia, è possibile che la discretizzazione sia solo una volta differenziabile rispetto alle variabili di decisione, nel qual caso, è necessario utilizzare la discesa più ripida prevista o qualche altro metodo di ottimizzazione del primo ordine quando si calcola una soluzione locale. Poiché molti studi si concentrano sui problemi in cui è possibile utilizzare metodi del secondo ordine (e quando è possibile utilizzarli, le loro proprietà di convergenza superiori li rendono una scelta migliore), non sono riuscito a trovare molte implementazioni di discesa più ripida che non fossero soluzioni a problemi di compiti a casa. La GNU Scientific Library ha un'implementazione, ma è solo a scopo dimostrativo. Probabilmente dovrai codificare la tua implementazione.

Se il problema è continuo solo rispetto alle variabili decisionali, è possibile utilizzare metodi diretti per risolverlo localmente. Esiste un eccellente sondaggio sui metodi diretti di Kolda, Lewis e Torczon . Il più noto di questi metodi è l' algoritmo simplex Nelder-Mead . Non è garantito che converga ad un minimo locale in più dimensioni, ma ha trovato comunque un uso pratico considerevole.

La scelta del pacchetto dipende davvero dalla lingua che si desidera utilizzare per risolvere il problema, se la risoluzione del problema vincolato è solo una parte di un algoritmo che si desidera implementare (o se è l'unico passaggio nel proprio algoritmo, nel qual caso i linguaggi di modellazione diventa più praticabile per il codice di produzione), il tipo e la dimensione del problema e se è necessario un parallelismo.


4

Abbiamo provato TAO ma lo abbiamo trovato non molto utile per problemi legati alla disuguaglianza. È anche essenzialmente in modalità di manutenzione almeno dal 2003, senza nuove vere funzionalità oltre agli aggiornamenti per tenere traccia delle modifiche in PETSc su cui è costruito.


3

Un'altra alternativa è OPT ++ . Supporta vincoli lineari e non lineari con un efficiente risolutore di punti interno non lineare, fornisce il controllo dell'accuratezza delle funzioni (se è richiesta una differenziazione numerica), il controllo delle dimensioni dei gradini, ecc. In genere sto ottimizzando grandi funzioni implicite (ad esempio FEM) in cui questi tipi di i controlli possono essere utili.


Potresti approfondire il motivo per cui OPT ++ è un buon pacchetto da usare? Tu (o i tuoi colleghi) avete qualche esperienza con esso?
Geoff Oxberry,

Per essere chiari, non ho motivo di dire che OPT ++ è superiore a nessuno di quelli che hai elencato in precedenza perché non ho alcuna esperienza con quelli (anche se ne ho aggiunti alcuni segnalibri per verificarli). Ma ho esperienza con OPT ++ e l'ho trovato adatto alle mie esigenze. Supporta vincoli lineari e non lineari con un efficiente risolutore di punti interno non lineare, fornisce il controllo dell'accuratezza delle funzioni (se è richiesta una differenziazione numerica), il controllo delle dimensioni dei gradini, ecc. In genere sto ottimizzando grandi funzioni implicite (ad esempio FEM) in cui questi tipi di i controlli possono essere utili.
Barron,

2
@Barron: dovresti averlo inserito nella tua risposta per cominciare. :)
JM

2

Se il problema è formulato come un problema di complementarità, è possibile utilizzare TAO (Toolkit for Advanced Optimization). Alcuni dei metodi in TAO, come il metodo dello spazio ridotto (una variante del metodo del set attivo), sono attualmente disponibili come parte di SNES in PETSc ( SNESVI ).


1

[,+]

Non credo che MINUTE funzionerà bene per le tue esigenze, ma la trasformazione potrebbe essere costretta a scrivere tu stesso tutto o parte del codice.


Quella trasformazione sembra brutta; non c'è da stupirsi che sia accompagnato da un paio di paragrafi.
Geoff Oxberry,

1

Come sottolineato da @Geoff Oxberry, diversi pacchetti consentono di trovare una soluzione locale. Se si desidera poter confrontare questi diversi solutori NLP per uno stesso problema, è possibile utilizzare RobOptim .

Sebbene RobOptim sia stato inizialmente sviluppato pensando ai problemi di ottimizzazione della robotica, è adatto a qualsiasi problema di ottimizzazione non lineare. Fornisce una semplice interfaccia C ++ con plugin per più solutori NLP (ad es. Ipopt, NAG). Se non è possibile fornire gradienti, il calcolo delle differenze finite può essere eseguito automaticamente.

È open source, quindi puoi controllare il codice sorgente su GitHub: https://github.com/roboptim/

Nota: sono uno degli sviluppatori di questo progetto.


1
Dovrebbe sottolineare che altre risposte descrivono i risolutori , non i framework. È più facile trovare un framework accettabile ( driver ) che un buon risolutore,
Deer Hunter,

@DeerHunter Quando stai cercando un risolutore per risolvere un determinato problema, è spesso difficile sapere a priori quale risolutore calcolerà la soluzione migliore e / o sarà il più veloce. Stai parlando di un "buon risolutore", ma questo dipende davvero da cosa stai risolvendo: non esiste un risolutore "migliore in assoluto". Inoltre, le API del risolutore sono in genere piuttosto diverse, quindi l'utilizzo di un buon framework che consente di passare facilmente da un risolutore a un altro può essere davvero utile. La domanda riguardava i "pacchetti software per l'ottimizzazione vincolata" e anche i framework rientrano in questa categoria.
BenC,

1

Ecco un elenco parziale di pacchetti di ottimizzazione vincolati PDE.

Dolfin Adjoint fa parte di FEniCS FEM:

http://dolfin-adjoint.org/

ROL, MOOCHO, Sundance fanno parte dei trilinos:

https://github.com/trilinos/trilinos/tree/master/packages/rol/

https://github.com/trilinos/trilinos/tree/master/packages/Sundance/

http://trilinos.org/packages/moocho/

Esempio PYOMO per l'ottimizzazione vincolata alla PDE:

https://software.sandia.gov/trac/pyomo/browser/pyomo/trunk/examples/dae

Il manuale TAO fornisce esempi di risoluzione dei problemi di ottimizzazione vincolati alla PDE:

http://www.mcs.anl.gov/petsc/petsc-3.5/docs/tao_manual.pdf


1
Benvenuti su SciComp.SE! Fornire un collegamento (per quanto utile sia) non è davvero una buona risposta; vedi meta.stackexchange.com/questions/8231 . Potresti approfondire un po 'questo (linguaggio informatico, che tipo di vincoli possono essere trattati, quali metodi sono implementati, ecc.)?
Christian Clason,

Sono d'accordo con @ChristianClason. C'è stato un sostanziale sviluppo di solutori per software di ottimizzazione vincolato PDE; tuttavia, questa risposta non fornisce sostanzialmente alcun background su quali algoritmi implementano effettivamente quei pacchetti.
Geoff Oxberry,

0

I pacchetti APM MATLAB e APM Python sono in grado di risolvere sistemi su larga scala (100.000+ variabili) di sistemi di equazioni algebriche differenziali a numero intero intero. Il software è disponibile come servizio Web per uso commerciale o accademico. Se si sta risolvendo un sistema PDE, è possibile discretizzare una volta per inserirlo nel modulo DAE o ODE per inserirlo nel linguaggio di modellazione APMonitor. Il linguaggio di modellazione utilizza solutori APOPT , BPOPT, IPOPT, SNOPT e MINOS.


1
Si prega di rivelare la propria affiliazione come sviluppatore APMonitor in questa e future risposte che menzionano il proprio software. Consulta le FAQ per i dettagli sulla nostra politica di divulgazione.
Geoff Oxberry,

Geoff, grazie per la punta. Ho iniziato a lavorare sulla piattaforma APMonitor nel 2004 come studente laureato presso l'Università del Texas ad Austin. Ora lo usiamo nel nostro gruppo di ricerca presso la Brigham Young University per il controllo e l'ottimizzazione dei processi ( apm.byu.edu/prism ) di applicazioni biologiche, chimiche, aerospaziali e di altro tipo. Lo rendo liberamente disponibile per utenti commerciali o accademici.
John Hedengren,
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.