Trovare un minimo globale di una funzione 2D fluida, limitata e non convessa che sia costosa da valutare


17

Ho una funzione 2-D non convessa limitata che mi piacerebbe trovare il minimo di. La funzione è abbastanza fluida. La valutazione è costosa. Un errore accettabile è circa il 3% del dominio della funzione in ciascun asse.

Ho provato a eseguire l'implementazione dell'algoritmo DIRECT nella libreria NLOPT, ma non ha apportato un notevole miglioramento rispetto alla ricerca della forza bruta in termini di quantità di valutazioni delle funzioni necessarie per l'accuratezza richiesta e c'erano alcuni valori anomali.

Quali altri solutori dell'ottimizzazione globale dovrei considerare?


Puoi calcolare i gradienti o avresti bisogno di approssimarli con i quozienti di differenza?
Arnold Neumaier,

Devo approssimarli con i quozienti di differenza.
Victor,

In questo caso, il metodo di Newton non può essere raccomandato, poiché i secondi derivati ​​numerici sono numericamente molto instabili e difficili da sintonizzare per lavorare in sicurezza.
Arnold Neumaier,

@Victor May, con cosa sei finito? (Se potessi pubblicare una funzione simile alla tua, ciò aiuterebbe davvero le persone a confrontare e mettere a punto algoritmi diversi.)
denis

@Denis, stavo cercando di ottenere più velocità da un algoritmo per tracciare un oggetto nel video. L'output dell'algoritmo era una stima della probabilità per ogni posizione dell'immagine di contenere l'oggetto tracciato. L'immagine contenente queste stime di probabilità è la funzione che stavo cercando di ottimizzare. Ho finito con la forza bruta in diversi passaggi di risoluzione. Per ulteriori informazioni sull'algoritmo di tracciamento in questione, leggi l'articolo "Tracciamento basato su frammenti robusti utilizzando l'istogramma integrale".
Victor,

Risposte:


12

Vorrei suggerire un approccio un po 'diverso rispetto alle altre risposte, sebbene @barron abbia discusso indirettamente la stessa cosa.

Invece di ottimizzare direttamente la tua funzione, cioè valutandola in una serie di punti punti che (si spera) convergono in un (locale) ottimale, potresti usare il concetto di modellazione surrogata , che è molto adatto a problemi del tipo che descrivi (alto costo, liscio, limitato, di bassa dimensione, cioè meno di 20 incognite).X1,X2,...,XKmodellazione surrogata

In particolare, la modellazione surrogato funziona attraverso la creazione di una funzione di modello di della vostra vera funzione f R dR . La chiave è che mentre c ovviamente non rappresenta perfettamente f , è molto più economico da valutare.cRdRfRdRcf

Quindi, un tipico processo di ottimizzazione sarebbe il seguente:

  1. Valuta in un set di j punti iniziali x 1 , x 2 , , x j . Si noti che i derivati ​​non sono necessari. Si noti inoltre che questi punti dovrebbero essere distribuiti uniformemente in tutto lo spazio di ricerca, ad esempio tramite il campionamento latino Hypercube o un design simile di riempimento dello spazio.fjX1,X2,...,Xj
  2. Sulla base di questo set di dati originale, creare una funzione modello . È possibile utilizzare la convalida incrociata per convalidare il modello (ovvero utilizzare solo un sottoinsieme dei punti j originali per creare c , quindi utilizzare il resto del set di dati per verificare se c prevede tali valori)cjcc
  3. Utilizzare un criterio come il criterio di miglioramento atteso (EI) per scoprire dove "compilare" più campioni per rendere più accurato campionando f . Questo è in realtà molto meglio studiato teoricamente di quanto possa sembrare, e il criterio EI è molto ben studiato. Anche il criterio EI non è un criterio avido, quindi entrambi ottenete un buon miglioramento generale dell'accuratezza del modello, dando priorità all'accuratezza vicino a potenziali optima.cf
  4. Se il tuo modello non è abbastanza preciso, ripeti il ​​passaggio 3, altrimenti usa la tua routine di ottimizzazione preferita per trovare l'ottimale di , che sarà molto economico da valutare (in modo da poter usare qualsiasi routine che desideri, anche quelle che richiedono derivati, o semplicemente valutare la funzione in una mesh sottile).c

In generale, questo è ciò che si intende per EGO, l'ottimizzazione globale efficiente, come suggerito da @barron. Vorrei sottolineare che per la tua applicazione, questo sembra perfettamente adatto: ottieni un modello sorprendentemente accurato basato su relativamente poche valutazioni di e puoi quindi utilizzare qualsiasi algoritmo di ottimizzazione che desideri. Ciò che spesso è anche interessante è che ora puoi valutare c su una mesh e tracciarla, ottenendo così una visione dell'aspetto generale di f . Un altro punto interessante è che la maggior parte delle tecniche di modellazione surrogata fornisce anche stime di errori statistici, consentendo così la stima dell'incertezza.fcf

Come costruire è ovviamente una domanda aperta, ma spesso vengono usati i modelli di Kriging o i cosiddetti space mapping.c

Ovviamente, tutto questo è un bel po 'di lavoro di programmazione, ma molte altre persone hanno fatto ottime implementazioni. In Matlab, conosco solo la toolbox del software DACE DACE è gratuita. TOMLAB potrebbe anche offrire un pacchetto Matlab, ma costa denaro, tuttavia, credo che funzioni anche in C ++ e abbia molte più capacità di quelle che DACE avrà mai. (Nota: sono uno degli sviluppatori della nuova versione di DACE, che sarà presto rilasciata, che offrirà un supporto aggiuntivo per EGO.)

Spero che questa visione d'insieme ti abbia aiutato, per favore fai delle domande se ci sono punti che possono essere chiariti o cose che mi sono perso, o se desideri ulteriore materiale sull'argomento.


Fwiw, google surrogate-model apre un Surrogate Modeling Lab presso la Ghent University e un libro Engineering Design via Surrogate Modeling , 2008 228p 0470770791. Un problema con qualsiasi approccio molto generale è che presto avrai un lavello da cucina pieno di varianti di metodo, altro delle funzioni di test reali .
denis,


3

Per una funzione regolare, il metodo di ottimizzazione globale efficiente dovrebbe funzionare abbastanza bene ed essere notevolmente più efficiente di DIRECT. Le implementazioni sono disponibili in TOMLAB (non l'ho usato da solo) e DAKOTA (con cui ho avuto un certo successo).


1

Poiché la funzione è fluida, il metodo di Newton sarà il metodo più efficace per trovare un minimo. Poiché la funzione non è convessa, dovrete applicare i soliti trucchi per far convergere il metodo di Newton (modifica di Levenberg-Marquardt, ricerca di linee o regione di fiducia per globalizzare). Se non riesci a ottenere derivati ​​della tua funzione, prova a calcolarla tramite differenze finite o usando un aggiornamento BFGS. Se sospetti che il problema abbia più di un minimo locale, avresti semplicemente iniziato il metodo di Newton da una serie di punti scelti casualmente o non abbastanza casualmente e vedendo dove convergono.


Il mio problema ha davvero minimi locali. Quali sono i metodi per scegliere i punti di partenza?
Victor,

1
A meno che tu non sappia nulla del problema, il campionamento statistico è essenzialmente la tua unica scelta.
Wolfgang Bangerth,

@Wolfgang: Qualche idea su come affrontare il "campionamento statistico"? Prova solo 10, 100, ... ipotesi iniziali casuali? Esistono approcci "più rigorosi"? Chiedo, perché ho più o meno un problema simile (vedi scicomp.stackexchange.com/q/4708/1789 )
André

Tutto dipende da cosa sai della funzione. Se conosci qualcosa di simile a una "scala di lunghezza tipica" per la tua funzione che potrebbe fornire un'indicazione di quanto sarebbero separati gli estremi locali. Questo ti darà anche un'indicazione di quanti punti potresti dover iniziare e quanto distanti dovrebbero essere scelti l'uno dall'altro.
Wolfgang Bangerth,

0

Poiché le tue valutazioni sono costose, devi trarre vantaggio dall'esecuzione in parallelo delle valutazioni delle funzioni settoriali.

Ti consiglierei di dare un'occhiata a questo codice . La matematica dietro è descritta qui .


1
questo codice e questo articolo sono stati scritti da te? In tal caso, puoi dirlo esplicitamente nella tua risposta? Inoltre, ora puoi migliorare la risposta fornendo una descrizione del tuo suggerimento.
Nicoguaro
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.