u++の備忘録

遺伝的アルゴリズムでゴールを決めてみた

遺伝的アルゴリズム」を用いて、サッカーでゴールを決めるのを目的とした学習モデルを設計した。2年前の大学の授業で作った資料が発掘されたので、ブログにまとめる。


モデル化

f:id:upura:20171228102051p:plain

赤色のチームが攻撃し、青色のチームのゴールを狙う。1回のシミュレーションは、赤色のチームがセンターラインから攻撃を開始し、青色のチームにボールを奪われるか、ゴールを決めるまで実施する。

2チーム分22人のエージェントを作成し、一定の規則に従い移動するよう制御。具体的には以下の通り。

  • 赤色のチーム……ゴール方向に向かって、一定速度で進む
  • 青色のチーム……赤色のチームのボールを保持しているエージェントに向かって、一定速度で進む

赤色のチームは、一定の時間(フェーズ)ごとに、ボールを保持したままドリブルするか、味方にパスを出すかを決める。ゴールへ一定の距離まで近づいたエージェントがボールを保持している場合、シュートを打つ。シュートは必ず決まる。

青色のチームのエージェントが、ボールを保持している赤色のチームのエージェントに一定の距離(ごく近く)まで近づいた場合、ボールを奪う。

遺伝的アルゴリズム

f:id:upura:20171228103226p:plain

赤色のチームに、上記のような遺伝子情報を持たせる。右上の表は、例えば「1フェーズ目で2番のエージェントにボールを保持させる(この時点で2番のエージェントがボールを保持していればドリブルし、そうでなければ他のエージェントからパスを貰う)」ということを意味する。

評価値

f:id:upura:20171228103604p:plain

とある遺伝子情報に対し、その指示に従ってシミュレーションを実行する。ここで「赤色のチームの一番先頭のエージェントが、どれだけ青色のチームのゴールに近づけたか」を評価値とする。

f:id:upura:20171228104246p:plain

複数個の遺伝子情報の中から、評価値の高いものを選択し、交叉(組み換え)を行うことで次世代の遺伝子情報群を生成する。「シミュレーションと評価→選択と交叉」の繰り返しで徐々に性能の高い遺伝子情報が生み出され、最終的にはゴールを決められる遺伝子情報が誕生するという仕組み。

実験結果

第1世代

即座にボールを奪われてしまう。

第3世代

第1世代より成長していると分かる。

f:id:upura:20171228104852p:plain

世代ごとの評価値の推移は上記の通り。世代を重ねるごとに評価値が上がっていると分かる。

第8世代

遂にゴールを決められる遺伝子情報が誕生。オフサイドとか言わない。

考察

以下の2条件を試してみた。

  1. 青色のチームのフォーメーションを変更
  2. 青色のチームの動き方を変更
    • 自分よりもボールの方が自陣ゴールに近い場合は、通常より速く移動

f:id:upura:20171228105128p:plain
f:id:upura:20171228105421p:plain

詳細は割愛するが、ゴールを決められる遺伝子情報が誕生するまでの時間は、1の場合はそれほど変わらず、2の場合は長く(13世代ほど)なった。(少なくとも今回の場合)システム設計自体を整えるより、問題が生じた場合の対策を用意しておく方が効果的だと示唆された。

参考

2年前の資料作成時、下記の動画を参考にした。当時は投稿者について知らなかったが、「平成将棋合戦ぽんぽこ」の製作者さんだった。
www.nicovideo.jp