LoginSignup
2
1

More than 3 years have passed since last update.

[ゲームAI] バスケのセットオフェンスについて考察

Last updated at Posted at 2020-02-11

[1] 概要

バスケットのセットオフェンスの実装について記載します。

複数の選手の連携と、簡単なプランニングを導入しています。

なお記載してある内容はあくまで考察です。
未実装ですがご了承ください。

○前回の内容について
https://qiita.com/jukasahara/items/3a833eb62a62adfd34b6
↑こちらは前回の書いた内容です。今回の内容はこれの続きです。


[2] 現実のバスケットのセットオフェンスの紹介

・ピックアンドロール
https://www.youtube.com/watch?v=Dsi0CI71YYU

・ピックアンドポップ
https://www.youtube.com/watch?v=mzVGd9VumdM
https://www.youtube.com/watch?v=wWkkB3-zajM

・ハンドオフ
https://www.youtube.com/watch?v=mbkrJbMQtoI
近くで手渡し

・UCLAカット
https://www.youtube.com/watch?v=UsDGQFuB3Gc
https://www.youtube.com/watch?v=qdJvaxxfuYY

・フレックスオフェンス
https://www.youtube.com/watch?v=GHWmbxsHH7U
※セットオフェンスのループ

・スタッガードスクリーン
https://www.youtube.com/watch?v=sl_KHa1dSY0
スクリーン2枚

・ホーンズ
http://nbanotdankudake.com/?p=1001

・スペインピックアンドロール
https://www.youtube.com/watch?v=LtpBP_JdlsU

・千葉ジェッツVS福岡第一高校の試合
https://youtu.be/svY58Se7Q8E?t=342

・オーストラリア代表
https://www.youtube.com/watch?v=o07N8J0g1TA#action=share
ピックプレイとハンドオフを駆使したスムーズな連携

・アイソレーション
https://laneup.jp/skill/2748/

・いろいろ解説つき
https://www.youtube.com/watch?v=KQsLrQQ7egM

○セットオフェンスについて
スクリーンを用いて相手ディフェンスのマークを一時的に外すことができます。
このマークが外れた短い時間にシュートを狙ったりします。
また、連携を連続して行うことでより安全で確率の高いシュートを狙えるようになります。
それぞれの連携には対の選択肢が用意されており、相手ディフェンスからすると、とても守りづらいです。


[3] どうやってセットオフェンスを実現するか?

今回記述する内容の全体イメージ
全体イメージ01.png
実装の全体イメージはこんな感じです。
今回は抽象的なプランの導入と、セットオフェンスの対の行動について主に記載します。


[3-1] 抽象的なプランの導入

全体イメージ03.png


[3-1-1] まず初めに連携の構成についてざっくり紹介

○1.上の動画のUCLAカットの構成について
3_1_1_プラン説明05.png
1:a→bにパス
2:c→aにスクリーン、aはゴール下に移動
3:b→cにパス
4:a→eにスクリーン、eはゴール下に移動
5:c→eにパス
の順でアクションを実行します。
シュートのタイミングはどのタイミングでも構いません。シュートを打つのに適した状態なら打つようにします。



○2.ピックアンドロールの構成について
3_1_1_ピックアンドロール02.png
スクリーンプレイも、2人の選手による連携で成り立っています。


[3-1-2] 抽象的なプランとしてまとめたい

試合中にリアルタイムで連携(プラン)を構築したいのですが、
あまりにも詳細に考えてしまうとパターン数が膨大になってしまい、まとまらないです。
(誰にパスをするか?どこにパスをするか? スクリーンをかける選手や方向など、かける人数分)

そこで、アクションを簡略化して連携を構築するようにします。(→これを抽象的なプランとします)

例、
[Aにパス]→[BがCにスクリーン]→[Cにパス]→[DがEにスクリーン]→[Eにパス]→…
こんな風にまとめたいです。
上記のUCLAカットの例が近いです。


[3-1-3] アクションの簡略化とプランニングについて

簡略化したアクションについて列挙してみます。

(ボール所持者のアクション)
・パス×4人
・スペースへのパス×4人

(オフボール選手のアクション)
・ハンドオフの受け取り×1人
・スクリーン、4人×(スクリーン方向1~3パターン)

まずこのように絞ります。
これらのアクションでプランニングして、抽象的なプランを作成します。
スペースへのパス、ハンドオフ、スクリーンのアクションは、実行すると選手の位置が移動するようにします。

移動例1、プランニング中のスペースへのパス
3_1_1_プラン説明01.png

移動例2、プランニング中のスクリーンプレイ
3_1_1_プラン説明02.png


[3-1-4] ゲーム木の展開

上記のアクションを実行したあとの、選手配置とボールの位置を1つの局面として考えます。
それぞれの局面で同様にアクションを実行していくと、ゲーム木の探索のように考えられます。

3_1_1_プラン説明03.png
(将棋っぽい!)

あとは1つ1つの局面の評価値を計算して、ルートを決定します。
なお、プランの実行アクションの中にシュートの選択肢がありませんが、シュートは後の方で記述するプランの対の選択肢やプラン外の動きのときに実行します。
セットオフェンスの中には最後のシュートまで設定されているものもありますが、ここではそれは考えないで、あくまでシュートチャンスを多く作ることに専念しようと思います。


[3-1-5] 局面の評価関数について

上記の局面の評価関数の計算について記述します。
シュート成功率が高くなりそうな要素ほど評価が高くなるようにします。
戦術や試合中の状況も考慮します。

○シュート評価(ボールを所持している選手の評価)
・シュート位置(3P、2P、ゴールまでの距離)
・シューターが誰か(得点能力の高い選手ほど評価アップ)
・スクリーンプレイでマークを外してもらった選手かどうか(スクリーンプレイ直後はフリーになるとする)
・プランニングスタート時点でのフリー状態(探索深さ1の状態のみ。深さ2以降は相手DFの動き方がどうなるかわからないので考慮しない)
・パスを立ち止まってもらうか、走りながらもらうか

○ポジション評価(全体の立ち位置評価)
・シュートポジションにいる(ゴール下と3P)
・ボール所持者からのパスコースを確保している
・スクリーンを実行できる選手が近くにいるか
・オフェンスリバウンド、カウンターへの守備への対応(必要に応じて考慮する)
・ローテーション、相手へのまどわし効果

○その他評価
・チーム戦術
・試合中の状況(時間、ボール所持者の状況)
・相手の対応(ディフェンスの仕方、試合中のセットオフェンスの実行結果情報)

などなど。

局面の評価値は、
局面の評価値 = (シュート評価重み1 + ポジション評価重み2)/(重み1 + 重み2)
で求めます。
重み1と重み2は上の「その他評価」の部分で臨機応変に変更します。

また、局面の深さで評価値に補正をかけてもいいと思います
3_1_2_評価値の計算01.png


[3-1-6] プランルート(実行経路)の決定について補足

プランニングの目的を「有効なシュートチャンスを多く作る」ことにしています。
なのでプランルートも、一番評価のいいところを探すのではなく、ルートを通して評価の高いところを探すようにします。

例、深さ3までで一番評価値の合計が高いルート
3_1_2_評価値の計算02.png


[3-1-7] 実行アクションについて補足

○1.スペースへのパスとスクリーンの設定場所について
実行場所は前回使用した13か所の位置でまず考えます。
3_1_4_アクションについて補足00.png
これぐらいに絞ると考えやすいです。
そのあとに、この丸の中から詳細の位置を決定します。



○2.実行アクションをもっと減らしたい場合
上の例では1局面あたり17ぐらいの実行アクションがありました。
(パス×4+スペースへのパス×4+ハンドオフ+残りスクリーン8)
17個の選択肢はまだまだ多いです。
そこで実行アクション減らす条件について考えてみます。

・スペースへのパスを受け取る選手はプランリング中1回のみにする
・プランニング実行の選手を限定する(2人~5人)
・チェックする局面の深さを減らす、制限をかける
・スクリーンで移動する距離が遠い場合は除外する
・マークしている相手ディフェンスの距離が遠い場合、その選手へのスクリーンは考えない
・プラン内で同じ選手に2回以上行動させない
・連携を行う最初の1人は一番近い選手に固定する
・最初に連携の順番を決めて、そのあとに行動を決定する
などなど。
チーム戦術や、試合中の状況(残りシュートまでの時間、ボール所持者の状況)なども考慮して実行アクションを絞っていくといいと思います。

(細かく書いておいてなんですが、ここと評価関数の計算のところはそこまで厳密に計算する必要もないと思います…)


[3-2] スクリーンプレイから派生するアクションについて

全体イメージ04.png
スクリーンプレイから派生するアクション(プランの対の行動)について記述します。

※↓スクリーンプレイ詳細
3_2_1_スクリーンについて10.png
まずスクリーンプレイ中に発生するアクションを以下の2つに分けます。
・プランを遂行する動き
・プランの対となる動き

プランを遂行する動きは、上記の抽象的なプランを遂行するための動きです。

プランの対となる動きは、プランを遂行するスクリーンプレイがうまくいかないときなど実行する選択肢のことです。
相手ディフェンスの対応や、選手のポジショニングを考慮して切り替えます。

※イメージ
3_2_1_スクリーンについて13.png



○具体例について
・基本のスクリーンプレイ
・ハンドオフプレイ
・ボール所持者以外のスクリーンプレイ
の3パターンのスクリーンプレイから、
プランを遂行する動きと、プランの対となる動きについて具体的に列挙してみます。


[3-2-1] 基本のスクリーンプレイについて

○スクリーン前
3_2_1_スクリーンについて00.png
(ボール所持者)
①:スクリーンが設定されるまで待機
②:後ろへ下がる
③:スクリーナーへパス

(スクリーナー)
④:スクリーンを設定する
⑤:スクリーンを設定すると見せかけてゴール方向へ移動(スリップイン)

※選択肢に番号をつけましたが、順番で実行するという意味ではないです。選択肢を列挙しているだけです。

○スクリーン後
3_2_1_スクリーンについて01.png
(ボール所持者)
⑥:そのままドリブル
⑦:後ろへ下がる
⑧:そのままドリブルと見せかけて逆方向へ

(スクリーナー)
⑨:ピックアンドロール
⑩:ピックアンドポップ

などが考えられます。(もちろんこれが全てではありません)
基本的な選択肢から、相手ディフェンスを欺くような選択肢もあります。

細かく考えるとわかりづらいので、いくつかの行動でまとめて考えます。

以下の4パターンで考えてみます。
・プランを遂行する動き
・移動_前へ(ゴール方向)
・移動_後ろへ(ゴールから遠ざかる)
・移動_待機orバランスをとる

上記の①~⑩に当てはめると…

(スクリーン前:ボール所持者)
①:スクリーンが設定されるまで待機(→移動_待機)
②:後ろへ下がる(→移動_後ろへ)
③:スクリーナーへパス(※保留)

(スクリーン前:スクリーナー)
④:スクリーンを設定する(→プランを遂行する動き)
⑤:スクリーンを設定すると見せかけてゴール方向へ移動(→移動_前へ)

(スクリーン後:ボール所持者)
⑥:そのままドリブル(→プランを遂行する動き)
⑦:後ろへ下がる(→移動_後ろへ)
⑧:そのままドリブルと見せかけて逆方向へ(※保留)

(スクリーン後:スクリーナー)
⑨:ピックアンドロール(→移動_前へ)
⑩:ピックアンドポップ(→移動_後ろへ)

のようになります。
タイミング(スクリーン前or後)と4つの移動方法の組み合わせで、ほぼほぼ言い換えることができます。
保留の③と⑧は、後ほど記述するプラン外の動きのところで実行するようにします。

また、サンプルの図はコート中央でのスクリーンプレイですが、サイドライン付近でも同様に考えることができます。
3_2_1_スクリーンについて02.png
(スクリーン前)
①:プラン遂行の動き
②:移動_後ろへ(このあと3P狙える)
③:プラン遂行の動き(スクリーンをセット)
④:移動_前へ
などなど。

なおゴール下付近ではヘルプディフェンス(マーク選手以外のディフェンス)をされやすいので、スクリーンプレイはあまり実行されません。


[3-2-2] ハンドオフプレイについて

3_2_1_スクリーンについて04.png
ボール所持者のすぐ近くまで移動してボールを手渡しするプレイです。
ボールを受け取る場所を相手ディフェンスに見られないようにするため、相手ディフェンスの対応が一瞬遅れます。
それを利用して、
ボールを渡す、ボールを渡さないでドリブル、ボールを受け取らないでゴール方向へ走りこむ
などのパターンが実行可能になります。

○ボールを渡す前
(ボールを渡す前:オフボール選手)
①:ボールを受け取る(→プランを遂行する動き)
②:ボールを受け取らず前へ(→移動_前へ)

(ボールを渡す前:ボール所持選手)
③:ボールを渡す(→プランを遂行する動き)
④:ボールを渡さず前へドリブル(→移動_前へ)

○ボールを渡したあと
3_2_1_スクリーンについて05.png

ボールを渡したあと、すぐに上記のスクリーンプレイのスクリーンへ移行したと仮定します。

(ボールを渡した後:オフボール選手)
⑤:スクリーンが設定されるまで待機(近くにいるのですぐにOKになる)(→プランを遂行する動き)
⑥:後ろへ(スクリーナーが近くにいるので守ってくれる)(→移動_後ろ)
⑦:前へ(→移動_前へ)

(ボールを渡した後:ボール所持選手)
⑧:スクリーンを設定する(→プランを遂行する動き)
⑨:スクリーンを設定するとみせかけて前へ(→移動_前へ)

やってることは上記の2人のスクリーンプレイと同じです。
スクリーン後の動きは省略します。


[3-2-3] ボール所持者以外のスクリーンプレイについて

オフボール選手の2人がスクリーンプレイを実行するパターンについてです。
スクリーンを利用してフリーになった選手にパスを送ることを想定しています。

○スクリーン前
3_2_1_スクリーンについて07.png

(オフスクリーン選手A)
①:スクリーンが設定されるまで待機(→プランを遂行する動き)
②:後ろへ(→移動_後ろへ)
③:スクリーンを利用すると見せかけてゴール方向へ(リジェクト)(→移動_前へ)

(オフスクリーン選手B)
④:スクリーンを設定する(→プランを遂行する動き)
⑤:スクリーンを設定すると見せかけて前へ(スリップイン)(→移動_前へ)

(ボール所持選手C)
⑥:その場待機(→プランを遂行する動き)
⑦:その他行動(※プラン外の動き)

○スクリーン後
3_2_1_スクリーンについて09.png

(オフスクリーン選手A)
⑧:前へ(→プランを遂行する動き)
⑨:後ろへ(→移動_後ろへ)

(オフスクリーン選手B)
⑩:ピック&ロール(→移動_前へ)
⑪:ピック&ポップ(→移動_後ろへ)

(ボール所持選手C)
⑫:パス(→プランを遂行する動き)
⑬:その他行動(※プラン外の動き)

基本的に2人のスクリーンプレイと変わらないです。


[3-2-4] まとめ

長々と書きましたが要は、

スクリーンプレイをする選手のパターンは以下の4つで、
・プランを遂行する動き
・移動_前へ(ゴール方向)
・移動_後ろへ(ゴールから遠ざかる)
・移動_待機orバランスをとる

実行タイミングが以下の3パターンです。
・ハンドオフ
・スクリーン前
・スクリーン後

イメージ
3_2_1_スクリーンについて11.png
この行動パターン×実行タイミングをチェックすることでプランの対の行動のほとんどを網羅することができます。
余分なチェックもありそうですが、状況によっては実行する可能性もあるのでチェックするようにします。

このようにプランの対の行動をきちんと作成することで、抽象的に作成していたプランを補強する形になります。
全体として強固なプランになっていきます。
3_2_1_スクリーンについて14.png


[3-3] 意思決定について

全体イメージ02.png
プランの反映方法と、意思決定について記述します。


[3-3-1] 前準備

まず以下の3つのパラメータを用意します
・1.進捗率
・2.状況評価
・3.プラン達成期待値



○1.進捗率について
プラン中の1アクションごとに進捗率を計測します。
スクリーンプレイはスクリーン前と後に分けます。


3_3_1_前準備00.png



○2.状況評価について
・ボール所持者の状況(余裕ある~余裕ない)
・プラン遂行のポジショニング(間に合いそうにない場合は評価低い)
などで算出します。



○3.プラン達成期待値について
上記の進捗率と状況評価によって、プランの達成期待値を算出します。

進捗 状況評価 プラン達成期待値
0% 低い 70
0% 高い 90
100% 低い
100% 高い 100

進捗が進んでいない場合は、状況評価の影響が少ないようにします。(最初の方は挽回できるから)
進捗が進んでいるときは、状況評価の影響が大きいようにします。
間の値は補完します。


[3-3-2] 前準備その2、一部行動について

前回記述した内容の修正です。

○ドリブルやオフボールの移動について
・大まかに決める→詳細を決めるというやり方へ変更
3_3_2_前準備00.png



○スペースへの移動について
・移動箇所を上記の13か所へ
・予約制にする、先に予約したら味方選手同士でかぶらないようにしておく
・予約したら自分の位置が空きます。
3_3_2_前準備01.png


[3-3-3] 意思決定について

○1.動きのおさらい(ボール所持者)

○プランを遂行する動き
・パス
・スクリーン利用
など

○プランの対となる動き、その他
・移動_前(ゴール方向へ)
・移動_後ろ(ゴールから遠ざかる)
・移動_その場周辺、バランス

○それ以外の動き
・パス×4人
・シュート
・移動



○2.選択方法について
選択方法はそれぞれの選択肢に評価値をつけて、一番評価値の高い行動を選択します。
評価値の設定は、
・プランを遂行する動きは「プラン達成期待値」
・それ以外は前回の「コート評価」
で設定します。

項目 評価値の計算方法
プラン プラン達成期待値+個人の判断
プランの対の行動 コート評価(ややプラス補正する?)
それ以外 コート評価

3_3_3_選手の意思決定00.png

※行動と評価値の具体例
・プラン(500) //プラン達成評価
・シュート(700) //コート評価
・パス(300) //コート評価
・ドリブル(200) //コート評価
など。この場合はシュートを選択します。

※補足
・プラン達成期待値と、コート評価は計算経路が全く違うので調整の際は注意が必要です。

・評価値計算方法の「個人の判断」について
プラン達成期待値が高くても、対の選択肢を実行したい場合のために用意しました。
駆け引き、フェイント、選手の気分などの要素も考慮したいです。

・プラン導入目的のおさらい
プランの目的は「有効なシュートチャンスを多く作る」でした。
なので、無理をしてまでプランの継続はしません。
有効なシュートが打てそうなときや、他の選択肢の方が良さそうならすぐにに切り替えるようにします。


[3-3-4] オフボール選手の意思決定について

○1.動きのおさらい(オフボール選手)

○プランを遂行する動きについて
・スクリーナー
・スクリーンを利用する移動
・スペースへ移動

○プランの対の行動について
・移動_前
・移動_後ろ
・移動_その場orバランス

○それ以外の行動について(前回記述した内容)
・基本立ち位置にいる、シュートポジションにいる(特に3P)
・スペースの位置へ移動する
・味方のサポート、パスルートの確保
・ポジションチェンジの移動



○2.選択方法について

まず、プランに組み込まれている選手と、そうでない選手で処理を分けます。

上記のUCLAカットの例
3_3_4_オフボール選手の意思決定01.png



○3.プランに組み込まれている選手(プラン遂行の動きと、プランの対の動き)
3_3_4_オフボール選手の意思決定02.png
プランに組み込まれている選手は、
・プラン遂行の動き
・プランの対の動き
のどちらかを選択します。
意思決定の際に使用する情報はプラン達成評価とコート評価です。
ボール所持者と同様、高い評価値の行動を選択します。

項目 評価値の計算方法
プラン遂行の動き プラン達成期待値+個人の判断
プランの対の動き コート評価

※補足
・評価値計算方法の「個人の判断」について、こちらも相手との駆け引き、フェイントなどを考慮するために用意しました。



○4.プランに組み込まれていない選手(それ以外の動き)

3_3_4_オフボール選手の意思決定03.png

ここは前回設定した動きです

○それ以外の行動(プランに関係のない動き。前回記述した内容です)
・基本立ち位置にいる、シュートポジションにいる(特に3P)
・スペースの位置へ移動する
・味方のサポート、パスルートの確保
・ポジションチェンジの移動

プランのバランスをとるような動きにしたいです。
追加で、オフボール選手同士のスクリーンなども入れられるようにしたい。


[3-3-5] リプランニング、プランの並列発生について

リプライニングについて、以下の3つの要素を満たすようにしたいです。
・①プランの対の行動後など、ある一定時間停滞する場合にプランニングを再実行する
・②前のプランの戻ってこれるようにする(前のプランは破棄しない)
・③プランと関係ない選手同士のスクリーンプレイ
3_3_4_オフボール選手の意思決定04.png

※補足
・①:プランニングはゴール下付近では実行しないようにします。ゴール下付近は咄嗟の判断に任せます。
・②:スクリーンが設定される時間を待っているときにボール所持者がディフェンスにあう場合など、一時的に他の安全な選手にパスをできるようにしたいです。
・③:プランに関与していないオフボール選手(2人以上)のスクリーンプレイも実行するようにしたいので、プランが並列で実行されるようにしたいです。


[3-3-6] 自動調整機能を入れる

プランとその実行結果を1つのオフェンスデータとして集計します。
・得点の成功情報
・どのプランを実行したか
・どの選手を利用したか
などの情報が集まります。

このデータを元に、
・使っていないプランの選択肢を実行しやすくする
・使っていない選手を経由しやすくする
などの調整を加えます。

自動調整の価値基準としては、
・相手ディフェンスの意表を突くプレイ(相手ディフェンスを驚かす→ユーザーも驚く)
・ユーザーの戦略、戦術の反映
を重視するといいと思います。

得点率の高い選択肢を繰り返してもいいですが、見ていてつまらなくなる場合は避けるべきです。
同じ行動を繰り返すと相手ディフェンスが対応するといった処理が入ってると自然に行動がばらけます。
(※ディフェンスの仕方も要検討)


[4] 発展メモ

○セットオフェンスの最適化

千葉ジェッツVS福岡第一高校の試合
https://youtu.be/svY58Se7Q8E?t=342

4_発展メモ00.png
図にすると↑のようになります。
注意点としては、dの選手は局面4のときにaの選手にスクリーンを設定するのですが、局面1~3のときにすでにするするっと移動しています。(おそらくセットオフェンスの練習が染みついているのでしょう)
こちらの方が見た目的に自然なので実現できるようにしたいです。(プラン中、自分の出番前でも移動する処理を入れる)



○セットオフェンスをスタートする陣形に至る動き(エントリーと言います)

https://five-spirits.com/flex-offense/#i-7
↑こちらにフレックスオフェンスをスタートさせるための手順(エントリー)が詳しく記述されています。
セットオフェンスは得点率の高い連携なので、プランニング実行前のポジショニングで考慮してもいいと思います。



○ダブルスクリーンについて

https://www.youtube.com/watch?v=vYHbi4fQCeA
スクリーン2枚のプレイです。
それぞれスクリーン選手の対の行動もあります。


[5] まとめ

主に、
・抽象的なプランの導入
・プランの対の行動をしっかりと作る
・反射型の意思決定との兼ね合い
について記述しました。

相手ディフェンスがゾーンディフェンスだった場合や、
カットの動き(ボールをもらう動きやスペースへ走りこむ動き)などを考慮していませんが、それなりのチームの動きになると思います。

ディフェンスの方もセットオフェンスに対応するような動きを入れて行きたいですが、なんでもかんでも自動で対応してしまうとユーザーの介入効果が少なくなるジレンマがあります…。


3P重視の作戦でみんなアウトサイドに集中させる
→相手ディフェンスはマンツーマンディフェンスで対応する
→ゴール下付近にスペースが空くので味方選手の誰かがそこに走りこむ
→3P重視の作戦と相反する行動
などなど。

このあたりの対策と、あとバスケを詳しくない人に連携などをどう理解してもらえるか模索中です。



以上です。

2
1
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
2
1