Bom… preciso verificar um valor booleano. Caso ele seja verdade, ele executa uma parte do código que gera um i e outro j, mas se ele for false, ele vai gerar um i e outro j, só que algumas operações dentro desse bloco são diferentes.
Queria saber o que é melhor: fazer as verificações antes e gerar em cada bloco ou gerar os valores antes e dentro destes fazer a verificação?
Qual dos dois código é mais eficiente?
if (aleatorio)
{
do { /* Procura até encontrar 2 individuos que possuam a taxa de cruzamento iguais. */
do {
i = geradorAleatorio.nextInt(numeroIndividuos);
j = geradorAleatorio.nextInt(numeroIndividuos);
} while ((populacao[j].getTaxaCruzamento() <= taxaCruza) && (populacao[j].getTaxaCruzamento() <= taxaCruza));
posicao = returnPosicao();
System.out.println("Cruzando individuos " + (i+1) + " e " + (j+1) + " na posicao " + posicao + ".");
swap(posicao, i, j);
populacao[i].calculaFitness();
populacao[j].calculaFitness();
contador++;
} while (contador < quantidadeCruzamentos);
}
/* Se os campos nao forem aleatorios, sera sempre cruzado o campo da quantidade 2. */
else
{
do { /* Procura até encontrar 2 individuos que possuam a taxa de cruzamento iguais. */
do {
i = geradorAleatorio.nextInt(numeroIndividuos);
j = geradorAleatorio.nextInt(numeroIndividuos);
} while ((populacao[j].getTaxaCruzamento() <= taxaCruza) && (populacao[j].getTaxaCruzamento() <= taxaCruza));
System.out.println("Cruzando individuos " + (i+1) + " e " + (j+1) + " na posicao " + posicao + ".");
swap(posicao, i, j);
populacao[i].calculaFitness();
populacao[j].calculaFitness();
contador++;
} while (contador < quantidadeCruzamentos);
}
Ou esse:
do { /* Procura até encontrar 2 individuos que possuam a taxa de cruzamento iguais. */
do {
i = geradorAleatorio.nextInt(numeroIndividuos);
j = geradorAleatorio.nextInt(numeroIndividuos);
} while ((populacao[j].getTaxaCruzamento() <= taxaCruza) && (populacao[j].getTaxaCruzamento() <= taxaCruza));
if (aleatorio)
{
posicao = returnPosicao();
System.out.println("Cruzando individuos " + (i+1) + " e " + (j+1) + " na posicao " + posicao + ".");
swap(posicao, i, j);
populacao[i].calculaFitness();
populacao[j].calculaFitness();
}
else
{
System.out.println("Cruzando individuos " + (i+1) + " e " + (j+1) + " na posicao " + posicao + ".");
swap(posicao, i, j);
populacao[i].calculaFitness();
populacao[j].calculaFitness();
}
contador++;
} while (contador < quantidadeCruzamentos);