Я пытаюсь узнать о генетических алгоритмах и в настоящее время работаю над "пересечением" двух "генов".Ген - это целочисленный массив, состоящий из единиц и нулей.Чтобы проиллюстрировать мою проблему, скажем, у нас есть два гена.
int[] geneA = {1,0,0,0,0};
int[] geneB = {0,1,1,1,0};
Ожидаемый результат от пересечения, например, в позиции 3 будет:
geneA = [1,0,0,1,0]
geneB = [0,1,1,0,0]
Это означает, что каждый элементс индексом 3 или выше поменяется местами с эквивалентным элементом другого гена.Чтобы достичь этого, я написал следующий метод:
private void crossOver(int[] geneA, int[] geneB, int pos) {
int copyA[];
int copyB[];
copyA = geneA;
copyB = geneB;
for(int i = pos; i < geneA.length; i++) {
geneA[i] = copyB[i];
geneB[i] = copyA[i];
}
System.out.println(Arrays.toString(geneA);
System.out.println(Arrays.toString(geneB);
}
Однако, похоже, что элементы гена B просто копируются в ген A с индексом 3 или выше.Вывод на консоль выглядит следующим образом:
[1, 0, 0, 1, 0]
[0, 1, 1, 1, 0]
Любые объяснения или помощь приветствуются.Заранее спасибо!