유전 알고리즘에 대한 내 돌연변이 기능을 사용하는 데 문제가 있습니다 (모든 종류의 문제가 있습니다). 나는 Integer.toString(Float.floatToIntBits(value))
에서 오는 DNA로 문자열을 조작합니다. 모든 것이 멋지게 교차하고 다시 채워지므로 이제는 불쾌한 돌연변이를위한 시간이되었습니다. 그리고 지금은 문제가 있다면,이 내 돌연변이 기능입니다 :문자열 조작 - GA
public void muttate() {
Random rand = new Random();
int mutationPoint = rand.nextInt(valueString.length()-1);
//int mutationPoint=valueString.length()-1;
//System.out.println(mutationPoint);
if(mutationPoint==0)
valueString = rand.nextInt(10)
+ valueString.substring(0);
else if (mutationPoint == 1)
valueString = valueString.charAt(0)
+ Integer.toString(rand.nextInt(10))
+ valueString.substring(mutationPoint);
else if (mutationPoint != valueString.length()-1)
valueString = valueString.substring(0, mutationPoint-1)
+ Integer.toString(rand.nextInt(10))
+ valueString.substring(mutationPoint);
else
valueString = valueString.substring(0, mutationPoint - 1)
+ Integer.toString(rand.nextInt(10));
changeStringtovalue();
calculateFitnes();
}
하고 내가 그것을 실행으로, 난 내 DNA를 먹는 참조 (그래서 길이는 약간의 시간이 8이고 너무 오래 후 후 첫 9입니다) . 그리고 이것은 돌연변이가 아닌 돌연변이 부분에서 비롯된 것입니다. 나는 어리석은 실수라고 생각하지만 단서를 찾을 수 없다.
그리고 이런 종류의 돌연변이가이 상황에서도 유효합니까? 어쩌면 마스크를 적용한 후 비트를 조작하여 해당 플로트의 특정 부분을 가져와야합니다.
Else 블록의 'valueString.substring (mutationPoint);'가 누락 되었습니까? – Jay