次の関数では、私は、変異の確率に基づいて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'わざわざ? –