私が進めている遺伝的アルゴリズムのための異なる選択方法を作成しようとしていますが、すべての選択方法で満たしている問題の1つは、私のフィットネス電卓は非常に基本的であり、すべての私の別の選択方法のいくつかの同一のフィットネスのルーレットホイール選択を使用した遺伝的アルゴリズム
public static Map<String, Double> calculateRouletteSelection(Map<String, Double> population) {
String[] keys = new String[population.size()];
Double[] values = new Double[population.size()];
Double[] unsortedValues = new Double[population.size()];
int index = 0;
for(Map.Entry<String, Double> mapEntry : population.entrySet()) {
keys[index] = mapEntry.getKey();
values[index] = mapEntry.getValue();
unsortedValues[index] = mapEntry.getValue();
index++;
}
Arrays.sort(values);
ArrayList<Integer> numbers = new ArrayList<>();
while(numbers.size() < values.length/2) {
int random = rnd.nextInt(values.length);
if (!numbers.contains(random)) {
numbers.add(random);
}
}
HashMap<String, Double> finalHashMap = new HashMap<>();
for(int i = 0; i<numbers.size(); i++) {
for(int j = 0; j<values.length; j++) {
if(values[numbers.get(i)] == unsortedValues[j]) {
finalHashMap.put(keys[j], unsortedValues[j]);
}
}
}
return finalHashMap;
}
90%が同じであるので、私は、私は1のためにそれを解決することができれば、私は確信して得られますので、これは私にとって問題ですすべてを解決することができます。 私が間違っていただければ幸いです
EDITをやって上の任意のヘルプ:私は私は基本的に方法はHashMapの<>にとり何が起こっているかの一般的な動作を掲示することを意図していましたが、に基づいて値をソートし、そのハーフソートされた値をランダムに選択し、対応する染色体を持つ新しいHashMap <に追加します。
ランダムに後でランダムに選択したい場合は、最初にソートするのはなぜですか?とにかく最後に生き残るはずの標本はどれくらいですか?私は "最もふさわしい半分のランダムな半分"のようなものを期待していますが、あなたのコードは人口全体の半分をランダムに選択します。 – daniu
これはこの問題の擬似コードです。 https://stackoverflow.com/questions/177271/roulette-selection-in-genetic-algorithms –
@daniuルーレットホイールの選択アルゴリズムを使用すると、アイテムを最初に並べ替えることをお勧めします。それは目的はランダムな選択は、人口の多様性を維持するために良いと悪い解決策の均一な広がりを持つことだと思う –