gpt4 book ai didi

java - Java中的两点交叉

转载 作者:行者123 更新时间:2023-12-01 15:33:11 26 4
gpt4 key购买 nike

我已经实现了一点交叉,如下所示;

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 = indi。

我正在把 parent 原地变成 child 。

我现在还需要进行两点交叉,但遇到了一些麻烦,这是我到目前为止所遇到的,但我相信代码的下半部分正在做与单点交叉相同的事情,而不是交换中间部分.

       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;
}
}
}
}

这似乎不对,非常感谢任何帮助!谢谢!

最佳答案

您应该检查i < (or <=) xoverpoint2而不是i<length在循环中。

关于java - Java中的两点交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9313011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com