簡體   English   中英

BitSet flip()是否會影響BitSet的長度?

[英]Does BitSet flip() affect the length of BitSet?

在下面的函數中,我想基於突變概率對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

如您所見,翻轉后第一個和第四個沒有減少。 同時其他都減少了。 我試圖了解是什么引起了問題,但我沒有。 我所需要的是,翻轉后,位集的長度應與翻轉前的原始長度相同。

BitSet flip()是否會影響BitSet的長度?

用於BitSet::length Javadoc說:

public int length()
返回此BitSet的“邏輯大小”:BitSet中最高設置位的索引加1。 如果BitSet不包含任何設置位,則返回零。

BitSet b = new BitSet();
System.out.println(b.length()); // 0
b.flip(1);
System.out.println(b.length()); // 2
b.flip(1);
System.out.println(b.length()); // 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM