Come si modifica un valore in un algoritmo genetico utilizzando la distribuzione gaussiana?

0

Ho letto "Introduzione agli algoritmi evolutivi". Questo metodo è affermato, ma non descritto, e non riesco a trovare nulla di più specifico online. p44 / 45 del 2 ° Ed come riferimento.

adding to the current gene value an amount drawn randomly from a Gaussian distribution with mean zero and user-specified standard deviation

Sarebbe fantastico ottenere il passo dopo passo, dal valore iniziale a quello mutato, incluso il funzionamento della distribuzione gaussiana (o un collegamento a qualcosa che potrebbe colmare tale lacuna).

    
posta StringsOnFire 11.03.2014 - 22:41
fonte

1 risposta

3

Una distribuzione gaussiana è quella curva preferita dalla matematica e le statistiche conosciute anche come la curva a campana o una distribuzione normale .

Un esempio di questo può essere visto con la somma di dadi rotondi 10x 10 lati:

Da AnyDice output 10d10

Ciò significa che la quantità di mutazione per un gene è molto probabilmente molto bassa. Se lanci questo set di dadi 30 volte, otterrai alcuni dati che assomigliano a:

53, 38, 52, 62, 51, 50, 71, 44, 52, 55, 56, 45, 48, 67, 48, 63, 33, 40, 62, 60, 54, 48, 67, 60 , 44, 63, 50, 50, 64, 56

Si noti che la maggior parte di questi numeri è abbastanza vicina al valore di 55. Questa è la chiave per questo - si desidera un valore medio.

Quando si fa una mutazione su un gene che ha un possibile cambiamento di -10 .. +10, si vuole che la maggior parte della possibilità sia di circa 0. Forse alcuni 1, o 2, o -1 o -2 ... ma non vuoi che un +10 abbia una probabilità uguale di una mutazione di +1.

E allora? Come si fa?

In Java, si userebbe java.util.Random #nextGaussian () . Questo ti darà un numero che ha una distribuzione normale con una media di 0.0.

Prenderesti il valore che ottieni da nextGaussian() , e poi ... beh, fai dei calcoli per farlo entrare nell'intervallo che vuoi. Solo perché stai ottenendo un numero con una media di 0.0 non significa che ogni dato valore sarà in un determinato intervallo.

Le specifiche del nextGaussian() per la lingua scelta sono solo una questione di trovare la libreria giusta per la lingua. È lì da qualche parte. Potresti voler consultare il tag : distribuzione normale su Stack Overflow filtrato per la tua lingua per vedere se qualcuno di questi le domande specificamente ti aiutano.

    
risposta data 12.03.2014 - 00:26
fonte

Leggi altre domande sui tag