私はルーレットホイールの選択に関するLispプログラムを持っています。その背後にある理論を理解しようとしていますが、何も理解できません。
選択したstrngの適合性を計算する方法は?
たとえば、文字列01101がある場合、どのようにして適応度の値を169として取得しましたか?
01101のバイナリコーディングは13と評価されるので、値を2乗して、169として答えを取得しますか?
それはつまらないように聞こえますが、どういうわけか私はそれをすることによって正しい答えを得ています。
私はルーレットホイールの選択に関するLispプログラムを持っています。その背後にある理論を理解しようとしていますが、何も理解できません。
選択したstrngの適合性を計算する方法は?
たとえば、文字列01101がある場合、どのようにして適応度の値を169として取得しましたか?
01101のバイナリコーディングは13と評価されるので、値を2乗して、169として答えを取得しますか?
それはつまらないように聞こえますが、どういうわけか私はそれをすることによって正しい答えを得ています。
したがって、あなたのフィットネス関数は ですF=X^2
。
ルーレット ホイールは、その個体 (文字列) が占める全体の割合 (適合度に応じて) を計算し、これを使用して次の世代の文字列のセットをランダムに選択します。
これを数回読むことをお勧めします。
特定の問題の「適合度関数」は、(多くの場合) 恣意的に選択されますが、「適合度」メトリックが上昇すると、解は最適に近づくはずです。たとえば、目的が正の値を最小化することである問題の場合、 の自然な選択は にF(x)
なります1/x
。
F(x) = val(x)*val(x)
当面の問題については、(x,F(x)) の 1 つの値のペアだけでは確実ではないかのように、適合度関数が与えられているように見えます。
ルーレット ホイール選択は、フィットネス ベースの疑似ランダム選択の一般的に使用される方法です。これは、ルーレットをプレイしたり、「ホイール オブ フォーチュン」を見たりしたことがあれば、簡単に理解できます。
最も単純なケースを考えてみましょう。ここでF(x) = val(x)
、
4 つの値があるとします1,2,3 and 4
。
これは、これらの「個人」が1,2,3 and 4
それぞれ適応度を持っていることを意味します。これで、個体 'x1' が選択される確率は として計算されF(x1)/(sum of all F(x))
ます。つまり、ここでは適応度の合計が になるので10
、選択確率はそれぞれ になり0.1,0.2,0.3 and 0.4
ます。
これらの確率を累積的な観点から考えると、x の値は次の「確率」の範囲にマッピングされます。
1 ---> (0.0, 0.1]
2 ---> (0.1, (0.1 + 0.2)] ---> (0.1, 0.3]
3 ---> (0.3, (0.1 + 0.2 + 0.3)] ---> (0.3, 0.6]
4 ---> (0.6, (0.1 + 0.2 + 0.3 + 0.4)] ---> (0.6, 1.0]
つまり、生成された一様分布確率変数のインスタンス、たとえばR
正規化された区間 にあるインスタンスは、 に対応する区間よりも に対応(0, 1]
する区間にある可能性が 4 倍になります。4
1
別の言い方をすれば、それぞれx
にセクターが割り当てられ、セクターの面積が のそれぞれの値に比例するルーレット ホイール タイプの構造を回転させると仮定するF(x)
と、インディケータが特定のセクターで停止する確率はF(x)
for thatの値に正比例しますx
。