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.