[Matlab] Convergenza Media
Buongiorno a tutti,
ho un algoritmo che, semplificando, ad ogni iterazione mi restituisce dei valori $W_i$ di peso, fino ad ora ho supposto bastassero 1000 cicli per far convergere la media $\mu_W$ ma mi sono accorto che con alcuni parametri anche dopo 1000 iterazioni la media cumulata oscilla (vedasi figura)

Volevo chiedervi come poter determinare ad ogni iterazione se la media sta ancora oscillando e di conseguenza stoppare o non stoppare l'algoritmo.
Grazie
G. Meroni
ho un algoritmo che, semplificando, ad ogni iterazione mi restituisce dei valori $W_i$ di peso, fino ad ora ho supposto bastassero 1000 cicli per far convergere la media $\mu_W$ ma mi sono accorto che con alcuni parametri anche dopo 1000 iterazioni la media cumulata oscilla (vedasi figura)

Volevo chiedervi come poter determinare ad ogni iterazione se la media sta ancora oscillando e di conseguenza stoppare o non stoppare l'algoritmo.
Grazie
G. Meroni
Risposte
Non mi sembra che si possa dare una risposta in modo semplice. Ad esempio, a qualcosa come 1800 iterazioni il tuo parametro si era già assestato su un valore, e già da un pò, però dopo 2000 iterazioni si assesta su un altro, anche se di poco più grande. Un'idea banale può essere confrontare il nuovo valore con la media di un certo numero di valori precedenti. Se il discostamento è piccolo allora può essere che l'algoritmo sia giunto a convergenza. Un pò più raffinato: puoi dare uno sguardo al range (|valore max - valore min|), o alla varianza, di un certo numero di valori precedenti e vedere se in percentuale è piccolo rispetto al nuovo valore. Ovviamente se hai dei plateau (come quello che ho evidenziato prima) potresti comunque sbagliare, ma questo non mi sembra risolvibile in alcun modo.
"elgiovo":
Non mi sembra che si possa dare una risposta in modo semplice. Ad esempio, a qualcosa come 1800 iterazioni il tuo parametro si era già assestato su un valore, e già da un pò, però dopo 2000 iterazioni si assesta su un altro, anche se di poco più grande. Un'idea banale può essere confrontare il nuovo valore con la media di un certo numero di valori precedenti. Se il discostamento è piccolo allora può essere che l'algoritmo sia giunto a convergenza. Un pò più raffinato: puoi dare uno sguardo al range (|valore max - valore min|), o alla varianza, di un certo numero di valori precedenti e vedere se in percentuale è piccolo rispetto al nuovo valore. Ovviamente se hai dei plateau (come quello che ho evidenziato prima) potresti comunque sbagliare, ma questo non mi sembra risolvibile in alcun modo.
Elgiovo hai colto nel segno, il problema sono proprio questi plateau che rovinano ogni piano. Son giorni che sto cercando di trovare un modo per poter definire un algoritmo di stopping ma proprio non ci riesco.
Come ho già detto, non credo ci sia soluzione ai plateau. Forse ti conviene fare delle analisi di caso peggiore di convergenza, ad esempio prendendo un caso in cui sei abbastanza certo del risultato e facendo variare le condizioni iniziali per vedere qual è la configurazione peggiore che ti porta a convergenza nel maggior numero di passi.
Comunque il valore del plateau, in percentuale, mi sembra molto vicino a quello del plateau successivo (sarà un 250.5 contro 250.6...). E' un problema se prendi il primo dei due valori di plateau?
Comunque il valore del plateau, in percentuale, mi sembra molto vicino a quello del plateau successivo (sarà un 250.5 contro 250.6...). E' un problema se prendi il primo dei due valori di plateau?
Purtroppo essendoci moltissime soluzioni "buone" circa 60% delle soluzioni sono molto simili, è molto importante trovare il "meglio del meglio" e quindi un 0.1g è molto importante, soprattutto se si ragiona in termini monetari, un risparmio di 0.1g su una produzione industriale potrebbe generare molti € di risparmio.
Purtroppo essendo funzione di molti parametri all'ingresso, le simulazioni sono molto diverse tra di loro e le iterazioni per andare a convergenza passano da 1000 a 4000. Una simulazione in caso peggiore porterebbe un aumento dei tempi di calcolo veramente importante.
Proverò a dargli un target per il range(max-min) da raggiungere mediato su un tot di iterazioni, ma purtroppo al 90% mi si stopperà al 1° plateau
Purtroppo essendo funzione di molti parametri all'ingresso, le simulazioni sono molto diverse tra di loro e le iterazioni per andare a convergenza passano da 1000 a 4000. Una simulazione in caso peggiore porterebbe un aumento dei tempi di calcolo veramente importante.
Proverò a dargli un target per il range(max-min) da raggiungere mediato su un tot di iterazioni, ma purtroppo al 90% mi si stopperà al 1° plateau

Scusa la banalità della domanda ma il fatto che sul grafico ci sia la linea rossa orizzontale significa che tu conosci il vale atteso per la media?
"Edo_Rm":
Scusa la banalità della domanda ma il fatto che sul grafico ci sia la linea rossa orizzontale significa che tu conosci il vale atteso per la media?
La linea nera è la media cumulata, la linea rossa non è altro che il valore della media a "fondoscala" ossia a iterazione completata.
Devi calcolare i valori di MSPE per la media e la varianza con evoluzione nei run e arrestare quando essi si sono stabilizzati a un valore statisticamente nullo.