質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

1回答

3817閲覧

遺伝的アルゴリズムの交叉方法について

syumei

総合スコア12

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

1クリップ

投稿2015/11/19 00:16

遺伝的アルゴリズムの交叉方法について。
一点交叉、複数点交叉、一様交叉について調べているのですが、
一点交叉の「効率が悪い」というもの以外
いまいち特徴(使うにあたってのメリット)がわかりません。
どうか知恵を借してください。宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私は授業で習っただけで専門家ではありません.
授業で習ったことを踏まえて回答させていただきます.
(いくつか認識が間違っているかも知れません)

遺伝的アルゴリズムというのは,全パターンを試すことなく優れた結果を探すことに主眼が置かれているので,
一般的に交叉の方法について数学的な優劣はありません.
しかし経験的に二点交叉と一様交叉が効率が良いということが分かっているだけです.
前者は良い特徴を継承しやすく,後者は極所解に陥ることを防ぎやすいからです.

数学的には,一点交叉×2と二点交叉×1の処理は同じです.
メモリコピーを削減する賢いプログラムなら,両者ともにメモリコピー量の期待値は1/4になります.
(※下記プログラムで検証,小さい領域を優先的にコピーする場合のコピー量の期待値を算出)
交叉すればするほど良い,というわけではありませんが,
同じメモリコピー量で一点交叉の二回分を一回でやるわけですから,やはり効率は良いです.
2倍の速度で交叉が進むということは,収束する速度も速いということになります.
もちろん遺伝子の表現方法によっては,一点交叉の方が良い結果を出す場合もあります.
しかしそのような場合はあまりないため,二点交叉が好まれているということです.
この辺りは,「やってみたらそうなったから」という以外はあまりないと思います.

python

1import random 2nt = 100000 3total1 = 0 4for i in range(nt): 5 tmp = random.random() 6 total1 += tmp if tmp < 0.5 else 1 - tmp 7print total1 / nt 8total2 = 0 9for i in range(nt): 10 tmp1 = random.random() 11 tmp2 = random.random() 12 if tmp1 > tmp2: 13 tmp = tmp1 14 tmp1 = tmp2 15 tmp2 = tmp 16 total2 += (tmp2 - tmp1) if (tmp2 - tmp1) < 0.5 else 1 - (tmp2 - tmp1) 17print total2 / nt

投稿2015/11/19 04:08

編集2015/11/19 04:10
KenTerada

総合スコア751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syumei

2016/01/09 02:00

返信が遅くなってしまい申し訳有りません。 とても参考になる回答をいただき、助かりました! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問