在下面的函數中,我想根據變異概率變異一個BitSet。BitSet flip()是否會影響BitSet的長度?
public static Cell mutate(Cell original_){
Double mProb = 0.2;
BitSet original = new BitSet(original_.getChrom().size());
original = (BitSet) original_.getChrom().clone();
Random rand = new Random();
System.out.print(" " + original.length() + " "); //to check the length of original before applying flip()
for(int m = 0; m < original.length(); m++)
{
if(rand.nextDouble() <= mProb){
original.flip(m);
}
}
System.out.print(" " + original.length() + " "); //to check the length of original after applying flip()
Cell mutated = new Cell(original);
//System.out.print("{" + mutated.getFitness() + "} ");
return mutated;
}
我注意到的問題是,有時BitSet的長度在翻轉一些位後會減少!
以下一些成果來解釋這個問題:
original before flip || length before flip || original after flip || length after flip
110111 || 6 || 110111 || 6
101111 || 6 || 111 || 3
110111 || 6 || 10111 || 5
110111 || 6 || 111111 || 6
111010 || 6 || 11010 || 5
正如你所看到的,第一和第四不翻轉後還原。而另一個已經減少。我試圖瞭解是什麼導致了這個問題,但我不能。所有我需要的是,在翻轉之後,位集應該與原文在翻轉之前具有相同的長度。
也許無關,但爲什麼還要指定'original'兩次,第二次緊隨第一? –