見出し画像

テニスのシミュレーションツールを作りたいと思った話

こんにちは、トモヒトです。

最近、「テニスのシミュレーションできるようにしたい」と考えています。
なぜ、そう思ったのか?や、どんなイメージを描いているのか?を、備忘録的に書いてみたいと思います。

テニスのシミュレーションツールを作りたいと思った経緯

データ収集の課題

今までテニスのデータ分析に興味があり、自身で分析したり学びをアウトプットしてきました。

その過程でずっと課題に感じていたのが「質の高いデータをどうやって集めるか?」でした。
ネット上でデータを集めるのは容易でなく、仮にあっても自分の分析したい内容に必要なデータがそろっているとは限らない―
分析スキルなど、ほかにも課題はあるものの、この課題をどうするかは重要だと感じていました。

この課題の解決策としては、次の3つを考えました。

  1. 現時点で手に入るデータの範囲内でできることを極める

  2. 自分でデータ収集の方法(ツール)を作る

  3. データがなくても可能な方法を模索する

ここで、3の「データなしで可能な方法」に興味がわきました。

AlphaGoZeroのテニス版ってできないか?

人間の対局データを使わずに、AI同士の対戦を繰り返すことで人間を上回るパフォーマンスを発揮できるようになったのが、AlphaGoZeroです。
これを見て、「仮にAlphaGoZeroと同じことをテニスでできたら面白いかも?」と感じました。

具体的には、次のようなことができるのかなと想像しています。

  • 現在のセオリーにとらわれない戦術の検討

  • 仮想の対戦相手とのシミュレーションを通じて、試合前の戦略立案

  • 技術や体力を磨くことでプレーがどう変わるかを検証し、トレーニングの方向性を決める材料にする

「簡単にはできない」のはわかりつつ、「できたらどんな可能性が広がるのか」とても興味深いなと感じました。


どうやって作るか(現状のアイデア)

では、具体的にどうやって作るのか、現時点でのアイデアをまとめてみます。

概要

大枠としては、AlphaGoZeroにならって、強化学習の手法を用いて、セルフプレイによって学習を進める形になるかと思います。
離散値と連続値の違いから、AlphaGoZeroで使われているモンテカルロ木探索は使えないため、そこをどう補うかが課題の1つです。

シミュレーション環境

Unityを使用して、テニスコートとプレーヤーを作成する案を考えています。

課題としては「どこまでリアルに作りこむ必要があるか」を見極めて、学習のコストと現実世界の再現度の最適なバランスを見つけることかと考えています。

エージェント(プレーヤー)

強化学習の「エージェント」がテニスのプレーヤーに相当しますが、これをどのように作るかが成功の要因の1つと考えます。

エージェントに関しては、「配球を考えるネットワーク(戦術面担当)」と「動作遂行のネットワーク」で分けて作成するのがよいと考えます。
理由としては、

  1. 戦術面と技術面を同時に学習させると、複雑になり学習がうまく進まないのではないかという懸念
    =>ある程度返球できるモデル同士で戦わせるほうが学習が効率的では?

  2. ポイント結果に対する評価で、戦術面と技術面を切り分けて評価しやすい

と考えたからです。

あと、地味に重要だと感じているのが「ミスを発生させる方法」です。
テニスはポイントの6~7割くらいが相手のミスによる得点であることから、相手がミスしうる状況でないと現実との乖離が大きくなる可能性が考えられます。
現実と乖離しすぎてしまうと、現実に即さない選択が最適解となりうると想像できます。

この部分については、「実際に人間がどの程度、動作を微調整できるのか」に基づいて、動作制御の精度を調整する必要があるかと考えます。
ここを決めるには、スポーツ科学の知見が必要になると想定されます。

学習プロセス

段階的な学習プロセスを採用する計画を立てています。

大まかには、

  1. ストローク技術の獲得(狙ったターゲットエリアに返す)

  2. ラリーを続ける

  3. 試合形式で戦術面の向上

のように段階を踏んで進めていきます。
場合によっては、Play&Stayのように、コートの大きさや、ボール・ラケットを変更しながら学習する必要も出てくるかもしれません。


最後に

今回は、テニスのシミュレーションツールを作りたいと思った経緯と、その方法案についてまとめました。


最後までお読みいただきありがとうございました。
ご意見ご感想あれば、コメントにお願いします。

この記事が気に入ったらサポートをしてみませんか?