見出し画像

複雑系からサッカーをリバースエンジニアリング【監督になってプレー原則を体験しよう!】

全文と実行コードを無料公開します。面白いと感じていただけたらスキや投げ銭、RTやいいねをよろしくお願いいたします。

みなさんこんにちは!
東大の大学院生で、野良スポーツアナリストのなういずと申します。


この記事はスポーツアナリティクスAdventCalendarの15日目の記事です。
サッカーは複雑系科学の一現象として論じられることがあります。では複雑系科学の知見からサッカーを再現することはできるのか。
これはサッカーのリバースエンジニアリング!


1.サッカーと複雑系

「サッカーはカオスとフラクタルから成り立つ」
この言葉を一度は聞いたことがあるサッカーファンも多いのではないでしょうか?

サッカーに詳しくない方のために、噛み砕いて(=厳密性・正確性を妥協して)説明すると
カオス→小さな初期値の変化において未来の挙動が大きく変化すること
フラクタル→部分と全体において似たような構造を持っていること
ということです。

このカオスやフラクタルという概念は、複雑系科学における大きなトピックです。つまり、サッカーは複雑系科学にとって興味深い現象となります。

ちなみに複雑系とは

相互に関連する複数の要因が合わさって全体としてなんらかの性質を見せる系であって、しかしその全体としての挙動は個々の要因や部分からは明らかでないようなものをいう(Wikipediaより)

たしかにサッカーは、選手間が相互に関連するスポーツで、選手の個々の技能だけでは勝敗が明らかになりづらいです。上記の説明はなんとなくサッカーらしさを感じられるように思えませんか?
実際に複雑系の知見や概念がサッカーに活かされることも最近は増えています。(詳しくは、戦術的ピリオダイゼーションで検索検索)
では、逆に、複雑系の知見を用いてサッカーを1から作り上げることはできるのでしょうか?

今日は複雑系科学の有名な研究であるボイドモデルを用いて、サッカーそのものの再現に挑戦します。
そして、サッカーを再現できたら、選手に指示を与えて上手くプレーしてもらいたいと思います。


2.ボイドモデルの紹介

サッカーの再現の前にボイドモデルの説明をさせてください。
まずは下の動画をご覧ください。(公開コード;boid.py)

鳥の群れが飛んでいたり、イワシの群れが泳いでいるように見えたかと思います。
このボイドモデルは、クレイグ・レイノルズが1986年に提案しました。ボイドというのは「鳥っぽいもの」という意味しています。

ボイドモデルは、分離・整列・結合の3つの簡単なルールから群れを作り出すことができるアルゴリズムです。
1匹1匹の位置を計算をすることなく、たった3つのルールで群れを表現することができるのが、このボイドモデルの特長です。個々の挙動は明らかでなくても全体の動きを再現できるという点でまさに複雑系です。

画像1

さて、次にボイドモデルの発展型をご覧いただきます。エサを追加します。(公開コード;boidprey.py)


エサ(赤い丸)に向かって群れが動いていくのが分かると思います。
まるで池の鯉にエサを投げ入れた時のようですね。
このエサには誘引力が設定されています。

吸引力


これら「分離・整列・結合・誘引力」の4つのパラメータを調整することで、群れのパターンを変化させることができます。
つまりパラメータは群れを維持する上で意思決定の基準といえます。
意思決定の基準を変化させることで、1匹1匹に指示することなく、動きのパターンを指示することができるのです。

ところで、このエサありボイドモデルは、「ボールに群がりがちなお団子サッカー」のようにも見えると思います。そうです、低学年の子供がやってしまうゴチャゴチャサッカーに似てますよね。
ということで、ボイドモデルをお団子サッカーへと発展させていきたいと思います。

だんご


3.お団子サッカーを実装してみよう

サッカーのドリブルを再現するために、図形とエサが衝突した場合にエサが移動するように設定してみました。
図形が速度vで衝突した場合、エサは2vの速度で動くように設定しました。

ドリブル

ドリブルを実装したボイドモデルでこちらです。(footballsample.py)

ボールを目掛けてお団子になったり、うまくお団子から抜け出してドリブルしている様子がわかると思います。
『画面外=ゴール』だと捉えると、原始的なサッカーが行われているように見えませんか??

さて、本ブログの目的1は、複雑系からサッカーを再現することでした。
複雑系を代表するボイドモデルでお団子を実装し、この目的はある程度達成されたように思えます。

では目的の2つ目です。複雑系では初期パラメータを変えることでその後の動きが大きく変わるという特徴があります。
つまり、あなたは監督になって意思決定の基準(プレー原則=初期パラメータ)を設定し、ボイドの動き方を変えることができるのです!!


4,監督になってプレー原則を指示してみよう

初期パラメータはfootballsample.pyのこの部分をいじることで変化させることができます。

# 力の強さ(結合・分離・整列・誘引力の順)
COHESION_FORCE = 0.008 
SEPARATION_FORCE = 0.9
ALIGNMENT_FORCE = 0.06
PREY_FORCE = 0.0005

# 力の働く距離
COHESION_DISTANCE = 0.5
SEPARATION_DISTANCE = 0.05
ALIGNMENT_DISTANCE = 0.1

結合;周りの選手との重心を設定
分離;となりの選手との距離感を設定
整列;他の選手との向きの類似性を設定
誘引力;ボールとの距離感を設定

といった感じです。

では、私が監督気分になって、選手たちに指示を与えてみたいと思います。
まずは、サッカーでありがちな指示である「選手間で近づき過ぎるな!」をやってみましょう。

パラメータを以下のように変更しました。分離力をより遠い距離から働くようにしました。

#近づきすぎるな
SEPARATION_DISTANCE = 0.01


すると、動きはこのように変化します。

空間に選手たちが偏在し、ボールをすぐに拾ってドリブルを始める様が見られるかと思います。


次に、「ボールを見るな前を意識してプレーしろ!」をやってみましょう。
パラメータを以下のように変更しました。整列・結合しない、分離力を弱くすることで前への意識を表現してみました。

#ボールを見るなスペースを意識しろ
COHESION_FORCE = 0.00001
ALIGNMENT_FORCE = 0.000003
SEPARATION_FORCE = 0.2
SEPARATION_DISTANCE = 0.09


すると、動きはこのようになりました。

先ほど以上にピッチ全体を広く使えている感じがありますね。

この2つの例から、1人1人に指示を与えるのではなく、チーム全体として大まかなルールを定めることで、動きが大きく変わったことが分かると思います。
初期パラメータはサッカーでいうプレー原則のようなもの。1人1人に指示をしなくても、チーム全体に方向性を生み出すことができます。
監督としてプレー原則を設定することの重要性や興味深さが、ボイドモデルから伝わってきます。


5.コードを公開します

本記事はいかがだったでしょうか?
サッカーが複雑系なら、複雑系からサッカーを再現できる。楽しみながら実装することができました。
プレー原則の理解にも役立つ記事になったと思います。

本記事のプログラムのコードは以下のリンクからダウンロードいただけます。

https://drive.google.com/drive/folders/1DSihjG1SonyTXlHP-nc7ly5MbqZZFDo-?usp=sharing


ぜひプレー原則の部分のパラメータを調節して、監督気分を味わっていただければと思います。

※最新のMacのOSが新しすぎると動かない場合があります。ご留意ください。
※ダウンロードする際はすべてのフォルダをダウンロードしてください。

参考文献
作って動かすALife――実装を通した人工生命モデル理論入門(オライリー・ジャパン)

面白いと感じていただけたらスキや投げ銭、RTやいいねをよろしくお願いいたします。
もし、私に興味をもってくれた方は、以下のサイトに詳しいプロフィールをまとめています。
https://sites.google.com/view/nowism/%E3%83%9B%E3%83%BC%E3%83%A0

ここから先は

0字

¥ 100

よろしければサポートお願いします!サポート代はさらなるスポーツ分析をするための学習代・機材代に利用します。