Crossover Uniforme in Java
-
26-10-2019 - |
Domanda
Ho problemi attuare un crossover uniforme in Java. Questo è l'algoritmo;
// Uniform Crossover
public void UniformCrossover(Individual indi) {
if (RVGA.rand.nextDouble() < pc) {
// Put your implementation of uniform crossover here
// For each gene create a random number in [0, 1].
// If the number is less than 0.5, swap the gene values in
// the parents for this gene; other wise, no swapping .
}
So che posso int tmp
e memorizzare numeri casuali, poi if tmp < 0.5
continuare con ciclo
Non riusciva a fare un inizio ogni aiuto è apprezzato!
Questo è un esempio di mio unico punto di crossover solo così sai il mio formato.
Un punto di crossover -. È selezionata punto di crossover, stringa binaria dall'inizio del cromosoma al punto di crossover viene copiato da un genitore, il resto viene copiato dal secondo genitore
Parent 1 = cromosoma e Parente 2 = indi.
Mi rivolgo ai genitori in figli inplace
public void onePointCrossover(Individual indi) {
if (SGA.rand.nextDouble() < pc) {
int xoverpoint = SGA.rand.nextInt(length);
int tmp;
for (int i=xoverpoint; i<length; i++){
tmp = chromosome[i];
chromosome[i] = indi.chromosome[i];
indi.chromosome[i] = tmp;
}
}
}
Soluzione
con crossover uniforme, ciò che si vuole fare in generale è:
For each gene
if rand()<0.5
take from parent a
else
take from parent b
Ti sembra, dal vostro esempio di un punto, da modificando entrambi i genitori sul posto, allo stesso tempo. In questo caso:
For each gene
if rand()<0.5
leave both parents alone
else
swap chromosome[i] with indi.chromosome[i] as before