Qualcuno ha visto risultati convincenti dal .Net Genetic Algorithm Framework?Scarsa randomizzazione nel Genetic Algorithm Framework
Sto riscontrando una scarsa randomizzazione nella demo del Problema del venditore ambulante fornita con il Genetic Algorithm Framework. La seguente chiamata genera lo stesso gene order casuale in tutto il x 100 seme popolazione cromosoma:
chromosome.Genes.ShuffleFast();
Se solo passo attraverso il codice dell'ordine gene sembra casuale, quindi, ho il sospetto c'è un tempo/Rdn() bug in ShuffleFast() oppure sto trascurando un passaggio di installazione.
Ho cercato di aggirare il problema rimescolando le sequenze di geni del cromosoma e questo ha prodotto un piccolo cambiamento nei risultati del TSP. Tuttavia, il log della console della corsa mostra ancora il GAF che scopre solo 4 potenziali soluzioni su 400 generazioni di popolazione. Ciò è in disaccordo con i video di YouTube di GA che mostrano implementazioni di algoritmi genetici in arrivo su una soluzione suggerita con un sacco di jitter. Cito questo come un'ulteriore indicazione che il GAF ha un problema interno sistemico con generazione di numeri casuali.
L'Algorithm Framework genetico è molto ben documentato tramite il blog degli autori, quindi sto cercando di mantenere una mente aperta come motivo.
Passaggi per la riproduzione = Scarica GAF da nuget, compilare & eseguire il debug del progetto predefinito con un punto di interruzione dopo aver creato i loop per il ciclo, ispezionare la popolazione.Soluzioni. Windows 7, VS2015, .Net 4.5 & 4.61. Debug o Release.
Puoi pubblicare altro codice per mostrare il contesto di questa chiamata. Ci possono essere problemi con i generatori di numeri casuali se non sono inizializzati correttamente. – ChrisF
@ChrisF I meccanismi interni della routine ShuffleFast() si trovano all'interno della libreria GAF, che a mio avviso è closed source. L'autore della biblioteca dovrebbe rispondere, è attivo su SO. Fino ad allora cercherò un'altra libreria GA. La chiamata di ShuffleFast() viene eseguita 100 volte in un ciclo stretto su un elenco di 16 numeri interi, se si interrompe manualmente e F10 all'interno di quel ciclo i risultati di Shuffle appaiono casuali. – camelCase
"La chiamata ShuffleFast() viene eseguita 100 volte in un ciclo stretto su un elenco di 16 numeri interi," - Probabilmente è la causa del problema.Sembra che il generatore di numeri casuali sia inizializzato ogni iterazione del ciclo. Entrare nel debugger lo rallenta abbastanza da darti risultati casuali. È necessario inizializzare il generatore una volta fuori dal ciclo. – ChrisF