2013-04-24 17 views
8

Sto cercando di implementare un algoritmo genetico per massimizzare una funzione di n variabili. Tuttavia, il problema è che i valori di fitness possono essere negativi e non sono sicuro di come gestire i valori negativi mentre si effettua la selezione. Ho letto questo articolo Linear fitness scaling in Genetic Algorithm produces negative fitness values ma non mi è chiaro come siano stati presi in considerazione i valori di fitness negativi e come sono stati calcolati i fattori di scala aeb.algoritmo genetico che gestisce valori di fitness negativi

Inoltre, dall'articolo so che la selezione della ruota della roulette funziona solo per il valore di fitness positivo. È lo stesso anche per la selezione dei tornei?

risposta

6

La selezione del torneo non è influenzata da questo problema. Confronta semplicemente i valori di fitness di un sottoinsieme uniformemente campionato di dimensione n della popolazione e prende quello con il miglior valore. Ciò nonostante, naturalmente, se si campiona senza ripetizione, i peggiori individui n-1 non verranno mai selezionati. Se si campiona con la ripetizione, hanno la possibilità di essere selezionati.

Come con la selezione proporzionale: non funziona con valori di fitness negativi. Puoi applicare solo "windowing" o "ridimensionamento" dei tuoi valori di fitness, nel qual caso lavoreranno di nuovo.

Una volta ho programmato un po 'di sampling methods come metodi di estensione per C# I s IEnumerable tra loro è un metodo di estensione SampleProportional e SampleProportionalWithoutRepetition. Fanno parte di HeuristicLab con licenza GPL.

+0

Grazie mille! Mi chiedo se la ripetizione possa causare problemi. Qui la ripetizione sembra essere una buona scelta, ma c'è qualche ragione per non farlo. – vjain27

+0

Bene, devi usare le ripetizioni, perché devi selezionare alcune soluzioni più volte in quanto hai bisogno di 2 * dimensioni della popolazione per i tuoi genitori. È possibile selezionare ogni coppia senza ripetizione, ma in generale non vale la pena prendersene cura. Tranne se hai dimensioni di popolazione ridotte. Ma se vanno in centinaia le possibilità di una soluzione che si accoppia con se stessa è piuttosto sottile. – Andreas

7

Quando si dispone di valori negativi, è possibile provare a trovare il valore di fitness più piccolo nella popolazione e aggiungere il suo opposto a ogni valore. In questo modo non avrai più valori negativi, mentre le differenze tra i valori di fitness rimarranno le stesse.

+0

Corretto: in effetti si normalizzano i valori su un intervallo positivo. – NWS

+0

E se lo applichi anche quando non ci sono valori negativi, non sarebbe un problema, giusto? Sto solo pensando di evitare un controllo per i valori negativi. – vjain27

+0

@ vjain27 Per quanto ne so, non dovrebbe essere un problema. La selezione della ruota della roulette tiene già conto dell'idoneità media della popolazione, quindi la selezione non dovrebbe essere influenzata. –