LoginSignup
15
6

More than 5 years have passed since last update.

[Unity]遺伝的アルゴリズムでサッカーボールを蹴ってみた

Last updated at Posted at 2018-08-25

こちらはUnityゆるふわサマーアドベントカレンダー 2018の8/25記事になります

遺伝的アルゴリズムを使ってどれだけ遠くにサッカーボールを蹴り飛ばせるかやってみました

結果

1世代目

最終世代

全過程

ざっくりとした方法説明

遺伝的アルゴリズムとは

キャプチャ.PNG
遺伝子をたくさん用意して
交配させて 
最適な遺伝子を見つけ出す…
要するに最適化です

今回は足のモデルをたくさん用意して
シミュレーションを行い
できるだけ遠くにボールを蹴りだした上位20足のみに交配することを許しました
なお,100位以内にランクインしなかった足は子孫を残す機会を失うことにしました…

サッカーボールを蹴る方法

足のモデル

足のモデルはこんな感じです
赤い部分が関節の可動域です(平面での動きに制限しました)
キャプチャ.PNG
ひざから下の部分(第2足)にのみ力をかけて足を動かしていきます

遺伝子には何の情報を入れるか

遺伝子には足にかける力(正確にはトルク)の値を入れました(範囲は-60~100)
キャプチャ.PNG
上の画像のように,時間がたつと左の値から順にトルクをかける仕組みです
つまりこの問題は正確に言うと,
時間内にサッカーボールをできるだけ遠くに蹴り飛ばせる遺伝子はなにか
ということになります

遺伝的アルゴリズムの設定

細かい設定は次の通りです 

符号化:実数値(符号化しない)
評価:ボールの到達距離
選択:エリート主義(ボールの最長到達距離のフォームを知りたいため)
交叉:SPX(変数間に依存関係がある可能性があるため)
突然変異:必要ない(SPX,BLXでは親個体の分布よりも子個体の分布のほうが広い傾向があるため)

SPXについての参考リンク

まとめ

これくらい簡単な問題だと結構すぐ最適化されちゃうんですね
10世代くらいでもう変化がなくなってきました
拡張率を大きく設定しすぎてSPXがうまく働いていない気が…

GitHubで公開しました: SocckerGA

15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6