私はPythonでGAを実装しており、1と0のシーケンスを格納する必要があるので、データをバイナリとして表現しています。そのための最良のデータ構造は何ですか?単純な文字列ですか?Pythonの遺伝的アルゴリズムのデータ型はどれですか?
答えて
私は弦をつけるのが良い考えだと思います。文字列を簡単に切り分けることができます。それらをリストとして処理する必要がある場合は、 "list(str)"で変換できます。リストを作成したら、それを変更して "'' .join(lst)"を使って文字列に戻すことができます。
個人的には、長いか別の整数型をビットとして格納することはありません。それはより効率的なスペースかもしれませんが、あなたが組換えをしたいときにデータを扱うことの頭痛はかなりあります。突然変異がビット反転以外のものであれば突然変異も同様に問題となる。さらに、コードを読むのがずっと難しくなります。
ちょうど私の2セントです。それがあなたを助けることを願っています。
染色体が固定長のビットストリングの場合は、配列の代わりにNumpyの配列とベクター化された操作を使用することを検討してください。これらはPythonのリストよりはるかに高速かもしれません。例えば、1点交叉は、あなたがnumpyのを使用したくない場合は、文字列はかなり適切なようだ
def crossover(a, b):
"""Return new individual by combining parents a and b
with random crossover point"""
c = np.empty(a.shape, dtype=bool)
k = np.random.randint(a.shape[0])
c[:k] = a[:k]
c[k:] = b[k:]
return c
で行うことができます。実際の要素ではなく要素へのポインタを格納するリストよりはるかにコンパクトです。
最後に、Pyevolveが染色体をどのように表しているかを見てください。それはNumpyを使用することでそうするようです。
[DEAP](http://deap.googlecode.com)と[ecspy]( http://ecspy.googlecode.com)、まだ積極的に開発されているという利点があります。 – CmdNtrf
- 1. 遺伝的アルゴリズムの遺伝子型
- 2. セルラー遺伝的アルゴリズム - セルラー遺伝的アルゴリズムでは、両親
- 3. 遺伝的アルゴリズム:フィットネス
- 4. DEAP遺伝的アルゴリズム
- 5. Python:遺伝的アルゴリズムの弱い性能
- 6. 遺伝的アルゴリズムの選択
- 7. 遺伝的アルゴリズムのコアアルゴリズム
- 8. 暗号の遺伝的アルゴリズム
- 9. 遺伝的アルゴリズムSVM後
- 10. ディープコピーと遺伝的アルゴリズム
- 11. これは遺伝子アルゴリズムですか?
- 12. Javaでの遺伝的アルゴリズムの問題
- 13. 遺伝的アルゴリズムの目的関数
- 14. フローショップスケジューリングのための遺伝的アルゴリズム
- 15. PyBrainの遺伝的アルゴリズムの例/チュートリアル?
- 16. PYTHON:ライブラリ/ツールの遺伝的アルゴリズムと多目的最適化
- 17. 遺伝的アルゴリズム:リクエストの最適化
- 18. 遺伝的アルゴリズムとタイムテーブルのシミュレーテッドアニーリング
- 19. 遺伝的アルゴリズムの並列実行
- 20. 遺伝的アルゴリズムの選択演算子
- 21. 遺伝的アルゴリズムの時間複雑度
- 22. JAVA遺伝的アルゴリズムの初期化
- 23. 遺伝的アルゴリズムの選択メカニズム
- 24. 構造体/遺伝的アルゴリズムの使用
- 25. 効率的な遺伝的アルゴリズム
- 26. 遺伝的アルゴリズムによるソート、クロスオーバーでの重複データ
- 27. Python:遺伝的アルゴリズムでナップザック最適化を解く?
- 28. ニューラルネット最適化遺伝的アルゴリズム
- 29. 遺伝的プログラミングと検索アルゴリズム
- 30. 遺伝的アルゴリズム個体対染色体
「長い」または「int」のリストがより賢明に聞こえます。 –
その上で突然変異や組み換えなどの操作を実行するのは簡単ですか?リストを効率的に扱っていますか? – Ingo
私はちょうどあなたがビットの任意の挿入/削除が必要な場合は、リンクリスト( 'collections.deque')を使うべきでしょう。あなたのデータ構造に必要な操作に関する情報を書くことができますか?これは、Pythonを知っていて、利用可能なデータ構造を知っていて、遺伝については何も知らない人にとっては役に立ちます:) –