Minimi quadrati non lineari con vincoli di riquadro


10

Quali sono i modi consigliati di eseguire i minimi quadrati non lineari, min , con vincoli di casella lo_j <= p_j <= hi_j ? Mi sembra (gli sciocchi si precipitano dentro) che si potrebbero rendere quadratici i vincoli della scatola e minimizzare \ sum_i err_i (p) ^ 2 + C * \ sum_j tub (p_j, lo_j, hi_j) ^ 2 where tub (x, lo, hi) è la "funzione vasca" a forma di \ _ _ _ /, max (lo - x, 0, x - hi) . Funziona in teoria, funziona in pratica? (Sembrano esserci molti articoli teorici su NLS +, ma il mio interesse è pratico: casi di test reali o realistici mi aiuterebbero a scegliere tra i metodi.)erri(p)2loj<=pj<=hij

ierri(p)2+Cjtub(pj,loj,hij)2
tub(x,lo,hi)max(lox,0,xhi)


(Esperti, si prega di aggiungere tag: "minimi quadrati"?)


5
La sostituzione di vincoli rigorosi con funzioni di penalità è una tecnica comune nell'ottimizzazione numerica. Sembra che ciò che stai proponendo sia una forma particolare di tale sostituzione. Puoi leggere tutto su tecniche simili, ad esempio qui: stanford.edu/~boyd/cvxbook
David Ketcheson

È possibile utilizzare una parametrizzazione adeguata di p per soddisfare i vincoli del riquadro (ad esempio pi=min(max(loj,pj),hij) . Per quanto riguarda i solutori NLS, Levenberg-Marquardt è abbastanza buono il più delle volte , forse combinato con un ottimizzatore stocastico globale come la ricottura simulata. Alcuni toolbox commerciali sembrano offrire anche metodi di regione di fiducia basati su modelli di superficie di risposta adattiva, che mi sembrano una ragionevole generalizzazione di Levenberg-Marquardt.
Thomas Klimpel

Risposte:


11

L'aggiunta di termini di penalità al quadrato per eliminare i vincoli è un approccio semplice che fornisce una precisione solo dell'ordine 1 / fattore di penalità. Quindi non è raccomandato per la massima precisione a meno che non si lasci andare la penalità all'infinito durante il calcolo. Ma un alto fattore di penalità rende l'Assia molto mal condizionata, il che limita la precisione totale ottenibile senza tener conto esplicitamente dei vincoli.

Si noti che i vincoli vincolati sono molto più facili da gestire rispetto ai vincoli generali, da cui non vengono praticamente mai convertiti in penalità.

Il solutore L-BFGS-B (usato con una storia di circa 5 dimensioni) di solito risolve i problemi vincolati legati in modo molto affidabile e veloce in entrambe le dimensioni alte basse. Le eccezioni sono errori di valutazione su problemi che possono diventare molto distanti dalle soluzioni, in cui è facile rimanere bloccati con un metodo di discesa.

Abbiamo fatto molti esperimenti su funzioni molto diverse in molte dimensioni diverse, con molti solutori diversi disponibili, poiché avevamo bisogno di un solutore molto vincolato con limiti nell'ambito del nostro software di ottimizzazione globale. L-BFGS-B si distingue chiaramente come metodo generico, anche se ovviamente per problemi di sme altri risolutori hanno prestazioni significativamente migliori. Quindi consiglierei L-BFGS-B come prima scelta e proverei tecniche alternative nel caso in cui L-BFGS-B gestisca male la tua particolare classe di problemi.


L-BFGS è disponibile in IPOPT, ho rivisto la mia risposta.
Ali,

5

Vorrei semplicemente usare il risolutore NLP per scopi generici IPOPT . È il solutore più robusto tra quelli che ho provato.

A meno che tu non abbia alcuni requisiti molto speciali, non vi è alcun motivo per cui dovresti insistere su un risolutore specifico del problema che funziona solo per NLS con vincoli di casella.

Una modifica dei requisiti (ad esempio l'aggiunta di vincoli non lineari) provocherebbe un forte mal di testa con un risolutore specifico del problema. Non si avranno tali problemi se si utilizza l'IPOPT generico.


AGGIORNAMENTO: Puoi provare L-BFGS con IPOPT , vedi sotto Quasi-Newton nella documentazione.

La procedura di soluzione può diventare più veloce a spese di rovinare la notevole robustezza di IPOPT. A mio avviso , utilizzare i derivati ​​esatti se sono disponibili. Avrei iniziato a fare casini con approssimazioni (come L-BFGS) solo se avessi dimostrato problemi di prestazioni.


Non so quanto funzioni bene IPOPT, ma il tuo suggerimento mi ricorda affermazioni simili fatte da sostenitori del metodo simplex in discesa. Poiché i minimi quadrati non lineari sono una classe di problemi comune, il rifiuto definitivo con uno dei solutori NLS esistenti mi sembra un po 'sospetto.
Thomas Klimpel,

@ThomasKlimpel Bene, Denis dovrebbe darci maggiori dettagli, quindi potremmo aiutarlo a scegliere il giusto risolutore. :) Oppure può controllarlo da solo e scoprire quale si adatta meglio alle sue esigenze. IPOPT sembra essere un buon risolutore per cominciare.
Ali

@Ali, puoi indicare alcuni "casi di test reali o realistici", per favore?
denis,

@denis Potrei ma non ho intenzione di farlo, ti butterebbe fuori pista. L'unica cosa che conta è come IPOPT gestisce il tuo problema . A meno che tu non abbia dei requisiti molto speciali, dovrebbe risolverlo bene. IPOPT ha interfacce per MATLAB, C ++, C, Fortran, R, AMPL, CUTEr. Scegli un'interfaccia e prova cosa succede con il tuo problema :) Testare un risolutore specifico del problema non sarebbe neanche più facile.
Ali

@Thomas Klimpel, suppongo di non essere stato chiaro: non sto rifiutando, non sto chiedendo dei pacchetti, ma chiedendo approfondimenti o casi di test: perché questo banale metodo non funziona bene?
denis,

1

Il pacchetto CRAN R minpack.lm fornisce un'implementazione Levenberg-Marquardt con vincoli di casella.

In generale, Levenberg-Marquardt è molto più adatto di L-BFGS-B per i problemi dei minimi quadrati. Convergerà (molto) meglio su problemi impegnativi. Sarà anche molto più veloce dell'IPOPT generico, poiché è adattato ai problemi dei minimi quadrati non lineari.

Il pacchetto R sceglie un approccio di proiezione molto semplice per applicare i vincoli (vedere il codice sorgente ). A seconda dell'implementazione LM che stai utilizzando, potrebbe essere semplice da includere.

Ora, il suggerimento nei commenti sull'uso di una trasformazione (ad esempio una trasformazione sinusoidale come in scipy) è anche una valida e semplice alternativa per trasformare il tuo algoritmo LM senza vincoli in uno vincolato. Dovrai anche includere la trasformazione nel giacobino se il giacobino è analitico.


0

(Anni dopo) due solutori che gestiscono i vincoli delle scatole:

  • Scipy least_squares ha 3 metodi, con ampio documento:

    1. 'trf': Trust Region Reflective
    2. 'Dogbox'
    3. 'lm': un wrapper legacy per MINPACK, senza vincoli di scatola.
  • ceres

1
Quello di Scipy afferma esplicitamente che l'algoritmo Levenberg-Marquardt non è in grado di gestire i vincoli delle scatole.
tholy,
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.