У меня проблемы с внедрением единого кроссовера в Java. Это алгоритм;
// 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 .
}
Я знаю, что могу int tmp
и сохранить случайное число, затем if tmp < 0.5
продолжить цикл
Мне не удалось начать, любая помощь приветствуется!
Это пример моего одноточечного кроссовера, чтобы вы знали мой формат.
Пересечение в одну точку - точка пересечения выбрана, двоичная строка от начала хромосомы до точки пересечения копируется из одного родителя, остальное копируется из второго родителя.
Родитель 1 = хромосома и Родитель 2 = инди.
Я превращаю родителей в детей на месте
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;
}
}
}