我正在尝试学习遗传算法,目前正在研究“交叉”两个“基因”。基因是一个整数数组,由 1 和 0 组成。为了举例说明我的问题,假设我们有两个基因。
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);
}
然而,似乎geneB 的元素只是简单地以3 或更高的索引复制到geneA 中。控制台输出如下:
[1, 0, 0, 1, 0]
[0, 1, 1, 1, 0]
非常感谢任何解释或帮助。提前致谢!