見出し画像

組合せ最適化問題を解いてフットサル大会を主催してみた

#トビタテ #留学 #フットサル #トビタテカップ #組合せ最適化 #最適化問題 #Python #GoogleColaboratory #イベント #企画

トビタテ!留学JAPANというコミュニティのメンバーを中心に、「第1回トビタテ!カップ」と称して、数十人規模のフットサル大会を開催しました。
ただ集まって、みんなでフットサルするだけだと満足感薄くないか?と思い、出来るだけちゃんと企画して、全力で楽しめる時間にしたいと思い、そのために工夫したことなどのレポートです。
特に、チーム分けとルールについて拘ったので、それについてまとめます。

本題に入る前に、今回開催したイベントの予告動画もあるのでよかったらご覧ください。

1. イベントの概要と課題


今回のイベントは、トビタテ!留学JAPAN(以下「トビタテ」)という文部科学省が「意欲と能力ある全ての日本の若者が、海外留学に自ら一歩を踏み出す機運を醸成することを目的」として開始した、民間企業等の寄付金によって運営される学生や高校生が海外留学するための奨学金プログラムにおける採択者同士のコミュニティを活性化する目的で開催しました。

2023年3月中旬の休日に、30数名が参加する形で開催されました。
場所は、すみだフットサルアリーナというフットサルのプロリーグであるFリーグで活動するフーガドールすみだが練習場にもしている良い施設です。

ちなみに今回はありがたいことに初開催にも関わらず、参加応募が非常に多くなり、結果的にイベント2,3週間前に参加募集を打ち切るぐらいの盛況となりました。その後個別にご連絡をいただいたものの、参加をお断りすることとなってしまった方々については申し訳なかったです。

さて、今回の参加者は30数名でしたが、留学先や留学時期(採用時期)は様々で、かつサッカーやフットサルの経験は豊富な人から、趣味程度の人、完全な初心者までバラバラでした。
つまり、年齢や学年も異なるお互いを知らない人が多く競技のスキルや体力もばらつきが大きいということです。

この状況下で、出来るだけ皆が全力でプレーして楽しいと感じられる時間をどうやって作るかが今回の課題でした。

2. 工夫したこと


今回、「皆が全力でプレーして楽しいと感じられる時間をどうやって作るか」という課題をクリアする企画として、下記の3点を意識してみました。

  • 知らない人も多い中で上手く溶け込み自分を出せる時間にする

  • 経験者も全力でプレーできる

  • 初心者や未経験者も出場し、ボールに触れる楽しさを味わってもらう

1つ目を達成するために、参加者それぞれが自分の知り合いの輪を広げるためのイベントの流れを工夫し、2つ目を達成するために、拮抗した試合が多くなるためのチーム決めを工夫し、3つ目を達成するために、フットサルという競技を壊さない中でのルール設定や試合以外の時間を工夫しました。

それぞれを満たすために、具体的には下記の取組みを実施しました。

  • 序盤にウォーミングアップを兼ねたミニゲームを導入し、誰もがボールに触る機会を設けた

  • 女性のゴールは倍等、ゲームバランスを崩すような仕組みではなく、フットサルという競技を維持した中での独自のルール設定を行なった

  • トビタテの採択期別のチーム分けとサッカー/フットサルの経験度合いに応じたチーム分けの2部制にした

それぞれについて、下記に詳細に紹介します。

2-1. ミニゲームの導入

所謂“個サル”と呼ばれる個人参加のフットサル1Day大会では、その場にいる参加者でチームを複数個作り、試合ばかりを行うということがよくあると思います。そのような個人参加型の大会だと経験者ばかりがボールに触れることになり、初心者や未経験者のボールタッチ数が少なくなる傾向にある・コミュニケーションを取る機会があまりない、といった問題があり、交流も大事な目的である今回の会合では良くないと感じていました。

そこで、ボールタッチ数とコミュニケーションのきっかけを少しでも増やすための工夫として導入したのがこのミニゲームです。

このミニゲームは、チーム対抗の全員参加型のものです。
具体的には、下記の図のように、

  1. 野球のベースのように配置されたコーンの1塁と3塁あたりに2つのチームがそれぞれ並ぶ

  2. それぞれのチームから1人ずつが、ベースを反時計回りにボールをドリブルしながら回る

  3. 1塁側スタートのチームは本塁、3塁側スタートのチームは2塁に到達したら、次のチームメイトにパスを出す

  4. パスを受けたチームメイトは、2.→3.と繰り返す

  5. チームの最後のメンバー(アンカー)は1周して、中央の的にボールを当てれば終了

  6. 先に終了したチームの勝利

という流れのゲームです。

フットサル式ベーランリレー対決

このゲームのポイントは以下の3点です。

  • 全員がボールに触れる

  • しかもフットサルの重要な要素である、トラップ→ドリブル→パスの3要素が含まれている

  • 順番を決めるためにチーム内でコミュニケーションが必要となる

また、今回、このミニゲームの結果を勝ち点としてリーグ戦にも組み込むことで、勝つためのインセンティブの向上も狙いました。

2-2. 独自のルール設定

独自のルールを始めとして工夫した競技のルール設定についてです。
よく草フットサル大会等で存在するルールに女性の得点は倍などがありますが、今回はそのようなルールを一切設けませんでした

何故なら、女性の得点が倍になるというルールがあると、必然的に前線に女性を置くチームが生まれるものの、DFにいるのは経験者の男性のことが多く、その女性にボールがパスが入りづらい・入ったとしても奪われる、変に前線にいることを意識するためトランジションが起きづらくなり、攻撃陣と守備陣で間伸びが起き、結果的に点も入りづらくなる、といった理由です。

また、同様に個人参加型フットサル大会などで人数が多くなったときに起こる6人対6人というやり方も一切しませんでした。

フットサルは40m×20m(今回の会場は35m×19m)なので、サッカー(国際ルールでは105m×68m)の1/9以下のスペースに10人もいます。つまり、フットサルはサッカーに比べて1人あたりのスペースは1/4以下しかありません。
これを6人対6人の12人にすると個々人が動けるスペースが更に減ってしまうため、ボールを持った時のプレッシャーも更に受けやすくなり、結果的に、空気を読んだ経験者がプレスを緩める初心者や未経験者はほぼボールに触れないorすぐボールロストする(つまりプレーの難易度が上がる)、といった弊害を招くことから、人数はゴレイロ込みでフットサル本来の5対5を維持しました。

他方で、フットサルならではの複雑さを回避すべく、バックパスルール・4秒ルール・ファウルカウントは撤廃しました。

また、今回のチーム分けは当日の欠席や参加者それぞれの体力差も考慮し、どのチームも5人より多くなるようにチーム分けを行ったのですが、1分毎に1人以上の選手交代が必須、というルールにしました。

これにより一部の参加者が出場し続けることを回避し、各チームの初心者や経験者の出場を促すようにしました。
また、交代が必須になることから、お互いの名前を呼ぶ必要も出てきて、コミュニケーションが生まれたようにも思いました。

その他、危険性を減らすための「対人スライディング禁止」など、まとめるとこんな感じです。

第1回トビタテ!カップにおけるフットサルの試合のルール


2-3. チーム分けの方法

今回最も工夫した点です。
これまでの個人的な経験で、こういった個人参加のフットサル会だと、行き当たりばったりのチーム分けでは、チーム毎のパワーバランスに偏りが生まれ、拮抗した試合にならず、楽しさが半減するという恐れがありました。

今回は、前述したように2部制として、第1部と第2部で下記の通り違うチーム分けにしました。

  • 第1部:トビタテ採用期別のチーム分け

  • 第2部:経験値を均衡にするチーム分け

トビタテの活動は2013年から始まっており、本イベント開催時点までに大学生・大学院生等だけでも14期までの採用がされていました。

トビタテの特色として、採用されると留学の事前と事後に採用者同士で集まる研修が行われます。そのため、近くの期同士であれば比較的知り合いも多くいます。
そこで、今回、久々にトビタテ関係のイベントに参加する人も多くいたことから、第1部では採用期別にチームを分けることで、同窓会的な雰囲気が出るようにしてみました。
(あと、トビタテのイベントの多くでは参加募集時に採用期を問われるのに、実際のイベントでは特段活用されることが少ない、ということもあって、活用してみました。)

また幸いにして、採用期別で分けても、近い期同士で上手く組み合わせれば、サッカー/フットサルの経験者がどのチームにも一定数いたことから、この分け方でミニゲームとリーグ戦(4チーム総当たり)を実施できました。

結果的に、ミニゲームで勝ち点も含めれば1位以外の3チームが勝ち点で並ぶ、という拮抗した結果となり、交流とゲーム性の両方を向上できたように思います。

ちなみに他の案としては、留学先の地域別でチームを分けるといった案もありました。

第2部では、参加者のサッカー/フットサルの経験を数値化し、それぞれのチームの力量が拮抗し、かつ第1部のチームとはできるだけ被らない(つまり採用期がバラバラな)チーム分けを実施しました。

具体的には、以下の4点を意識したチーム分けを行いました。

  1. 各チーム内の経験値の合計

  2. 各チーム内の経験値の平均

  3. 各チーム内の経験値の標準偏差

  4. 各チームの参加者が第1部でのチーム分けと出来るだけ被らない

1.と2.を分けたのは、各チームの人数が異なる(7人または8人)ため、合計で同じだと、平均(各個人の経験値)で見ると大きな差が生まれるため、合計と平均の両方を考慮することにしました。

3.は経験者の中にも、大学や高校までやっている人や小中学校時代だけの人、社会人になってから趣味でだけやっている人など、様々なパターンの方々がいるため、各チームに未経験者や初心者や、経験者でも経歴が短い人から長い人まで満遍なく配属されるように意識しました。(経験値の合計や平均が同じでも、あるチームに様々な経験値を持つ参加者が満遍なく配属されるとそのチーム内の標準偏差が小さくなりますが、偏りが大きいと標準偏差は大きくなります。)

4.は交流の観点で、第1部とは出来るだけチームが被らないようなチーム分けを志向しました。

これらを実現する手法として、組合せ最適化問題を定式化し、それ
を解くことでチーム分けを実行
しました。
具体的には、下記の通りの最適化問題を定式化しました。

$$
\begin{align*}
\underset{\mathbf{x}\in \mathbb{R} ^{n \times m}}{\min} &\left[ \sum_j \left[ w_1 \left| \sum_i r_i x_{ij} - \mu_{1} \right|+w_2 \left| \dfrac{\sum_i r_i x_{ij}}{\sum_i x_{ij}} - \mu_{2} \right|+w_3 \left| \sqrt{ \dfrac{1}{\sum_k x_{kj}} \sum_i \left( r_i x_{ij}- \dfrac{\sum_k  r_k x_{kj}} {\sum_k x_{kj}} \right)^2 } - \sigma \right|+w_4 \sum_i \iota_{\,\,i}
\right] \right] \\
\mathrm{s.t.} \; &lb \leq \sum_i x_{ij} \leq ub, \forall j \\
&\sum_i s_{\,i} x_{ij} \geq 1 \\
&\sum_j x_{ij} = 1 , \forall i \\
&x_{ij} \in \{0, 1\}
\end{align*}
$$

ここで、それぞれの記号は下記の通りです。

$$
\begin{align*}
&n:選手の数 \\
&m:チームの数 \\
&i,k = {1, \dots, n } \in \mathbb{N} \\
&j = {1, \dots, m } \in \mathbb{N} \\
&r_i:選手iの経験値 \\
&\mu_{1} = \dfrac{1}{m} \sum_i r_i :1つのチームの経験値の合計の期待値 \\
&\mu_{2} = \dfrac{1}{n} \sum_i r_i :選手全体の経験値の平均 \\
&\sigma = \sqrt{\dfrac{1}{n}\sum_i ( r_i - \mu_{2})^2} :選手全体の経験値の標準偏差 \\
&w_1, w_2, w_3, w_4:それぞれ第1〜4項の重み \\
&ub:1つのチームの最大選手数 \\
&lb:1つのチームの最小選手数 \\
&x_{ij} = \begin{cases} 1,\quad {選手iがチームjに所属}\\ 0, \quad{otherwise} \end{cases} , \forall i,j \\
&s_{i} = \begin{cases} 1, \quad {選手iが女性}\\ 0, \quad {otherwise} \end{cases} , \forall i  \\
&\iota_{i} = \begin{cases} 2^{l}, \quad {l: 異なるチーム分けで選手iと同じチームにいる人数}\\ 0, \quad {otherwise} \end{cases} , \forall i
\end{align*}
$$

$${w_1\sim w_4}$$で重み付けされている項はそれぞれ下記を意味しています。

  • $${w_1}$$の項は、あるチーム内の経験値の合計と1つのチームの経験値の合計期待値の差

  • $${w_2}$$の項は、あるチーム内の経験値の平均と参加者全体の経験値の平均の差

  • $${w_3}$$の項は、あるチーム内の標準偏差と参加者全体の標準偏差の差

  • $${w_4}$$の項は、あるチーム内で第1部と同じチームの人数が多くなるに連れて増加する項

つまり,各チームの経験値の合計が均等になり,かつ各チーム内での経験値が平滑化され,更に各チーム内での標準偏差が参加者全体の標準偏差に近づき,また第1部のチーム分けとはできるだけ同じチームにならないような組合せ(チーム分け)$${\mathbf{x}}$$ を見つける最適化問題として定式化されています。

要すれば、どのチームにも高度な経験者から中級者、初心者、未経験者まで満遍なく、かつチーム間の戦力が均衡し、更に第1部のチームとは可能な限り被らないような構成となるチーム分けを求める問題です。

この組合せ最適化問題の定式化の詳細及び解法については、Qiitaで紹介しているので、こちらをご覧ください。

ちなみに、今回はGoogleフォームでの参加登録Googleスプレッドシートで参加者管理を行い、チーム分けの処理はGoogle Colaboratory上でPythonにより行いました。
Pythonのコードも紹介しているので、気になる方は実装してみてください。
また、この数学的なやり方で重要となる、各参加者の経験の数値化についてもQiitaの当該投稿で触れているので、もしよければご参考ください。

第2部はこのチーム分けを行った上で、リーグ戦(4チーム総当たり)とリーグ戦の順位を元にしたトーナメント(準決勝2試合、3位決定戦、決勝)を行いました。

3.開催してみて


いざ開催してみると、主催者目線ではありますが、大きな盛り上がりに繋がり、結構良かったように思います。

ミニゲームも序盤に入れたことで、各参加者だけでなく会場全体の雰囲気の盛り上がりにも繋がり、ルールもフットサルという競技のゲーム性を維持しながら誰もが参加できる形であったように感じました。

また、チーム分けを工夫したことで、僅差の拮抗した試合が多くなり、結果的に第2部は3位決定戦と決勝が共にPK戦になるなど、白熱した戦いが多く見られました

運営的な観点でも、チーム分けを数学的にコンピュータを使って行ったことで、当日の体調不良等での欠席にも素早く対応でき、弾性力のある運営になりました。

当日の様子をハイライトでまとめているので、よかったらご覧ください。

今回の企画を通して、イベント全体の効用を向上させることと、運営の弾力性を上げることの両方の観点で、こういったイベントの企画・運営に数学的な取組みを導入することは意義があるように感じられました。

参考


以下に本イベントに関連する参考リンク等を掲示します。


著作権等について


本記事に掲載されている文章や数式、図表について、著作権法及びnoteの利用規約を越える利活用については、本記事の投稿者までお問い合わせいただきますようお願いいたします。
基本的にURLの掲示等によって本記事を好意的にご紹介いただくことは歓迎です。

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