Java - алгоритм кроссовера
Я работаю на Android-приложение для TSP проблемы.
У меня есть алгоритм кроссовера, и я хочу минимизировать количество циклов для более быстрого алгоритма. Как я могу это сделать?
Это код:
public static Path crossover(Path dad, Path mom) {
//Create new child path
Path child = new Path();
//Get start and sub path positions for dads path
double startPos = (double) (Math.random() * dad.pathSize());
double endPos = (double) (Math.random() * dad.pathSize());
//Loop and add the sub path from dad to our child
for (int i = 0; i < child.pathSize(); i++) {
//If our start position is less than the end position
if (startPos < endPos && i > startPos && i < endPos) {
child.setDestination(i, dad.getDestination(i));
} // if our start position is larger
else if (startPos > endPos) {
if (!(i < startPos && i > endPos)) {
child.setDestination(i, dad.getDestination(i));
}
}
}
// Loop through mom destination path
for (int i = 0; i < mom.pathSize(); i++){
// If child doesn't have the destination add it
if (!child.containsDestination(mom.getDestination(i))) {
// Loop to find a spare position in the child's path
for (int j = 0; j < child.pathSize(); j++) {
//Spare position found, add destination
if (child.getDestination(j) == null) {
child.setDestination(j, mom.getDestination(i));
break;
}
}
}
}
return child;
}
1 ответ
Если я правильно понимаю кроссовер GA, вы можете использовать только один для возврата ребенка от родителей.
Пожалуйста, посмотрите на мой пример кода:
public Chromosomes crossoverChrom(Chromosomes inpChrom1, Chromosomes inpChrom2){
// offspring chromosome has the same size as the target chromosome
Chromosomes offspring = new Chromosomes(inpChrom1.getGenes().length);
for (int i = 0; i < offspring.getGenes().length;i++){
double randOffspring = Math.random();
// System.out.println("i_offspring [" + i + "] , randOffspring = " + randOffspring);
if(randOffspring <= crossoverRate){
// System.out.println("gene from chrom 1");
offspring.setGenes(i, inpChrom1.getGenes()[i]);
} else {
// System.out.println("gene from chrom 2");
offspring.setGenes(i, inpChrom2.getGenes()[i]);
}
}
// System.out.println("Offspring = " + offspring + " | Fitness = " + offspring.getFitness());
// System.out.println("--------------------------------------------------");
return offspring;
}