遺伝的スクランブル交差点



ゲームがセキュリティ設定によってブロックされる場合は、こちらを参照して下さい。
ゲームが動かない場合は、「Sun」より最新のJavaをダウンロード。

ver 2.0:お持ち帰りできるように
ver 2.1:お持ち帰り版で、無駄に処理が重たい問題を修正+ファイルサイズ少し減量。
お持ち帰り版(Gene2.jar: 31.8 KB)

操作説明

・目的地到達率:最近の32人がゴール出来た確率

初めは避け方も渡り方も分からない馬鹿ばっかりなので、[S]キーを押して高速化して下さい。
1倍速→5倍速→25倍速→125倍速→限界倍速→1倍速・・・と変わります。
1フレームずつ見たいときは[A]キー。通常再生に戻すのは[S]キー。

うまく学習できない時は[P]でリセットしてみてください。

詳細

人が、他の人とぶつからないように横断歩道を渡る遺伝的アルゴリズム。
環境は以下のとおり。
・人それぞれに「疲労」を設定
時間疲労時間が経つと疲れる
接近疲労近く(丸の大きさの2倍くらい)に他人がいると疲れる(パーソナルスペース)
衝突疲労ぶつかった時はすごく疲れる
加速疲労移動方向が大きく変わると疲れる

・疲労が10000貯まると死亡

人は、任意の向きに最高速度以下の速度で動くことが出来る。
行動決定の遺伝子(学習パラメータ)
・ゴールの向きに動く大きさ
・視野の広さ(他人を認識する円の大きさ)
・相対位置に対して避ける相対方向、大きさ
・相対速度に対して避ける相対方向、大きさ
・相対位置とその逆数を、避ける大きさ、移動速度にどれだけ反映させるか
・相対位置と相対速度の内積の値を、避ける大きさ、移動速度にどれだけ反映させるか
・相対位置を右90度回転したベクトルと相対速度の内積の値を、避ける大きさ、移動速度にどれだけ反映させるか
等など

人それぞれにゴールを設定。ゴールは無限に長い直線で、その線を超えたらゴール。
ゴールした場合、ゴール出来た遺伝子として、遺伝子バンクに登録。
遺伝子バンクの遺伝子は、ゴールした時の疲労が低いもの20個だけ保持する。
新たに人を生み出すときは、遺伝子バンクから2つ選んで混ぜ合わされて新たに遺伝子が作られる。疲労の少ない遺伝子が選ばれやすい。
生成の際、たまに突然変異する。
ゴールできなかった時は、その遺伝子を創りだした元の遺伝子の疲労値を20上げる。

遺伝子バンクの遺伝子は、約17秒ごとに疲労が1増える。

本来の遺伝的アルゴリズムとはやや異なります。

お世話になった方々

サクラエディタ:テキスト打ち込みの基本ソフト。

その他・余談

学校で暇な時間を持て余していたので作ってみました。
幾つかの解に別れる様子
・衝突目前で右or左回転で避ける
・衝突目前で斜め後ろに下がる
・パーソナルスペースに入らない距離で右or左回転で避ける
・大きく右or左回りで交差点を通らない

ちなみに、遺伝子は時間経過で劣化したり、突然変異したりするので、死ぬ人がいなくなることはありません。

うまく避けれる遺伝子が登場すると、その遺伝子を持った人でうめつくされる。
すると、何も気にせずゴールに向かって直進する遺伝子が生まれた時、周りが避けてくれる人ばかりなので、その遺伝子が最小疲労でゴールする。
すると、周りを気にしない遺伝子が交差点に多く現れるようになり、衝突が多発。
・・・というジレンマもあって、収束しません。

また、最適解は環境で変化する様子。
・初期設定:パーソナルエリアに入れずに避ける
・人が倍:パーソナルエリアに入れて避ける
・人が多すぎ:大きく周って交差点を通らない
・衝突疲労がマイナス:ぶつかりまくる


更新履歴 ver 1.1(2014年2月2日):JRE1.6以下で実行できるように
ver 2.0(2014年2月4日):お持ち帰りできるように
ver 2.1(2014年2月8日):お持ち帰り版で処理が無駄に思い問題を修正+ファイルサイズを少し減量


0xな場所 PV:
inserted by FC2 system