我已经实现了如下的一点交叉;Java中的两点交叉
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;
}
}
}
一个点交叉 - 当选择交叉点,从染色体的开始到交叉点的二进制字符串被从一个亲本复制,其余是从第二个亲本复制。
父母1 =染色体和父母2 =印度。
我正在把父母变成孩子在原地。
我现在也需要做一个两点交叉,但有一些麻烦,这是我迄今为止,但我相信代码的下半部分做一个点交叉,而不是交换中间部分。
public void twoPointCrossover(Individual indi) {
if (SGA.rand.nextDouble() < pc) {
int xoverpoint = SGA.rand.nextInt(length);
int xoverpoint2 = SGA.rand.nextInt(length);
int tmp;
if (xoverpoint > xoverpoint2){
tmp = xoverpoint;
xoverpoint = xoverpoint2;
xoverpoint2 = tmp;
}
for (int i=xoverpoint; i<xoverpoint2; i++){
tmp = chromosome[i];
chromosome[i] = indi.chromosome[i];
indi.chromosome[i] = tmp;
}
}
}
}
这似乎不正确,任何帮助将不胜感激!谢谢!
你期待什么发生?这不是一个完整的例子,所以你得到的任何帮助都可能是猜测。 – birryree 2012-02-16 14:29:20
你为什么认为这看起来不正确?你到底在想什么? – npinti 2012-02-16 14:29:22
我所做的只是将中间部分添加到原始的一点交叉处,其余部分是相同的。它不会给出任何错误,但我不认为它正在进行两点交叉? – Student 2012-02-16 14:41:43