
テニスのシミュレーションツール作成の途中経過
こんにちは、トモヒトです。
以前、テニスのシミュレーションツールを作りたいという記事を書いたのですが、その進捗を棚卸しも兼ねてまとめてみたいと思います。
結論から言ってしまうと、完成度はまだまだですが・・・
シミュレーション環境
仮想のテニスコートは、Unityを使って下のような感じで作っています。

プレーヤーの行動を決定するモデル
プレーヤーの行動を決定するモデルは、次の3つを組み合わせています。
ボールの軌道を予測するモデル
どのポジションで、どんなショットを打つかを決めるモデル
2で決定したショットを打つための行動を決めるモデル
上の分け方については、ヤーン・ケルンの「スポーツの戦術入門」で紹介されていた、以下の考え方を参考にしています。
戦術行動にいたるまでの段階
第1段階:試合状況の知覚と分析
第2段階:思考上での解決
第3段階:戦術課題の運動による解決
それぞれのモデルについて、まとめていきます。
※x軸=>コートのサイドラインと平行な軸
y軸=>コートに対して垂直な軸
z軸=>ベースラインと平行な軸
ボールの軌道を予測するモデル
ボールの軌道を予測するモデルは、下の論文で紹介されているリカレントRBFネットワークを参考にしました。
入力:ボールの座標(x, y, z軸)・速度(x, y, z軸)
出力:次のボールの座標(x, y, z軸)・速度(x, y, z軸)の予測値
=>出力を次の入力に使う
上の処理をループさせて、ボールのバウンド地点を予測する役割を持ちます。
どのポジションで、どんなショットを打つかを決めるモデル
このモデルには、強化学習のActor-Critic法という手法を使ってモデルを作りました。
自分と相手の位置や動き、ボールに関する情報をもとに、どこでどのようなショットを打つかを決める役割を持っています。
入力:ボールの座標(x, y, z軸)・速度(x, y, z軸)
自分の座標(x, z軸)・速度(x, z軸)
相手の座標(x, z軸)・速度(x, z軸)
ボールの予測バウンド地点(x, z軸)
出力1:自分の想定ヒッティングポジション(x, z軸)
出力2:ショットイメージ(ネットを通す高さ、ショットスピード、ターゲット)
ヒッティングポジションとショットイメージの評価を別々に行えるように、出力を2つに分けています。
評価基準
ヒッティングポジション=>ショット軌道との距離感が適切か
ショットイメージ=>ショット選択が妥当か(得点につながりやすいか)
ショットを打つための行動を決めるモデル
2つめのモデルで決めたヒッティングポジションとショットイメージをもとに、スプリントとスイングを決める役割を持ったモデルです。
先ほどと同様、Actor-Critic法を用いてモデルを作ります。
入力:ボールの座標(x, y, z軸)・速度(x, y, z軸)
自分の座標(x, z軸)・速度(x, z軸)
想定ヒッティングポジション(x, z軸)
ショットイメージ
出力1:スプリントスピード(x, z軸)
出力2:スイングスピード(x, y, z軸)
スプリントとスイングについても、別々で出力結果の評価を行います。
評価基準
スプリント=>想定ヒッティングポジションに近づく動きになっているか
スイング=>ショットイメージにより近いショットとなっているか
学習方法
モデルの学習については、段階的に進めていくようにしています。
序盤は「狙ったところに返す」という技術寄りの課題を設定し、徐々にショットにバリエーションを持たせるように難易度を上げていきます。
最終的には戦術的判断も含め、仮想の試合をできるようにし、モデルがどのような戦術的判断を取るのかを見ていくのが目的です。
第1段階:ネット上の同じ高さを通し、一定のターゲットを狙う
第2段階:ネット上の同じ高さを通し、位置の変わるターゲットを狙う
第3段階:ネット上の様々な高さを通し、一定のターゲットを狙う
第4段階:ネット上を通す高さ、ターゲットともに判断させる
1エピソード2000ステップ、2エピソードごとに段階を上げ、合計10エピソードを行います(第4段階到達後は条件を変えずに続ける)。
1エピソードごとに、複数のモデルの学習結果を統合し、新しいエピソードをスタートさせます。
現状はどうなっているのか
ここまでで、今やっていることの概要をまとめました。
では、実際に今どんな状況かというと
ボールの軌道予測は改善している様子がみられる
ヒッティングポジションの想定がうまくいっていない様子
=>ボールへのフットワークが解決しない適切なヒッティングポジションへたどりつけないので、スイングどころではない=>ショットイメージの良し悪しを判断しようがない
といった感じで、まだまだ道のりは長そうです。
最後までお読みいただきありがとうございました。
ご意見ご感想あれば、コメントにお願いします。