私は現在、遺伝的アルゴリズムの非常に単純な例を実現しようとしています。
ある時点で、「子供」を得るために、2 つの数字 (親) で「クロスオーバー」(生物学) を行う必要があります。
クロスオーバーの説明は、次の場所にあります。
2 つの文字列を「クロスオーバー」する方法 (1234 & abcd -> 12cd & ab34)
(2番目の図、より簡単な「ワンポイント」クロスオーバーは、私がやろうとしているものです。)
染色体(親と子)は数字ですが、「クロスオーバー」はビット操作になります。
次の「染色体」の1つの解決策を見つけました。
- ビット X 量を右に移動します (
>>>
operator ) - 次に、ビットを再びX位置に移動しますが、今回は左に移動します(
<<
演算子)
したがって、これは染色体の 1 つの末尾を保持し、先頭を 0 で埋めます。
しかし、もう一方の染色体の問題を解決してからクロスオーバーを行う方法がよくわかりません。
(おそらく、染色体の最初と最後を保持し、残りを 0 で埋めた XOR です。)
または、この問題に別の角度からアプローチする必要がありますか?