Attualmente sto cercando di realizzare un esempio molto semplice di algoritmi genetici.Cross-over due interi bit a bit
A un certo punto, devi fare un "Cross-Over" (biologia) con due numeri (genitori) per ottenere un "bambino".
Potete trovare una spiegazione di Cross-Over qui: (. La seconda illustrazione, il "one-point" più facile Cross-Over è quello che sto cercando di fare)
How to "crossover" two strings (1234 & abcd -> 12cd & ab34)
I cromosomi (genitori e figlio) sono numeri ma il "Cross-Over" sarà un'operazione un po '.
ho trovato una soluzione per uno dei "cromosomi", che è la seguente:
- movimento l'importo bit X a destra (
>>>
operatore) - e quindi spostare i bit nuovamente X posizioni ma questa volta a sinistra (operatore
<<
)
Quindi questo manterrebbe la fine di uno dei cromosomi e riempirà l'inizio con 0s.
Ma io non so davvero come risolvere il problema dell'altro cromosoma e poi faccio anche il Cross-Over.
(Probabilmente un XOR una volta ho tenuto l'inizio/fine dei cromosomi e riempito il resto con 0s.)
o forse dovrei anche affrontare questo problema da un'altra angolazione?
Sai sempre quanto grandi siano i vostri due ingressi sono come numeri (ad esempio, interi a 16 bit) ? – David
Sì, sono sempre interi a 16 bit. Una cosa che può essere modificata è la% di Cross-Over. Ad esempio il 75% manterrebbe i primi 4 (25%) bit del genitore A e seguirà quei 4 bit con 12 (75%) bit dal genitore B. –