• 締切済み

遺伝的アルゴリズムについて

GAについて、かなり初歩的な質問です。 交叉に用いた親は次世代に残すものなのでしょうか? 初期集団で適応度の高い親が出来て、世代を重ねてもその親が生き残っているというのは、なんか遺伝というイメージから少しずれた気がしたので。 よろしくお願いします。

みんなの回答

回答No.1

北野宏明編「遺伝的アルゴリズム1」によると、 エリート保存戦略は集団中で最も適応度の高い個体をそのまま次世代に残す方法である。とあります。 やりかたとしては両方あります。 いい解が壊されずにそのまま残るという利点がありますが、エリート集団が急速に広まって局所解に陥りやすい欠点があります。 イメージとしては細胞分裂でそっくりそのままの子孫を残すと考えたらどうでしょう。(有性生殖と無性生殖)

関連するQ&A

  • Javaでの遺伝的アルゴリズムの実装について

    別のWebサイトでも質問させていただいているのですが、 double[][] a={ {1,1,1,1,1,1,1,1,1,1}, {1,2,1,4,1,1,1,8,1,1}, {2,2,2,2,2,2,2,2,2,2}, {2,2,2,3,2,2,2,3,2,2}, {2,2,2,2,2,4,2,2,3,2}, }; のように予め決められている2次元配列(a[0],a[1],a[2],a[3],a[4]それぞれが遺伝子)と、 double[] fitness={50,100,60,90,120}; のように遺伝子それぞれに対応している適応度があるとして、(適応度は別プログラムで計算済み) 遺伝的アルゴリズムで予め設定された遺伝子と適応度をエリート及びルーレット選択、交叉、突然変異を行う(一世代のみ)プログラムをJavaを用いて作りたいのですが、 Web上にある例となるClassは初期集団をランダムで生成した上で、ランダムに生成された遺伝子に対し適応度計算を行い、それを選択、交叉、突然変異を行うClassに投げるものがほとんんどです。 なので、適応度計算を行わずに既にある遺伝子と適応度をどのようにして結びつけるのか、もともとランダムに生成された遺伝子に適応度計算を行うこと、複数世代行うことを前提に設計されている選択・交叉・突然変異等のClassをどう変更すればよいのかわからず、手詰まりになってしまいました。 周りの知り合いに聞いても、Javaは少しならわかるが専門外、遺伝的アルゴリズムは勉強したことがない人ばかりなので、聞きたくても聞けない状況となっております・・・。 遺伝的アルゴリズム及びJavaに詳しい方、どなたか実装例を教えていただけないでしょうか? 参考にさせていただいたURL:http://www.ics.kagoshima-u.ac.jp/edu/ProgramingJava/samples/SimpleGA/step1/index.html#GA%20%E3%82%AF%E3%83%A9%E3%82%B9

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

    遺伝的アルゴリズムのプログラムの基本的な流れが↓のページ 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 また、遺伝的アルゴリズムのプログラミングをする際の注意点があれば教えてください。

  • 遺伝的アルゴリズム

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

  • 対話型遺伝的アルゴリズムについて。

    対話型遺伝的アルゴリズムについて。 現在,IGAを用いたアプリケーションを構築するための勉強をしている者です。 進化計算処理の一つ,「交叉」について2つ疑問があります。 <質問1>=============================== 例えば, 「ユーザに好きな色を評価してもらいながら最適な色(好みの色)を作り出してもらう」 「パラメータはRGB3原色の3つ」 とするとき,評価及び進化計算の過程でRGBの値が 親1 R=63 G=127 B=255 親2 R=50 G=240 B=0 の親があったとします. これを以下のように,10進数のまま交叉するというのではだめなのでしょうか。 親1 R=63 G=127 <交叉位置> B=255 親2 R=50 G=240 <交叉位置> B=0          ↓ 子1 R=63 G=127 B=0 子2 R=50 G=240 B=255 もちろんこれだと2進数化(コード化)した時とは違い,各原色はそっくりそのまま入れ換えることになります。 ただ,それでも最適解へ収束するということには変わらないと思います。 従来の2進数にコード化して行う明確な理由を教えて頂けないでしょうか。 <質問2>=============================== 上記のアルゴリズムであれば, 整数である「表現型」のままの交叉ということになるのでしょうか。 もしそうであれば,ここは従来の交叉は使えず「実数値GA」なるものを使わなければいけないのでしょうか。 ==================================== 以上2点です。 どちらか1つの回答でも結構です。 どうぞ,よろしくお願いします。

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

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

  • 遺伝的アルゴリズム

    遺伝的アルゴリズムをCで組み、Cygwinのgccコマンドでコンパイルしたのですが、実行するとエラーが出てしまいます。 gsb内で実行しwhereコマンドで異常箇所を探した場合のメッセージは以下の通りです。 #0 0x61016525 in stack_info::walk () from /usr/bin/cygwin1.dll #1 0x7c859dcc in OutputDebugStringsA () from /cygdrive/c/WINDOWS/system32/kernel32.dll #2 0x40010006 in ?? () #3 0x00000000 in ?? () プログラムは長いので載せられませんが、アルゴリズム中の染色体は二次元配列の遺伝子を含む構造体です。 遺伝子の配列に関わるノード数(chromo[timeslot][NODE]←このNODEです。プログラム冒頭で値をdefineで宣言しています)が30位なら世代数が比較的多くても動くのですが、これが50あたりになると世代数が低くてもエラーが出てしまいます。 printf関数で交叉や突然変異の結果を表示しているのですがちゃんと動作しているようです。 二台のパソコンどちらでやってもこのようなメッセージが出るので困っています。何が起こっているか見当がつく方、いらっしゃいましたら助言願います。 よろしくお願いいたします。

  • またまた遺伝子頻度について教えてください。

    先程も質問させていただいたのですが、 遺伝の授業で習った事で、なんだか納得できない所がもうひとつあるのでどなたか教えていただけませんでしょうか。 例えば ++(優性)、+m(ヘテロ)、mm(劣性)とあるとき、 “集団の大きさが小さければ小さいほど、遺伝子mがFIXEDまたはLOST(全滅(?))するのが早くなる” (つまりmの遺伝子頻度が1または0になるまでにかかる世代数が少なくなる)というようなことを習ったのですが、 もしある集団で、遺伝子がFIXEDされても(mの遺伝子頻度が1になっても)そっからまた++の子供が産まれる可能性ってありますよね? mの遺伝子頻度=(+mを持つ個体数x2 + mmを持つ個体数x2)/全個体数x2=1 になったとしても、その中で+mと+mが交配したら++がまた産まれることもあると思うのですが、だとすると、1=FIXEDとか0=LOSTとするのはおかしいような気がしたのですが、これはこれでいいのでしょうか? (というか、そもそも+mという表現型としては野生型の個体が残っているのに、その集団で遺伝子+は絶滅したと言えるのがおかしい気がするのですが。) つまり、私が疑問に思っているのは “+の遺伝子はLOSTしても(絶滅しても)後の世代に++の遺伝子型が産まれてくることもある”と理解していいのか。 ということなのですが、どうなんでしょう? 何か根本的に間違ってたりしますか? なんだかわかり難い文章で申し訳ないです。 どなたか教えていただけませんか。 よろしくお願いします。

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

    膨大な数の組み合わせから正解の組み合わせを求めるという大規模組み合わせ問題があったとします。 このような問題を遺伝的アルゴリズムを用いて解こうとしているのですが、今用いている評価式より良いアイデアが自分では考えつかなかったため質問します。 以下、問題や用いている遺伝的アルゴリズムに関する詳しい説明です。 例えば、仮に、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になる、つまり正解の組み合わせが見つかれば、遺伝的アルゴリズムは終了する。 この評価式で遺伝的アルゴリズムを回しているのですが、この簡単な評価式では近似解に陥ったとき、解を求めるのがどうしても遅くなってしまいます。 全体的に長く、わかりにくい説明で申し訳ないのですが、この評価式の改善案、またはこの遺伝的アルゴリズムの改善案などがあれば教えていただきたいです。 以上、よろしくお願いします。

  • 遺伝的アルゴリズムによる繰り返し囚人のジレンマ

    初めて質問をさせていただきます。ヨロシクお願いします。 遺伝的アルゴリズムによる繰り返し囚人のジレンマゲームに関するプログラミングについて分からないことがあります。 当方はC++初心者のためクラスの使い方がイマイチ分かりません。 クラスの概念は文献により理解できるのですが便利さが実感できません。 具体的にいうと、遺伝的アルゴリズムのどの部分にクラスが適用できるのでしょうか?クラスを用いないで強引にプログラムすることは出来そうなのですが…。 囚人のジレンマゲームに関わらず、遺伝的操作(選択、交叉、突然変異)をクラスの概念を用いてプログラムする際のヒントとコツなどを教えて下さい!また遺伝子情報は配列を用いて表現するのでしょうか?なにぶん遺伝的アルゴリズムは初めてなので分からないことだらけです。ヨロシクお願いいたしますm(__)m

  • 暑さに強い遺伝子って無いの?

    暑いです!毎日熱中症に注意と言われていて、このままでは日本では夏に外に出られなくなります! 日本人/人類に暑さに強くなる遺伝子って無いのですかね?最近の研究で、遺伝子は産まれつきで変わらず子孫に引き継がれていくけれど、活性化していない遺伝子が環境によって活性化して後天的に遺伝子の働きが変化して2-3世代は遺伝すると言うことがわかってきたそうです。例えば高山に移住するとしばらくは呼吸が苦しく体調不良に陥るけれど2-3週間もすれば適応し、その状態はその後低地に移住しても遺伝していくそうです。他にも飢餓による遺伝子の働きの変化も遺伝するそうです。 https://wired.jp/2017/10/10/epigenetics-mechanism/ だったら、元々人類はアフリカで誕生しているので暑さに強い遺伝子があって、これだけ扱ったらスイッチオンしてくれても良さそうなもんですが。 詳しい方教えてください。

専門家に質問してみよう