Confronto tra due algoritmi genetici


9

Ho due implementazioni di un algoritmo genetico che dovrebbero comportarsi in modo equivalente. Tuttavia, a causa di restrizioni tecniche che non possono essere risolte, il loro output non è esattamente lo stesso, dato lo stesso input.

Mi piacerebbe comunque dimostrare che non vi è alcuna differenza significativa nelle prestazioni.

Ho 20 corse con la stessa configurazione per ciascuno dei due algoritmi, usando semi di numeri casuali iniziali diversi. Per ogni corsa e generazione è stata registrata la minima idoneità all'errore della persona migliore nella popolazione . L'algoritmo impiega un meccanismo di conservazione dell'élite, quindi la forma fisica dell'individuo migliore sta diminuendo monotonicamente. Una corsa è composta da 1000 generazioni, quindi ho 1000 valori per corsa. Non riesco a ottenere più dati, poiché i calcoli sono molto costosi.

Quale test dovrei usare? Un modo semplice sarebbe probabilmente quello di confrontare l'errore solo nelle ultime generazioni (di nuovo, quale test dovrei usare qui)? Ma si potrebbe anche pensare di confrontare il comportamento di convergenza in generale.


Proprio come un chiarimento: non è un caso che un algoritmo genetico cerchi casualmente una soluzione, quindi è improbabile che il segmento iniziale di una corsa produca una soluzione utile? Inoltre, cosa intendi esattamente con "l'errore minimo nella popolazione"? Se intendi la differenza minima tra un valore vero noto e una soluzione tra i 1000 valori in una corsa, allora non è forse un'indicazione distorta del risultato della corsa? Dopotutto, in pratica accetteresti la soluzione finale in ogni corsa e rifiuteresti tutto ciò che la precede, giusto?
whuber

Per errore intendo fondamentalmente 1 / fitness, quindi sto parlando del valore dell'individuo migliore in una generazione. Ho registrato il valore di fitness della persona migliore per ogni generazione. Quindi ho 1000 * 20 * 2 numeri, ciascuno corrispondente alla "forma fisica" del miglior individuo in una particolare generazione di una determinata corsa.
nisc,

Immagino che la domanda iniziale fosse
sbagliata

Risposte:


9

Testare algoritmi stocastici può essere piuttosto complicato!

Lavoro nella biologia dei sistemi e ci sono molti simulatori stocastici disponibili per simulare un modello. Testare questi simulatori è complicato poiché due realizzazioni di un singolo modello saranno in genere diverse.

Nel dsmts abbiamo calcolato (analiticamente) il valore atteso e la varianza di un particolare modello. Quindi eseguiamo un test di ipotesi per determinare se un simulatore differisce dalla verità. La sezione 3 della guida agli utenti fornisce i dettagli. Sostanzialmente facciamo un test t per i valori medi e un test chi quadro per le varianze.

Nel tuo caso, stai confrontando due simulatori, quindi dovresti semplicemente usare un test t a due campioni.


Come potrei utilizzare le informazioni di tutte le generazioni?
nisc,

Il modo più semplice è fare test multipli, cioè test ad ogni generazione, quindi utilizzare una correzione Bonferroni o fdr.
csgillespie,

Quando si confronta ad ogni generazione, dovrei testare a un livello di significatività di 1/1000 * 0,05? Non è un po 'duro?
nisc,

È vero, ma stai anche facendo molti test: non puoi avere tutto;) Puoi classificare i valori p, usali come guida per vedere dove possono verificarsi errori.
csgillespie,

1
Invece della correzione bonferroni, puoi sempre usare il più potente leccio bonferroni. Vedi la mia risposta qui: stats.stackexchange.com/questions/575/…
Henrik

4

Forse potresti misurare la differenza media tra due esecuzioni dello stesso algoritmo con la differenza media tra due esecuzioni di algoritmi diversi. Non risolve il problema di come misurare quella differenza, ma potrebbe essere un problema più trattabile. E i singoli valori delle serie temporali alimenterebbero il calcolo della differenza invece di dover essere trattati come punti dati individuali per essere valutati l'uno rispetto all'altro (inoltre, non penso che la differenza particolare all'ennesimo passaggio sia ciò che si desidera veramente fare dichiarazioni su).

Aggiornamento sui dettagli: a quali caratteristiche delle serie storiche sei interessato oltre all'errore finale? Immagino che in realtà tu abbia tre diverse domande da risolvere:

  1. Che cosa costituisce la somiglianza per te, cioè cosa intendi quando dici di non credere che i due metodi siano diversi?
  2. Come si quantifica - si può rispondere dopo 1 e
  3. Come puoi verificare differenze significative tra i tuoi due metodi?

Tutto quello che stavo dicendo nel primo post era che la risposta a (1) probabilmente non considera le differenze individuali in ciascuna delle 1000 generazioni. E che consiglierei di trovare un valore scalare per ogni serie storica o almeno somiglianza tra serie storiche. Solo allora si arriva alla domanda statistica effettiva (che conosco meno di tutti e tre i punti, ma mi è stato consigliato di utilizzare un test t accoppiato in una domanda simile che ho appena posto, quando si ha un valore scalare per elemento).


sembra ragionevole, ci sono ulteriori dettagli?
nisc,
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.