2013-04-24 5 views
8

私はn個の変数の関数を最大化する遺伝的アルゴリズムを実装しようとしています。しかし、問題はフィットネス値が負になる可能性があり、選択中に負の値を処理する方法がわかりません。私はこの記事を読んでLinear fitness scaling in Genetic Algorithm produces negative fitness values を読んでいますが、負のフィットネス値がどのように処理されたか、スケーリング係数aとbがどのように計算されたかはわかりません。負のフィットネス値を扱う遺伝的アルゴリズム

また、記事から、私はルーレットホイールの選択が肯定的なフィットネス値のためだけに働くことを知っています。トーナメントの選択も同じですか?

答えて

6

トーナメントの選択はこの問題の影響を受けません。母集団のサイズnの一様にサンプリングされたサブセットの適応度値を単に比較し、その値を最良の値で取ります。もちろん、これは、繰り返しなしでサンプルすると、最悪のn-1人が決して選択されないことを意味します。繰り返しでサンプリングした場合、選択される可能性があります。

比例選択と同様:負の適応度値では機能しません。フィットネス値の「ウインドウ」または「スケーリング」を適用することができます。その場合、それらは再び機能します。

私は一度、C#の拡張メソッドとしてsampling methodsをプログラムしましたが、その中でIEnumerableはSampleProportionalとSampleProportionalWithoutRepetition拡張メソッドです。それらは、GPLライセンスのHeuristicLabの一部です。

+0

ありがとう!繰り返しが問題を引き起こすかどうか疑問に思っています。ここで繰り返しは良い選択だと思われますが、それを行かない理由があります。 – vjain27

+0

あなたはあなたの両親のための2人口のサイズが必要なので、いくつかのソリューションを複数回選択する必要があるので、繰り返しを使わなければなりません。繰り返しなくても各ペアを選択できますが、一般的にそれは気にする価値はありません。人口の規模が小さい場合を除きます。しかし、彼らが数百に入るならば、それ自身と交わる解決策のチャンスはかなりスリムです。 – Andreas

7

負の値をとっている場合は、母集団の中で最も小さい適合値を見つけて、その反対の値をすべての値に追加することができます。この方法では、負の値を持たなくなりますが、フィットネス値の違いは同じままです。

+0

正しい:実際には、値を正の範囲に正規化します。 – NWS

+0

負の値がない場合でもこれを適用すれば、それは問題ではないでしょうか?私は負の値のチェックを避けることを考えているだけです。 – vjain27

+0

@ vjain27私の知る限り、それは問題ではありません。ルーレットホイールの選択はすでに人口の平均的な適応度を考慮に入れているので、選択に影響を与えてはならない。 –