Problema con minimi locali
Ciao a tutti.
Sono alle prese con una "funzione" piuttosto complessa che deriva da un modello ingressi-uscite caratterizzato da una ventina di parametri.
Abbiamo degli ingressi noti. immettiamo questi ingressi in questo modello e otteniamo dei valori in uscita.
Abbiamo anche i valori in uscita "misurati", quindi noti a priori.
Confrontiamo le uscite calcolate col modello con le "uscite" misurate calcolandone lo scarto quadratico medio (SQM).
In pratica l'obiettivo è un'operazione di taratura del modello. Si vuole cercare il set di parametri ottimale che minimizzi lo SQM tra i valori in uscita (artificiali) che produce il modello e quelli noti reali misurati.
Il tutto è implementato in un programma di calcolo che imposta un set di parametri di tentativo, e calcola lo SQM, poi applica delle variazioni ai parametri e ricalcola lo SQM e così via, cercando sempre uno SQM inferiore.
Il nostro SQM, può quindi essere visto come una "funzione" dei nostri 20 parametri.
Quello che accade (per come è scritto il programma, che non ho scritto io...) è che in corrispondenza di un minimo locale della funzione SQM, il programma tende ad applicare variazioni sempre inferiori ai parametri e finisce per non schiodarsi da quel minimo locale, quando invece magari ci sono altri minimi più bassi in corrispondenza di un set di parametri anche piuttosto "distante".
Generalizzando il problema, mi sto chiedendo se data una funzione di N incognite (i nostri parametri nel mio caso) ci sia qualche metodo per determinarne il minimo in modo da evitare di soffermarsi sui minimi locali e trattarli per quello che sono, proseguendo la ricerca anche in corrispondenza di set piuttosto diversi.
Quello che intendevo chiedere qua era qualche idea, qualche riferimento al tema trattato e qualche consiglio a documentazione dove viene spiegato qualche metodo per affrontare la cosa.
Spero di aver azzeccato la sezione giusta e spero di essermi spiegato anche in termini comprensibili nonostante non sia un esperto.
Qualsiasi vostro consiglio, commento, idea mi potrebbe essere utile, per cui non esitate a rispondere.
Grazie in anticipo!
PS.
Attualmente faccio semplicemente girare un po' il programma e quando vedo che il valore dello SQM si "assesta".
Salvo il risultato (il set di parametri tarati fino a quel punto). E fermo il programma.
Provo ad introdurre manualmente variazioni importanti ai parametri (un po' a caso...) e faccio ripartire il programma, che si potrebbe assestare questa volta in corrispondenza di un set di parametri diverso dal precedente. Si spera migliore (cioè che porta ad uno SQM inferiore al precedente).
Sono alle prese con una "funzione" piuttosto complessa che deriva da un modello ingressi-uscite caratterizzato da una ventina di parametri.
Abbiamo degli ingressi noti. immettiamo questi ingressi in questo modello e otteniamo dei valori in uscita.
Abbiamo anche i valori in uscita "misurati", quindi noti a priori.
Confrontiamo le uscite calcolate col modello con le "uscite" misurate calcolandone lo scarto quadratico medio (SQM).
In pratica l'obiettivo è un'operazione di taratura del modello. Si vuole cercare il set di parametri ottimale che minimizzi lo SQM tra i valori in uscita (artificiali) che produce il modello e quelli noti reali misurati.
Il tutto è implementato in un programma di calcolo che imposta un set di parametri di tentativo, e calcola lo SQM, poi applica delle variazioni ai parametri e ricalcola lo SQM e così via, cercando sempre uno SQM inferiore.
Il nostro SQM, può quindi essere visto come una "funzione" dei nostri 20 parametri.
Quello che accade (per come è scritto il programma, che non ho scritto io...) è che in corrispondenza di un minimo locale della funzione SQM, il programma tende ad applicare variazioni sempre inferiori ai parametri e finisce per non schiodarsi da quel minimo locale, quando invece magari ci sono altri minimi più bassi in corrispondenza di un set di parametri anche piuttosto "distante".
Generalizzando il problema, mi sto chiedendo se data una funzione di N incognite (i nostri parametri nel mio caso) ci sia qualche metodo per determinarne il minimo in modo da evitare di soffermarsi sui minimi locali e trattarli per quello che sono, proseguendo la ricerca anche in corrispondenza di set piuttosto diversi.
Quello che intendevo chiedere qua era qualche idea, qualche riferimento al tema trattato e qualche consiglio a documentazione dove viene spiegato qualche metodo per affrontare la cosa.
Spero di aver azzeccato la sezione giusta e spero di essermi spiegato anche in termini comprensibili nonostante non sia un esperto.
Qualsiasi vostro consiglio, commento, idea mi potrebbe essere utile, per cui non esitate a rispondere.
Grazie in anticipo!

PS.
Attualmente faccio semplicemente girare un po' il programma e quando vedo che il valore dello SQM si "assesta".
Salvo il risultato (il set di parametri tarati fino a quel punto). E fermo il programma.
Provo ad introdurre manualmente variazioni importanti ai parametri (un po' a caso...) e faccio ripartire il programma, che si potrebbe assestare questa volta in corrispondenza di un set di parametri diverso dal precedente. Si spera migliore (cioè che porta ad uno SQM inferiore al precedente).
Risposte
Il problema di "funzioni strane" con tanti minimi locali è un problema noto. Non so bene come sia la tua funzione però esistono degli algoritmi che possono essere utilizzati per trovare dei minimi globali. Il problema è che solitamente, a meno che il problema non sia banale (magari non sembra ma potrebbe esserlo), ci mettono parecchio (dipende dal codice e dal solutore). Potresti dare una occhiata a questo.
Intermat, grazie mille per la risposta. Se non altro mi rincuora sapere che il problema è ben noto e trattato da vari studi.
La funzione con cui ho a che fare, in realtà non è formulata del tipo f(x1,...,xn) = qualcosa.
Il modello che genera questa "funzione" è una schematizzazione di un bacino idrografico, in pratica ci sono dei serbatoi in serie, in parallelo e dei filtri di capacità (in pratica lasciano passare un tot di mm/secondo e l'eccedenza viene deviata). Presi uno per uno non sono poi oggetti complicatissimi.
Messi tutti insieme però diventa davvero complicato determinare la formula totale che genera l'output (deflusso), noto l'input (afflusso). Formula che in ogni caso dipenderebbe ancora da tutta una serie di parametri che caratterizzano gli oggetti di cui sopra.
Vista la complessità si ragiona in termini discreti e si immettono gli input uno per ogni ora (sono piogge in mm) e si calcola (col set di parametri di tentativo) l'uscita che si ottiene, uscita che può verificarsi sfasata temporalmente.
Alla fine del periodo considerato si ha una serie di uscite calcolate con il set di parametri di tentativo che abbiamo fissato all'inizio.
Per questa serie di uscite si va a calcolare lo SQM rispetto ai valori delle stesse uscite (deflussi reali) misurati e noti.
Quello che si vuole determinare è il set di parametri (X1,...,Xn) che minimizza lo SQM.
I tempi di calcolo sono per forza di cose piuttosto lunghi.
Questo modello in fase di taratura gira anche ore prima di raggiungere valori accettabili (sufficientemente bassi) dello SQM.
Però per come è stato scritto il programma, secondo me, potrebbe essere migliorato proprio sotto l'aspetto di non soffermarsi solo sull'intorno di minimi locali, ma di cercare anche altri set di parametri che potrebbero portare ad uno SQM ancora inferiore.
Per come la vedo io, da non esperto in teoria del calcolo numerico e simili, la cosa è complicata.
Inizierò a dare un'occhiata al documento che hai linkato.
Ho cercato di aggiungere qualche dettaglio in più alla faccenda perchè magari vi viene in mente anche qualche altro documento. O qualche spiegazione, idea etc.. Tutto è graditissimo!
Ovvio che poi i risultati devono avere una coerenza pratica. Si sta parlando di un modello fisico matematico che deve descrivere un fenomeno monitorato con misure note. Ma questo è un altro discorso.
Grazie ancora davvero!
La funzione con cui ho a che fare, in realtà non è formulata del tipo f(x1,...,xn) = qualcosa.
Il modello che genera questa "funzione" è una schematizzazione di un bacino idrografico, in pratica ci sono dei serbatoi in serie, in parallelo e dei filtri di capacità (in pratica lasciano passare un tot di mm/secondo e l'eccedenza viene deviata). Presi uno per uno non sono poi oggetti complicatissimi.
Messi tutti insieme però diventa davvero complicato determinare la formula totale che genera l'output (deflusso), noto l'input (afflusso). Formula che in ogni caso dipenderebbe ancora da tutta una serie di parametri che caratterizzano gli oggetti di cui sopra.
Vista la complessità si ragiona in termini discreti e si immettono gli input uno per ogni ora (sono piogge in mm) e si calcola (col set di parametri di tentativo) l'uscita che si ottiene, uscita che può verificarsi sfasata temporalmente.
Alla fine del periodo considerato si ha una serie di uscite calcolate con il set di parametri di tentativo che abbiamo fissato all'inizio.
Per questa serie di uscite si va a calcolare lo SQM rispetto ai valori delle stesse uscite (deflussi reali) misurati e noti.
Quello che si vuole determinare è il set di parametri (X1,...,Xn) che minimizza lo SQM.
I tempi di calcolo sono per forza di cose piuttosto lunghi.
Questo modello in fase di taratura gira anche ore prima di raggiungere valori accettabili (sufficientemente bassi) dello SQM.
Però per come è stato scritto il programma, secondo me, potrebbe essere migliorato proprio sotto l'aspetto di non soffermarsi solo sull'intorno di minimi locali, ma di cercare anche altri set di parametri che potrebbero portare ad uno SQM ancora inferiore.
Per come la vedo io, da non esperto in teoria del calcolo numerico e simili, la cosa è complicata.
Inizierò a dare un'occhiata al documento che hai linkato.
Ho cercato di aggiungere qualche dettaglio in più alla faccenda perchè magari vi viene in mente anche qualche altro documento. O qualche spiegazione, idea etc.. Tutto è graditissimo!
Ovvio che poi i risultati devono avere una coerenza pratica. Si sta parlando di un modello fisico matematico che deve descrivere un fenomeno monitorato con misure note. Ma questo è un altro discorso.
Grazie ancora davvero!

Il problema è che, per risolverlo, dovresti avere delle basi (almeno decenti) di ottimizzazione. Il problema non mi sembra banalissimo, considera che per molte questioni di questo tipo è più oneroso cercare la soluzione ottima piuttosto che non accettare una approssimata. Dei veri e propri testi non mi vengono in mente, probabilmente cercando su internet (magari in inglese) potresti trovare qualche paper di qualche professore. Non saprei.
PS: Non so su cosa stai lavorando nello specifico ma hai provato a modellare il problema come problema di ottimizzazione?
PS: Non so su cosa stai lavorando nello specifico ma hai provato a modellare il problema come problema di ottimizzazione?
È chiaro come dicevi che ci si accontenta di un set di parametri che porta ad uno SQM sufficientemente basso.
Quanto basso?
Stiamo lavorando alla cosa con altri, ognuno abbastanza autonomamente. E uno di noi è riuscito in un occasione ad ottenere uno SQM dell'ordine di circa "8E-2".
Mentre lui otteneva quel valore, sul mio PC il programma era stabilmente inchiodato intorno a uno SQM di "0.2". Era un minimo locale...
Mi ha suggerito di variare alcuni parametri di tot ed effettivamente nel giro di pochi minuti anche a me l' SQM arrivava a toccare valori centesimali come a lui.
La domanda a sto punto sarebbe, chi ci dice che no si tratti anche quello di un minimio locale e che magari ci sia un'altro set di parametri che conduce ad uno SQM ancora inferiore tipo 10^-4 ad esempio?
Bella domanda.
Tuttavia, prima di arrovellarsi oltre a minimizzare quell'entità, è meglio sempre capire se il modello funziona dal punto di vista fisico oppure se produce risultati "insensati".
Per lo scopo faccio delle altre verifiche, che non c'entrano con la discussione che ho aperto... del tipo vado a controllare che le grandezze prodotte (sono delle portate in m³/s...) abbiano coerenza con la realtà. Alla fine conta più questo che l'aspetto matematico stretto.
In effetti io non ho grandi basi sull'argomento ottimizzazione (e penso che dal mio post si veda anche), tuttavia ti chiederei: cosa intendi con "modellare il problema come problema di ottimizzazione"?
Grazie ancora della risposta!
EDIT:
Scusa ho dimenticato di aggiungere un particolare, questo programma genera un file di output chiamiamolo output.dat in cui vengono tabellati i valori delle "uscite" prodotte e il relativo set di parametri.
In pratica si può fermare il programma e fare un backup di quel file di output (esempio output.dat.dataeora.bk).
Poi si può modificare il file output.dat, variando a mano i valori dei parametri.
A quel punto si fa ripartire il programma dandogli in input il file output.dat modificato, e lui prende come set di parametri di partenza quelli che abbiamo modificato.
In pratica il file di output può essere usato come input per la successiva sessione di calcolo.
Quanto basso?
Stiamo lavorando alla cosa con altri, ognuno abbastanza autonomamente. E uno di noi è riuscito in un occasione ad ottenere uno SQM dell'ordine di circa "8E-2".
Mentre lui otteneva quel valore, sul mio PC il programma era stabilmente inchiodato intorno a uno SQM di "0.2". Era un minimo locale...
Mi ha suggerito di variare alcuni parametri di tot ed effettivamente nel giro di pochi minuti anche a me l' SQM arrivava a toccare valori centesimali come a lui.
La domanda a sto punto sarebbe, chi ci dice che no si tratti anche quello di un minimio locale e che magari ci sia un'altro set di parametri che conduce ad uno SQM ancora inferiore tipo 10^-4 ad esempio?
Bella domanda.
Tuttavia, prima di arrovellarsi oltre a minimizzare quell'entità, è meglio sempre capire se il modello funziona dal punto di vista fisico oppure se produce risultati "insensati".
Per lo scopo faccio delle altre verifiche, che non c'entrano con la discussione che ho aperto... del tipo vado a controllare che le grandezze prodotte (sono delle portate in m³/s...) abbiano coerenza con la realtà. Alla fine conta più questo che l'aspetto matematico stretto.
In effetti io non ho grandi basi sull'argomento ottimizzazione (e penso che dal mio post si veda anche), tuttavia ti chiederei: cosa intendi con "modellare il problema come problema di ottimizzazione"?
Grazie ancora della risposta!

EDIT:
Scusa ho dimenticato di aggiungere un particolare, questo programma genera un file di output chiamiamolo output.dat in cui vengono tabellati i valori delle "uscite" prodotte e il relativo set di parametri.
In pratica si può fermare il programma e fare un backup di quel file di output (esempio output.dat.dataeora.bk).
Poi si può modificare il file output.dat, variando a mano i valori dei parametri.
A quel punto si fa ripartire il programma dandogli in input il file output.dat modificato, e lui prende come set di parametri di partenza quelli che abbiamo modificato.
In pratica il file di output può essere usato come input per la successiva sessione di calcolo.
Modellare il problema come problema di ottimizzazione vuol dire scriverlo nella forma:
$min f(x)$
$text(subject to:)$
$text (vincoli)$
Qualcosa del genere. Una tale forma ti permette di avere chiaro cosa stai facendo. La tua $f(x)$ dovrebbe essere lo SQM mentre i vincoli non saprei. Un problema scritto in tale modo potrebbe essere risolto con un solutore (ne conosco solamente a pagamento, molto molto cari). Ad esempio Matlab ha un sistema che permette di risolvere problemi di ottimo globale attraverso diversi metodi (non so bene come funziona perché l'ho solo visto fatto durante un seminario).
$min f(x)$
$text(subject to:)$
$text (vincoli)$
Qualcosa del genere. Una tale forma ti permette di avere chiaro cosa stai facendo. La tua $f(x)$ dovrebbe essere lo SQM mentre i vincoli non saprei. Un problema scritto in tale modo potrebbe essere risolto con un solutore (ne conosco solamente a pagamento, molto molto cari). Ad esempio Matlab ha un sistema che permette di risolvere problemi di ottimo globale attraverso diversi metodi (non so bene come funziona perché l'ho solo visto fatto durante un seminario).
Non posso che ringraziarti per le risposte.
Mi pare di capire, e questo l'avevo già intuito prima di aprire il topic, che la questione non è facile. Sia in generale per me che non ho mai avuto a che fare con argomenti "teorici" così "spinti", sia nello specifico della modellazione con cui sono alle prese.
Devo anche dire, che questo aspetto è caduto negli ultimi giorni un po' in secondo piano, perchè abbiamo visto che pur minimizzando lo SQM, il set di parametri ottenuto in fase di calibrazione, da luogo a degli output che per dirla semplice "non stanno nè in ciel nè in terra". Quindi l'attenzione mia e delle persone che stanno collaborando con me si è spostata su altri fronti.
Quando parli di "vincoli" a me viene in mente proprio questo, cioè lo SQM deve essere minimizzato, ma i risultati devono anche avere certe caratteristiche (nel mio caso devono essere "simili o comparabili" con valori realmente registrati da strumenti di misura, ovvero nella fattispecie idrometri).
Capire bene quali siano questi vincoli e razionalizzarli in modo da introdurli nel problema in modo quanto più rigoroso sarà un prossimo step su cui ho già richiamato l'attenzione degli altri cervelli.
Inoltre il modello come dicevo riceve degli input (si tratta di piogge registrate). Per sperare di essere funzionante in modo corretto dovrebbe ricevere in input la pioggia realmente caduta su tutta l'area interessata. Invece questo valore di pioggia non è noto perchè si hanno solo misure puntuali grazie a pluviometri sparsi sul territorio (e sono pochini per avere un'informazione adeguata).
In pratica gli ingressi sono frutto di una ulteriore modellazione, che andrà sicuramente affinata, ma che inevitabilmente porta e porterà sempre con se un errore (potenzialmente anche grande).
L'errore poi si ripercuote sul modello... E forse è per questo che alla fine il nostro SQM che matematicamente (ma anche fisicamente in teoria) ha il suo perchè, poi alla fine viene un po' messo in secondo piano se i risultati finali non sono ragionevoli e quindi accettabili.
Non so se mi sono spiegato, ma era tanto per contestualizzare la domanda. Il problema è noto come rainfall-runoff modelling. Vedrò come suggerivi cosa dice la letteratura in merito. Ben sapendo che la faccenda è tutt'altro che banale.
Torno a ringraziarti, mi hai dato degli spunti interessanti che magari (spero) riuscirò a comprendere meglio strada facendo. Nonostante non sia in grado al momento di afferrare tutto (beata ignoranza), è stato comunque un piacere poter leggere la tua risposta da cui traspare una certa esperienza e preparazione. Se mai avessi qualche altra domanda su questi temi, magari qualcosa di più definito e specifico, mi rifarò vivo.
Alla prossima!
Mi pare di capire, e questo l'avevo già intuito prima di aprire il topic, che la questione non è facile. Sia in generale per me che non ho mai avuto a che fare con argomenti "teorici" così "spinti", sia nello specifico della modellazione con cui sono alle prese.
Devo anche dire, che questo aspetto è caduto negli ultimi giorni un po' in secondo piano, perchè abbiamo visto che pur minimizzando lo SQM, il set di parametri ottenuto in fase di calibrazione, da luogo a degli output che per dirla semplice "non stanno nè in ciel nè in terra". Quindi l'attenzione mia e delle persone che stanno collaborando con me si è spostata su altri fronti.
Quando parli di "vincoli" a me viene in mente proprio questo, cioè lo SQM deve essere minimizzato, ma i risultati devono anche avere certe caratteristiche (nel mio caso devono essere "simili o comparabili" con valori realmente registrati da strumenti di misura, ovvero nella fattispecie idrometri).
Capire bene quali siano questi vincoli e razionalizzarli in modo da introdurli nel problema in modo quanto più rigoroso sarà un prossimo step su cui ho già richiamato l'attenzione degli altri cervelli.
Inoltre il modello come dicevo riceve degli input (si tratta di piogge registrate). Per sperare di essere funzionante in modo corretto dovrebbe ricevere in input la pioggia realmente caduta su tutta l'area interessata. Invece questo valore di pioggia non è noto perchè si hanno solo misure puntuali grazie a pluviometri sparsi sul territorio (e sono pochini per avere un'informazione adeguata).
In pratica gli ingressi sono frutto di una ulteriore modellazione, che andrà sicuramente affinata, ma che inevitabilmente porta e porterà sempre con se un errore (potenzialmente anche grande).
L'errore poi si ripercuote sul modello... E forse è per questo che alla fine il nostro SQM che matematicamente (ma anche fisicamente in teoria) ha il suo perchè, poi alla fine viene un po' messo in secondo piano se i risultati finali non sono ragionevoli e quindi accettabili.
Non so se mi sono spiegato, ma era tanto per contestualizzare la domanda. Il problema è noto come rainfall-runoff modelling. Vedrò come suggerivi cosa dice la letteratura in merito. Ben sapendo che la faccenda è tutt'altro che banale.
Torno a ringraziarti, mi hai dato degli spunti interessanti che magari (spero) riuscirò a comprendere meglio strada facendo. Nonostante non sia in grado al momento di afferrare tutto (beata ignoranza), è stato comunque un piacere poter leggere la tua risposta da cui traspare una certa esperienza e preparazione. Se mai avessi qualche altra domanda su questi temi, magari qualcosa di più definito e specifico, mi rifarò vivo.

Alla prossima!
