4

私は遺伝的アルゴリズムを使用して問題を解決しようとしています。

問題は、関数を最適化する整数値と実数値のセットを見つけることです。

バイナリ文字列を使用して問題を表現する必要があります(バイナリ文字列の染色体に適用すると、クロスオーバー/突然変異などの概念をよりよく理解しているためです)。

候補解Sは、集合{I1、I2、... IN、R1、R2、RM}になります。

ここで、I変数は整数で、R変数は浮動小数点数です。

候補解Sを2進文字列に変換できるようにしたいのですが、浮動小数点数をエンコードする方法がわかりません。

セットSを染色体にエンコードする方法について何かアイデアはありますか?

解決策は言語に依存しないことになっていますが、私の好みの言語の選択(この特定のタスクの好みの降順)は次のとおりです。

Python、C ++、C

ところで、私はPyevolveを使用して問題をコーディングしています

4

5 に答える 5

1

実際にビット文字列表現が必要な場合は、再考することをお勧めします..浮動小数点からビットへの変換とその逆は、おそらく少しです。浮動小数点値をそのまま使用できる場合、つまり、単一の解候補が N 個の浮動小数点数の配列である場合、それを評価関数 (目的関数) に簡単に渡すことができます。次に、シミュレートされたバイナリ クロスオーバー (SBX、http://www.slideshare.net/paskorn/self-adaptive-simulated-binary-crossover-presentation ) などのクロスオーバー メソッドを使用します。) フロートをバイナリ表現に変換し、クロスオーバーを実行した後に得られる効果を模倣します。SBX の結果は非常に良好であり、ビット文字列を処理した場合に何が起こるかについての類推も、しばらくするとかなり明確になります..このスライドショーでは多くのように見えます..しかし、すべてはほんの数行に要約されます. sbx クロスオーバーの実装について。

于 2010-10-11T11:49:45.327 に答える
1

いいえ、あなたの問題にはバイナリ表現が間違っていると思います。基本データはバイナリではないのに、なぜバイナリを使用するのでしょうか? バイナリ表現ではなく、実数と整数に対して突然変異と交叉を行います。

最も単純なクロスオーバー: 最初の親: ABCDE (A、B、... は浮動小数点数)、2 番目の親 MNOPQ。ランダムに選択する D、最初のスプリング: ABCDQ、2 番目: MNOPE。

于 2010-10-07T21:17:41.673 に答える
0

structモジュールで提供される機能を使用して、バイナリ データをバッファーにパックできます。ここを参照してください: http://docs.python.org/library/struct.html

とは言っても、私は個人的には Python が大好きですが、整数と浮動小数点数のセットを繰り返し効率的に取得し、それを 1 つの大きなビットリングとして扱い、それにビットごとの突然変異を適用したい場合は、Python が最適だとは思いません。言語の選択。これは、低レベル言語でははるかに簡単 (かつ高速) です。私なら C を選びます。

アルゴリズムで頑張ってください!

于 2010-10-07T21:05:46.470 に答える
0

問題を正しく理解していれば、これは完全に言語に依存しません。標準化された IEEE 表現で浮動小数点数を表すことができるはずです。ここにチュートリアルがあります。

何が何であるかがわからない表現を取得したら、ビットにクロスオーバー(シングル、ダブルポイントなど)を適用するだけです。

于 2010-10-08T10:50:04.190 に答える
0

浮動小数点数には IEEE754 表現を使用し、整数には 2 の補数表現を使用します。または、コンピューターがバックグラウンドでこれらのバイナリ表現を既に使用していることを認識して、安全に整数と浮動小数点数を使用してください。

于 2010-10-07T22:43:04.797 に答える