遺伝的アルゴリズムで整数をビットにマッピングする必要がありますか?


8

私が読んだことから、遺伝的アルゴリズムは通常(常に?)ビットの染色体に適用されます。したがって、整数値をとる関数の最大化に問題がある場合、最初に整数がビットとしてエンコードされます。

このマッピングは必要ですか?整数の染色体を取り、クロスオーバーと突然変異を直接適用できるようです。したがって、35個の整数入力を受け取る関数がある場合は、35xBビット(Bは整数のエンコードに必要なビット数)ではなく、これらの整数に遺伝演算子を適用できます。これが行われない理由はありますか?

問題はより粗く定義されているため(つまり、ビットを使用しない場合は、より短い染色体で問題を定義できるため)、アルゴリズムは影響を受ける可能性がありますが、より良い答えがあるかどうか知りたいです。


1
私はあなたがいる問題領域についての知識はありませんが、直観的には、整数値のような数値プロキシーではなく、コンピューターの言語で直接処理することがこのコンテキストで有用かつ潜在的に有益であるようです。ただし、整数を扱う方が便利な場合は、必ずそうしてください。ニューラルネットワークでは、バイナリ形式で設計することには大きな利点がありますが、浮動小数点数を扱うことがよくあります。
Robert Harvey

DNAが2ビットのチャンクを使用していることを考えると、少なくとも遺伝的アルゴリズムが生物学的進化をモデル化している限り、答えはおそらく「ノー」ではないと思います。
Gort the Robot

回答:


9

値をビットとしてエンコードする必要はありません。見2Dボックスカー(無駄にしないでくださいあまりにも多くのクロスオーバーは、全体(フロート)の値で行われ、たとえばそれに時間を)。「アセンブリ」全体が交差しています。これにより、ソース(ゲームの美学の一部)の認識性が高まりますが、特定の染色体とその親の間のバリエーションがより限定されるようになります。

整数の代わりにビットを使用することを検討する理由は、プールにシードされるデータの範囲に関係しています。35の整数を持つことは、クロスオーバーが全体の値として取られる35の値でのみ発生することを意味します。1120ビット(35 * 32ビット整数)を使用すると、より細かい粒度が得られます(ATCGでの従来の「遺伝的アルゴリズム」の動作-アミノ酸やタンパク質の「値」全体ではないことを考慮してください)。

ビットを使用すると、1つの整数の上部と別の整数の下部を取得する「よりクリーンな」変異(ビットを反転)とクロスオーバーを使用できます。これらの両方は、子孫の潜在的な多様性を高めるのに役立ちます。

たった2バイトの染色体を考えてみましょう(見やすくするために、整数ではなくバイトを使用しています)。

chromosome 1: 0xA3 0xB2
chromosome 2: 0x12 0x34

これら2つの染色体間の交差は、限られた場所でのみ発生します。あなたは次のようになります:

chromosome 1': 0x12 0xB2
chromosome 2': 0xA3 0x34

代わりにこれがビットとして行われた場合:

chromosome 1: 1010001110110010
chromosome 2: 0001001000110100
                    ^   ^     

これで^、クロスオーバーを与えるサイトを選択できます:

chromosome 1': 1010001000110010
chromosome 2': 0001001110110100
                     ^   ^     

これにより、2つの染色体間で可能なバリエーションが豊富な、より豊かなモデルが提供されます。


ありがとう。これは私が問題を「より粗い」と言った意味ですが、あなたは素晴らしい明確な答えを与えました。
2013

3

あなたがクロスオーバーと変異を持っている限り、あなたはビジネスにあります。基本となる型は重要ではありません。クロスオーバーとミューテーションがグラフを直接操作し、ノードを追加または結合するグラフ構造でGAを見てきました。

実際、私は通常、すべてを文字にエンコードし、ビットではなくバイトレベルでクロスオーバーと変異を提供します。ビットレベルにビットマスクを追加することは難しくありませんが、寿命が短すぎます。


0

GAでは、すべての染色体は通常ビット文字列として表されます。あなたは例外を持つことができますが、今のところそれらを忘れましょう。

染色体は問題の解決策となる可能性があるため、解決策が整数の場合、遺伝的操作で機能させるにはバイナリ表現が必要です。幸いなことに、整数は、すでに(実際には、彼らは*このバイナリ表現を持っているあなただけの進化のプロセスに沿って、あなたの集団の個体上の演算子を適用し、何もする必要はありドントので、ネイティブにビット列)。


0

マッピングは必要ありません。

微分進化(DE)は、遺伝的アルゴリズムのより広い空間の非常に成功した「サブセット」です。

最初の大きな変更は、DEが ビット文字列の代わりに実際の実数/整数を使用し(通常、数値最適化のための実数、他のフィールドの整数)。

とにかく、実際の数値として表現できるのは素晴らしいことです。

これは、コンピューターリソースを効率的に使用する方法であり、ユーザーに対して入力と出力を透過的にします。パラメーターは、異なるバイナリ表現を持つ遺伝子として再フォーマットすることなく、通常の数値として入力、操作、出力できます。

「より粗く定義されているという問題の場合、DEは、母集団内の2つ以上の整数/実数ベクトル間の差を利用する新しい突然変異/交差演算子を採用して、新しいベクトルを作成します(たとえば、差のランダムな比率を追加することによって)既存のベクトルの1つに加えて、少量のランダムノイズ)。

試験パラメータベクトルを生成するためのスキーム

微分進化から-グローバル最適化への実用的なアプローチ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.