0

私はPythonで遺伝的アルゴリズムを開発しています.染色体は文字列と整数で構成されています. 遺伝的操作を適用するには、これらの整数と文字列のグループをビット文字列に変換します。

たとえば、1 つの染色体が次の場合:

["Hello", 4, "anotherString"]

私はそれが次のようになることを望みます:

0100100100101001010011110011

(これは実際の翻訳ではありません)。それで...どうすればこれを行うことができますか? 染色体には同じ量の文字列と整数が含まれますが、この数はアルゴリズムの実行ごとに異なる場合があります。

明確にするために、取得したいのは、連結された染色体内の各要素のビット表現です。

これが遺伝的演算子 (突然変異や単純交叉など) を適用する最良の方法ではないと思われる場合は、教えてください! 私は新しいアイデアを受け入れます。

どうもありがとう!マヌエル

4

3 に答える 3

3

structモジュールを使用して、文字列と整数をバイト文字列に (または戻す) ことができます。これは、1 バイトに対して正確に 8 ビットです。何らかの理由でこれらのバイナリ バイト文字列を01文字で構成されるテキスト文字列として使用したい場合は、もちろんバイナリ形式で出力できます。

編集: Python 2.6以降で、バイトを文字で構成されるテキスト文字列にフォーマットする方法を思い出させるのを忘れていまし0た:1

>>> format(23, '08b')
'00010111'

もちろん、そのような文字列からバイトに戻すには:

>>> int('00010111', 2)
23
于 2010-02-15T05:43:29.300 に答える
3

すべてを 1 つの連結された文字列に変換し、遺伝的操作を適用することは、最良のアイデアではないようです。遺伝子操作はここで多くのことを壊す可能性があります (特に、個人に何らかの制約がある場合)。さらに、そのようなソリューションの有効性はおそらく低いです. 別のアプローチをお勧めします。

SuperGene コンセプト(wiki)を使用して個体を実装してみてください。GAへの適用例はこちらに記載されています。さらに、これによると、全体的な GA パフォーマンスが向上すると彼らは言います。
私の意見では、デザインがより明確になります。私はこのアプローチを試してみます。

于 2010-02-15T07:48:07.370 に答える
0

文字列からビット文字列への変換がどのように行われるかを正確に説明すると、「方法」はかなり簡単になります。遺伝的アルゴリズムがビット レベルで動作する場合、ビット レベルの文字列は明らかに理にかなっていますが、おそらく数値や文字列を使用するよりもはるかに遅くなります。

于 2010-02-15T05:24:57.767 に答える