0

n各変数が範囲内になるように、変数の関数を最大化するための遺伝的アルゴリズムを実装しようとしています[-n, n]

クロスオーバーの複雑さを軽減するために、最初の母集団を生成する際に から0までの数値のみを生成し2n、適合度を評価する際にそれらのそれぞれから n を減算します。小さい可能性があるためn、染色体を表すために整数配列の代わりにビット文字列を使用することにしました。

2nここでの問題は、クロスオーバーとミューテーション中に不正な値 (より大きい) が生成されることです。1 つの方法は、クロスオーバーとミューテーションの両方で、不正な値を正当な値に置き換えることです。ただし、これは少し複雑になり、パフォーマンスにも影響を与える可能性があります。

そこで交叉と突然変異の際のチェックと置換を残して、両方が終わった後に行うことができないかと考えています.文字列とフィットネスを計算します。また、不正なビット列を置き換えずに逃げることは可能ですか?

4

2 に答える 2

1

私が考えることができる2つのオプションがあります:

  1. ご指摘のとおり、生成された値が範囲外の場合は、もう一度やり直してください。もちろん、アルゴリズムはループにスタックする可能性があり、その場合、何百万世代も経っても個体群は進化しない可能性があります。

  2. 最大化しているので、目的関数の n の不正な値に対して負のペナルティを追加する必要があります。このようにして、不正な番号を避けるようにアルゴリズムにバイアスをかけることになります。具体的なコメントをするには、実装を確認する必要があります。しかし、これが役立つことを願っています。

于 2013-04-24T23:57:41.227 に答える
1

中間母集団の不正なビット文字列を置き換える必要はありません。最終母集団に対してのみこれを行う必要があります。1 つの解決策は、ビット文字列の最後のいくつか (2 つまたは 3 つ) の正当な値を保存することです。これにより、最終的な集団で不正なビット文字列を置き換えるときに、これらの値をランダムに反復できるようになります (正当な値を完全に構成する必要はありません)。 .

ちなみに、私は常に遺伝的アルゴリズムよりも進化的計算を好んでいました。なぜなら、多くの場合、クロスオーバーが私を袋小路に導くだけであることに気付いたからです。

于 2013-04-24T23:57:49.480 に答える