0

遺伝的アルゴリズムのプロセスを理解するのに問題があります。ある区間で関数を最大化する例を見つけて、理解できたと思いますが、遺伝的アルゴリズムを使用して、たとえば二次方程式を解くにはどうすればよいでしょうか?

4 桁までの解を求めたいとすると、数値をエンコードする適切な表現は何ですか? 各数値を評価するための適合度関数として何を使用できますか?

どんな助けでも大歓迎です

4

3 に答える 3

1

二次方程式を解きたい場合

a * x^2 + b * x + c = 0

その場合、表現として必要な変数は 1 つだけですx。使用できます

f(x) = abs(a * x^2 + b * x + c)

これは精度と同じであるため、最小化する必要があります。

しかし、変数が 1 つしかない場合、交叉を行うのは困難です。1 人あたり 10 個の数値を使用して、平均を取って x を取得するか、交叉を行うときに 2 つの数値の平均を取ることができます。また、x を完全にオーバーライドするのではなく、突然変異のために、たとえば 0.5 から 2 の間の乱数を掛けることができます。

于 2016-12-08T20:02:30.500 に答える
1

最初のステップは、ソリューションの表現を選択することです。最も広く使用されているのは、バイナリ エンコーディングです。たとえば、 x は次のようになります。

1 0 0 1 1 1 1 0 | 0 0 0 0 0 0 0 0 0 1 1 1

最初の 8 ビットは数字の整数部分をコード化し、残りの 13 ビットはドットの後に数字の部分をコード化しました。この例では、数値 158.0007 をコーディングするバイナリ文字列です。

クロスオーバー メイ ルックス

1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 - 158.0007

1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 - 225.0008

最も単純な交差演算子は、1 つの分割点です。1 から文字列の長さ - 1 までの 1 つの数値を生成します。この時点までは、1 つの文字列からビットを取得し、その時点から 2 番目の文字列からビットを取得します。この例では、分割ポイント 4 の位置を選択します。子孫は次のようになります。

1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 - 145.0008

ミューテーションは、選択された確率でいくつかのビットを変更します。

適応度関数は、x の 2 次方程式 (最大値を見つけようとする場合) の関数値である可能性があり、x はビット列のデコードとして取得されます。

そして最後にいくつかの理論。2セットあります。1 つのセットは検索スペース (バイナリ文字列を含むスペース) で、2 つ目のセットはソリューションを含むスペースです。検索空間からの個体は、解空間の解にデコードされます (この場合、バイナリ文字列でコード化された x の値)。検索空間は遺伝子型を表し、デコードされた解は表現型です。遺伝演算子は、デコードされたソリューションを使用して、検索空間の個人 (この場合はバイナリ文字列) とフィットネス関数を操作します。

于 2016-12-12T12:20:04.230 に答える