• ベストアンサー

遺伝的アルゴリズムの遺伝子の長さについて

今、グラフ理論と遺伝的アルゴリズム(以下GA)の勉強をしています。 グラフ理論の最小全域木問題をGAを使って解こうと考えています。そこで、個体の遺伝子の長さをそのグラフの点の数Nにすればよいのではないかと考えました。 しかし、グラフが大きく、点の数Nが100や1000になった場合は、遺伝子の長さも非常に長くなってしまいます。これはGAとして問題があるかないかについて教えてください。 よろしくお願いします。

  • peqtw
  • お礼率100% (5/5)

質問者が選んだベストアンサー

  • ベストアンサー
  • pori_boy
  • ベストアンサー率60% (18/30)
回答No.3

こんにちは. 遺伝子の長さが問題のサイズが大きくなるにつれて長くなってしまうのは,基本的にどうしようもないことなので問題はないといえます. ただし,以下の点についても考える必要があると思います. 1. 遺伝子の長さをグラフの点の数Nとして,どのように最小全域木を表現できるでしょうか? これは,難しい(考えるべき)課題です.他の回答者の方も言っているように,遺伝子の決め方はとても重要になります. 2. 最小全域木問題をGAを使って解くことが適当かどうか検討が必要です. 勉強のために,わざと,GAを用いて解くのであればよいですが,そうでないのであれば,GAを用いるのが適切な問題かどうかをまず考えて下さい. 最小全域木問題を解くことが目的なのであれば,単純かつ効率的なアルゴリズムが存在するので,GAを用いて近似解を得ることは推奨されません.

peqtw
質問者

お礼

回答していだだきありがとうございます。 シュミレーションをしてみて、検討するのが良い方法ではないかと最近考えております。 お礼とあわせて、1と2について補足をさせていただきます。 1.木→遺伝子と遺伝子→木の符号化・復号化はできると思います。  (複数の論文に書いてありました。正直プログラムができるかはわかりませんが・・・) 2.最小全域木問題の他の解き方(プリム法とクラスカル法)については勉強をしました。  そこで、点の数Nが非常に多い場合はどうするか?と考えた次第です。 今後も勉強をしていこうと思います。ありがとうございました。

その他の回答 (2)

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

>これはGAとして問題があるかないかについて教えてください。 これ自体が非常に難しい問題です。 一般論で言えば、GAがうまく働くかどうかは、ほとんど、Geneの決め方にかかっています。あんまり長いのは普通はよくないでしょうね。

peqtw
質問者

お礼

回答していただきありがとうございます。 シュミレーションでいろいろとやってみるのが良いのかな、と考えています。

noname#194289
noname#194289
回答No.1

ずれているかもしれませんが、何かの理論(グラフ理論かどうかわかりませんが)に基づいて計算すると普通のたんぱく分子が最も安定な形を取るためにかかる時間が膨大なものになってしまうというような話を聞いたことがあります。現実にはどんなたんぱく分子でも簡単に安定した形におさまってしまうようです。見当はずれかもしれませんがもし少しでも参考になればと思い書きました。

peqtw
質問者

お礼

回答していだだきありがとうございます。 たんぱく分子については全く知らないことでしたので、 今後勉強をしていきたいと思います。

関連するQ&A

  • 最小全域木について

     現在、最小全域木の問題はグラフ理論や遺伝的アルゴリズムの文献など様々な分野で解説されていますが、この「最小全域木」について気になることがあります。 最小全域木とは辺に対して一つの重みがあるものですが、この重みが多重化すること、つまり一つの辺に対して二つ以上の重みが存在する最小全域木とは存在しないのでしょうか?? つまりは「二重の重みを持つグラフ」を対象とした研究とは世の中では行われていないのでしょうか?? 厳密な解を求めるのが不可能など、様々な問題が生じてくるから不可能なのかなと思ったりしたのですが、、、違うのでしょうか?? もし、この分野に詳しい方がいらっしゃったら返事をお願いしたいです。

  • 遺伝的アルゴリズム

    遺伝的アルゴリズムで組み合わせ問題の解決に取り組んでいるのですが、どのくらいの個数からGAは有効っていえるのでしょうか? 全通りを調べる方法より早く見つかれば有効と言えるのでしょうか?? どなたかご存知の方いられましたら、教えてください。 お願いします!!

  • 遺伝的アルゴリズム

    遺伝的アルゴリズムについて勉強しています。 そこで、質問なのですが交叉確率によって何が分かるのでしょうか? 交叉確率を0→0.5→1.0と変更して、それぞれのグラフを出すように言われたのですが、出た結果から何が分かったのかが分かりません。 教えてください。 図書館などでも調べたのですが、わかりませんでした。

  • 遺伝的アルゴリズムのプログラミングについてですが・・・

    遺伝的アルゴリズムのプログラムの基本的な流れが↓のページ http://www.sist.ac.jp/~suganuma/kougi/other_lecture/SE/opt/GA/GA.htm に 【1.初期化 2.生物集団の評価 3.交叉 4.突然変異 5.各個体の評価 6.淘汰】と書かれてあるのですが、 f(x) = sin(3x) + 0.5sin(9x) + sin(15x + 50) [0.1]区間の最大値を求める↓のプログラム http://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/genetic/C++/gene_f.txt  に当てはめるとどの部分がどこに当たるのでしょうか…(また、このプログラムはどこからどのように読んでいけばいいのでしょうか…)。一応コメントが書かれていますがよく分かりません><; わかる方がいらっしゃいましたらよろしくお願いしますm( _ _ )m また、遺伝的アルゴリズムのプログラミングをする際の注意点があれば教えてください。

  • 遺伝的アルゴリズムのシュミレーション

     私は、遺伝的アルゴリズムについて勉強中です。 MATLABでGAをシュミレーションしたいのですが、英語で扱いにくい現状です。  MATLABやそのGAを扱う方法を解り易く説明したサイトを教えていただけませんか?  また、MATLAB以外のGAのソフト(出来れば日本語版)を知っていましたら教えていただけませんでしょうか?

  • 遺伝的アルゴリズムの評価式に関する質問です。

    膨大な数の組み合わせから正解の組み合わせを求めるという大規模組み合わせ問題があったとします。 このような問題を遺伝的アルゴリズムを用いて解こうとしているのですが、今用いている評価式より良いアイデアが自分では考えつかなかったため質問します。 以下、問題や用いている遺伝的アルゴリズムに関する詳しい説明です。 例えば、仮に、23, 21, 65, 78, 43, 78, 83, 56, 78 ,89 の10個の数の組み合わせがあるとき、 合計して109になる組み合わせ(23,21,65)を見つけたいという問題です。(正解の組み合わせは複数個あっても、一個見つかれば良い。また正解の組み合わせは必ずあるものとする。) この問題を遺伝的アルゴリズム(GA)を使って解くとします。 以下、簡単なGAの説明です。 表現型に2進数ビット列を用いる。 個体数は200とし、初期個体はランダムで生成する。 評価式はf(x) = b/(b+|b-t|)(bは正解の組み合わせの合計値で、tは2進数ビット列で1を立てた場所の数の合計値である。)。終了条件はこの評価値がf(x)=1になることである。 交叉は一様交叉で突然変異も行う。 表現型について詳しく説明すると、 コード化に 0と 1の並びである2進数ビット列を用いて、 その場所に対応する数を加算する場合は1を, 逆に加算しない場合は0を遺伝子の表現型に立てビット列を生成しました。 例えば今回の正解の組み合わせ(109)を2進数ビットで表すと下のようになる。 23, 21, 65, 78, 43, 78, 83, 56, 78 ,89 1 1 1 0 0 0 0 0 0 0 ←2進数ビットを用いた表現型。 (1が立っている場所の数が加算されて合計で109となり、これが正解の組み合わせであることがわかる。) そして、この遺伝的アルゴリズムの評価式を f(x) = b/(b+|b-t|) とします。(bは正解の組み合わせの合計値で、tはビット列で1を立てた場所に対応する数の合計値である。) 評価式f(x)=1になる、つまり正解の組み合わせが見つかれば、遺伝的アルゴリズムは終了する。 この評価式で遺伝的アルゴリズムを回しているのですが、この簡単な評価式では近似解に陥ったとき、解を求めるのがどうしても遅くなってしまいます。 全体的に長く、わかりにくい説明で申し訳ないのですが、この評価式の改善案、またはこの遺伝的アルゴリズムの改善案などがあれば教えていただきたいです。 以上、よろしくお願いします。

  • 遺伝アルゴリズム 遺伝的オペレータの選択処理における「ルーレット選択」を実行するサブルーチンをプログラミング

    学校の課題でプログラミングの課題がでたのですが、その授業ではプログラミングは一切指導されないので、作成できなくて困っています。 どなたかアドバイスをお願いします。。。 よろしくお願いします。 課題は以下の通りです。 遺伝アルゴリズム 遺伝的オペレータの選択処理における「ルーレット選択」を実行するサブルーチンをプログラミングせよ ルーレット選択のアルゴリズム 手順1:世代tの個体群X(t)の中のN個の個体の適合度fi,i=1,....,N,と、その総計fsum=Σfi(i=1~N)を求める 手順2:〔0,1〕の乱数rand()を発生させ、s=rand()*fsumとする 手順3:Σfi(i=1~k)、fi≧sとなるような最小のkを求めて、k番目の個体を世代k+1に生き残る個体の候補とする 手順4:候補となる個体数がNになるまで、手順2,3を繰り返す。 お手数ですがよろしくお願いします。

  • GA(遺伝的アルゴリズム)を教えてください!

    はじめまして。 先日、大学でGA(遺伝的アルゴリズム)を使って 簡単な掛け算の(例えば、3×○=12で○の中に当てはまる 数字を導き出す)問題を解いてくるようにと課題がありました。 しかし、GAに関しては基本的な用語(交叉や突然変異など)を 教わったのみでプログラムが全然分かりません。 自分でも色々調べてみたのですが、全く参考になりそうなものが 見つかりませんでした。 そこで、もしご存知の方がいらっしゃるなら教えていただけないでしょうか? プログラムを組む場合にはC言語(C自体も使ったことがありません・・・。) を使うことになるのですが、できればMATLABを使いたいと思っています。 もちろんC言語でも構いませんので、よろしくお願いします!

  • 遺伝的アルゴリズム

    10個の荷物(1.0キログラム、5.0、2.0、…etc)が一つずつあるとして、それらの荷物を一つずつリュックサックに入れるとき、総重量が30キロを越えないようにしたい、という問題を遺伝的アルゴリズムでプログラミングしたいのですが、その荷物を入れる場合は1、入れない場合は0というようにする場合、どうプログラミングすればよいのでしょうか。どうしても分からないので、プログラムをそのまま記述して頂けると非常にありがたいです。よろしくお願いします。

  • 辺彩色のアルゴリズム

    グラフ理論についての質問です。 平面グラフを辺彩色するのに必要な色の最小の数を求めるアルゴリズムがあるとききました。 しかし、調べてみましたがどのようなものかわかりません。 知っている方いましたら教えてください。