• 締切済み

進化のシミュレートプログラム

3年程前?に見つけたサイト上で動くシミュレーションプログラムを 探しています。 そのプログラムはよくできていて、9マスのマトリックスに描かれた 9パターンの絵のうち一つをクリックすると、その絵を中心に新たな 8パターンの絵がうまれ、さらに選択していくと、自分が想像する 生き物の形にどんどん近づいていくというプログラムです。 確か遺伝のアルゴリズムを用いて、交叉、突然変異などを繰り返す プログラムだったと思います。 似たようなプログラムでも結構です。ご存知でしたら教えて下さい。 よろしくお願いします。

みんなの回答

回答No.1

これでしょうか? http://library.thinkquest.org/C004367/ia2.shtml 他にも「evolution simulator biomorph」 などの文字列でいくつか出てくるようです。

参考URL:
http://library.thinkquest.org/C004367/ia2.shtml
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 進化シミュレーションプログラム

    進化シミュレーションプログラム 10年ほど前、ネット上(Javaだったと思う)プログラムで、 生物(遺伝子)の進化を模したおもしろいものがあったので すが、探してもなかなか見つかりません。 そのプログラムは遺伝子アルゴリズムを取り入れており、 表示上は3×3で9マスから構成されています。 真ん中のマスに現状の生物(ドット)が配置され、周りの マスに、変異した形状が表示されます。マウスで周りのマスの 一つを選択すると、その形状が真ん中のマスに配置され、 新たに変異した形状が周りに配置されます。この選択を 意識して繰り返していると、見たことのある形に変化して いくというものです。 遺伝子分野では有名なプログラムなのかも知れません。 ご存知の方がいらっしゃいましたら、ご教示頂きたく、お願い します。

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

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

  • 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

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

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

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

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

  • 実践的な遺伝子的アルゴリズムの作成法

    素人ですが、遺伝子的アルゴリズムを考える上で、大きな問題に直面しています。 1)最適化の対象を如何にコーディングするか? 2)交叉点を如何に設けるか? これらは組合せの対象の要素間に何らかの曖昧な複数の相関関係がある場合に難しくなります。 そこで、 1)「遺伝子的アルゴリズム」をタイトルにした一般の技術系の和書に書かれている以外に、実例を調べる手段? 2)社会人が遺伝子的アルゴリズムの開発の実際を学ぶための公共の機関、例えば聴講生として学べる場所? 3)遺伝子的アルゴリズムを組み込んだソフトを作る上で、普段使用しているC++などの汎用プログラム言語と、SchemaやLISPなどの知能プログラミング言語とでは、どちらが便利なのでしょうか? これらの人工知能プログラム言語には、コーディングや交叉のための専用のコマンドが提供されているのでしょうか? 自分は、情報工学の出身ではないため、C++言語と「遺伝子的アルゴリズム」の技術書籍以外には、バックグラウンドがありません。よろしくお願いいたします。

  • 人工知能と将棋

     とあるプログラミングの課題で、将棋のプログラムを作りました。  そこで、将棋に人工知能をつけてみようと思い立ち、先輩に相談したところ、「遺伝的アルゴリズムを使うと人間に勝つのは無理だけど結構マシなのができるんじゃないのか」といわれました。  僕は今まで遺伝的アルゴリズムについてまったく無知だったので、基礎の本を買って勉強しました。  しかし、将棋の人工知能ってどうやったら作れるんだろう?とそこで考え込んでしまい、いろいろと思考をめぐらしています。  僕が考えているのは決して強いプロうグラムじゃなく、学習していくようにしたいのですが、  1.どの駒をどこに動かすという遺伝子カードを何十万枚と作る(乱数か何かを使って)  2.カードの適合度にしたがって、ある1枚を引き、今の盤面で有効ならば実際に駒を動かす  3.その2手目か3手目に盤面を評価し、以前よりも状況が悪化していれば、そのカードの適合度を落としていく、有利になればカードの適合度を上げる  (4.交叉や、突然変異を用いてカードを変化させる?)  こんな感じにすればまあまあかなと考えていました。  しかし、ここでよく考えると、  たとえあるカードによって状況が不利になって適合度が落ちても、それは別の状態において有利になれるカードなのかもしれない。それなのに適合度を落としてもよいのか?  むちゃくちゃなことを書いているかもしれません。遺伝的アルゴリズムではないことを書いているかもしれません(爆)。が、皆さんはこの疑問についてどう思われますか?  何かご意見、アドバイスをお願いします。

  • 遺伝的アルゴリズム

    遺伝的アルゴリズムを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関数で交叉や突然変異の結果を表示しているのですがちゃんと動作しているようです。 二台のパソコンどちらでやってもこのようなメッセージが出るので困っています。何が起こっているか見当がつく方、いらっしゃいましたら助言願います。 よろしくお願いいたします。

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

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

  • マシニング加工で年月日の情報を製品に加えるNCプ…

    マシニング加工で年月日の情報を製品に加えるNCプログラム マシニングセンタにて加工日時のドリル痕を製品つけたいと考えていますが、 どうやってNCプログラムを組んでよいか分からず悩んでいます。 FANUCのシステム変数に#3011:年月日 #3012:時分秒の情報があるとの事で この情報を鋳出ししたマトリクス表にドリル痕でマークを付けて その組み合わせで表現をする方法です。 マトリクスの縦列は年、月、日、時、分の5マス 横列は1,2,4,8,16の数字 (この5つの組み合わせで1~31の表現をします)の5マス 5×5のマトリクスを考えています。 問題は上記のシステム変数から抽出した数字をどうやって年月日の各情報に 切り分けて、マトリクスの加工パターンに反映させるか、が 分かりません。 ご経験のある方、ご教示頂けますようよろしくお願いいたします。 皆様からのご指導 ありがたく拝読しております。 今回初めての本サイト投稿だったのですが、皆様からの 珠玉のアイデアもさることながら、インターネットという中で 素性も顔も知らない小生の為に、親身になって投稿いただいた 皆様のお気持ちに感動し、職場で泣きそうになりながら読んでおります。 今回の出来事をきっかけに、マクロPRGをもっと知りたい欲求が ふつふつと湧いております。ありがとうございました。