다음과 같이 원 포인트 크로스 오버를 구현했습니다. 크로스 오버Java에서 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;
}
}
}
한 점 - 크로스 오버 포인트가 선택이, 크로스 오버 포인트에 염색체의 처음부터 진 문자열이 한 부모에서 복사, 나머지는 두 번째 부모로부터 복사됩니다.
부모 1 = 염색체 및 부모 2 = indi.
나는 부모를 어린이로 변모시키고있다.
나는 2 포인트 크로스 오버를해야하지만 약간의 문제가있다. 이것은 내가 지금까지 가지고있는 것이지만, 코드의 아래쪽 절반은 중간을 교환하는 것보다 1 포인트 크로스 오버와 같은 것을하고 있다고 생각한다. 섹션.
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
왜 이것이 옳지 않다고 생각하십니까? 뭐하고 있니, 뭘 기대하고 있니? – npinti
내가 한 모든 것은 원래의 한 지점 크로스 오버에 중간 섹션을 추가하는 것이고, 나머지는 동일합니다. 그것은 어떤 오류도주지 않는다. 그러나 나는 2 포인트 교차를하고 있다고 생각하지 않는다? – Student