pessoal,
se eu guardo os individuos em alguma estrutura de dados antes de modifica-los e depois de modifica-los, os objetos que foram guardados antes da modificacao sao guardados como se tivessem sido guardados apos a modificacao. Alguem tem alguma explicacao para isso ?
antes da modificacao:
individuo1 = 12345
individuo2 = 67890
Apos modificacao:
individuo1 = 10354
individuo2 = 26987
Apos essa modificacao, mando imprimir os quatro elementos, ou seja, os dois antes da modificacao e os dois depois da modificacao.
A impressao deveria ser:
12345
67890
10354
26987
Entretanto, esta sendo:
10354
26987
10354
26987
Eu guardo em um List de individuos antes e depois da modificacao. Ja tentei ate usar um List auxiliar para resolver esse problema, mas nao adiantou nada. Podem ajudar ?
public void crossover(Individuo individuo1, Individuo individuo2)
{
Random random = new Random();
Integer indiceAux;
Integer conta=0;
Integer trocas = 1 + random.nextInt(6);
Integer indice = random.nextInt(8);
indiceAux = indice;
Integer elemento1 = individuo1.getInd().get(indice);
Integer elemento2 = individuo2.getInd().get(indice);
individuo1.getInd().set(indice, elemento2);
individuo2.getInd().set(indice, elemento1);
trocas++;
//se entrar aqui entao houve crossover e deve-se fazer mais ate todos os elementos de cada lista
//serem todos diferentes
while(conta(individuo1,elemento2)>1)
{
if(conta==trocas)
{
elemento1 = individuo1.getInd().get(indice);
Integer novIndice2 = novoIndice(individuo2, elemento2, indiceAux);
elemento2 = individuo2.getInd().get(novIndice2);
individuo1.getInd().set(indice, elemento2);
individuo2.getInd().set(indiceAux, elemento1);
}
else
{
Integer novIndice = novoIndice(individuo1, elemento2, indice);
elemento1 = individuo1.getInd().get(novIndice);
elemento2 = individuo2.getInd().get(novIndice);
individuo1.getInd().set(novIndice, elemento2);
individuo2.getInd().set(novIndice, elemento1);
conta++;
indice = novIndice;
}
}
individuo1.setFitness(individuo1.getInd());
individuo2.setFitness(individuo2.getInd());
}