オッサンはDesktopが好き

自作PCや機械学習、自転車のことを脈絡無く書きます

AIに自転車レースで対戦させたら,お見合いとかしてきた

 こんにちは.changです. 今回は自転車レースでAI同士を対戦させながら学習させてみました.

0. 自転車レース

 前回*1スリップストリームを利用したゴールスプリントが,自転車レースで勝利をつかむ為の代表的な戦略であることを説明しました. 今回の記事を書くにあたり,いくつかキーワードを追加します.

逃げ

 レースの序盤から加速をしてライバルに差をつけ,そのまま追いつかれること無くゴールする戦略です. 博打色が強い戦略であることから,kamikazeと呼ばれたりします.

お見合い

 相手の出方を見ながら,スプリントを仕掛けるタイミングをゴール直前まで伺う戦略です. スプリントを先に仕掛けてしまうと,ライバルにスリップストリームに入られるリスクが高くなります. このリスクを相手に追わせようと駆け引きする頭脳戦になります.

1. プログラム

 主に,前回から変えたところを紹介します.

(1) フィールド

 基本的には前回と同じで,32×8の画像の上を上から下方向にレースさせます. 今回,コンペティターのエネルギー残量バーを追加しました.

f:id:changlikesdesktop:20210218050921p:plain:w400
field

(2) プレイヤー(マ○ュアン)

 前回と同じですが,ポイントになるところなので載せておきます.

f:id:changlikesdesktop:20210123064303p:plain:w400
プレイヤー.今回,こいつを(勝手に)マ○ュアンと呼びます.

  • アクションは4パターン
  • 1回のスプリントで,エネルギー1を消費する
  • エネルギーが0になると,スプリント(0)は前進(2)と同じ動きになる
  • 初期エネルギーは5
  • コンペティターの背後に入る動きを発生させる為,横方向の動きを大きくしている
  • ロングスプリントは苦手(=初期エネルギーが小さい)だが小回りが効く(横方向の動きが大きい),マ○ュアン型の特性

(3) コンペティター(ペ○ッキ)

 これも前回とほぼ同じです.違うのは,アクションを乱数ではなくQ値から決める点です.

f:id:changlikesdesktop:20210123064650p:plain:w400
コンペティター.ペ○ッキと呼びます.

  • アクションは4パターン
  • 1回のスプリントで,エネルギー1を消費する
  • エネルギーが0になると,スプリント(0)は前進(2)と同じ動きになる
  • 初期エネルギーは6
  • 重量級(=横方向の動きが小さい)でロングスプリントを得意とする(=初期エネルギーが大きい),ペ○ッキ型の特性

Note: 今回,プレイヤー,コンペティター共に,左右の壁に対する動きを変えました. 壁に張り付いて横に動かないことが多かった為です. 左右の壁をリング上につなげています. 壁に衝突するアクションを採った場合,反対側の壁にワープします. 壁に衝突した場合はストップするやり方も試したのですが,ゴールにたどり着くのに精一杯でレースをしなくなってしまったのでやめました.

(4) スリップストリーム

 前回と同じく簡単なルールで擬似しました. 前回はプレイヤーのみにスリップが効く様に作りましたが,今回は両者にスリップが作用します.

f:id:changlikesdesktop:20210123065708p:plain:w400
疑似スリップストリーム

(5) 報酬

  • 勝ち: 1.0
  • 負け: -1.0

 All or nothongの思想は前回と同じです. 引き分けの場合も負けと同じになります.

2. 結果

 プレイヤーとコンペティターが相互作用しながら学習するので,前回以上に結果にバリエーションが出ました. このため,同じ条件で15回学習を行った結果を総合的に見ることにしました.

ケース マ○ュアン(プレイヤー) ペ○ッキ 勝利数
0 逃げ ゴールスプリント 41
1 見送り 逃げ 2
2 逃げ ゴールスプリント 30
3 お見合い お見合い 63
4 ゴールスプリント 半端に逃げ 68
5 お見合い お見合い 30
6 お見合い 見送り 89
7 お見合い マイペース 37
8 お見合い マイペース 29
9 見送り マイペース 5
10 見送り 逃げ 3
11 お見合い マイペース 20
12 お見合い お見合い 40
13 逃げ ゴールスプリント 50
14 半端に逃げ マイペース 0

 こんな結果になりました.表右端の勝利数は学習終了後に100回対戦させた場合のマ○ュアンの勝利数です. 15ケース全体で見るとマ○ュアンの成績は507/1500でした. パワー(初期エネルギー)に勝るペ○ッキが圧倒的に有利な条件にあったと言えるでしょう.

 代表的なパターンのアニメーションを見てみます.

f:id:changlikesdesktop:20210217061054g:plain:w500
ケース3.お見合いからのスプリント勝負.スリップを利用して後ろから仕掛ける,マ○ュアン(黄)の勝ちパターン.

f:id:changlikesdesktop:20210217061724g:plain:w500
ケース11.蛇行せずにマイペースを貫くペタッキ(青).スリップに入られずに力を出し切れば勝てる,ペタッキの勝ちパターン.

f:id:changlikesdesktop:20210217062021g:plain:w500
ケース13.逃げを打つマ○ュアン(黄)を,ペタッキ(青)が後ろからさす.

f:id:changlikesdesktop:20210218053707g:plain:w500
ケース14.半端に逃げたマ○ュアン(黄)が,ペ○ッキ(青)にスリップに入られてなすすべ無く負ける.

 ここでは割と綺麗に動いたケースを抜粋してします. 結果を全体的にご覧になりたい方は,こちら*2でお願いします.

2. 1 戦略分析

 マ○ュアンとペ○ッキの戦略を分析してみます.

 マ○ュアンはお見合い(からのスプリント勝負)という戦略を,15ケース中7件で採って来ました. パワーで劣るマ○ュアンが勝利をつかむには,相手を先行させてスリップストリームを利用する必要があるためでしょう. 現実のマ○ュアンも,ライバルの力を利用するのが巧い選手でした.

 一方,ペ○ッキは進路を変えずにまっすぐに進み,中盤から後半にかけてスプリントをするという”マイペース”戦略を多く採ってきました. 相手の動きに関係なく自分の距離でスプリントをした,ということですね. 実は今回のルールでは,両者がスリップストリームを使うこと無くエネルギーを使い切れば,必ずペ○ッキが勝利します. ペ○ッキからすれば,マ○ュアンに後ろを取られないように前半はダッシュを控え,ゴール直前でエネルギーを使い切ることだけに集中すれば良いのです. 正直,プログラムを書いたときには気づいていませんでした. AIにバグを指摘された気分です(笑).

2. 2 逃げ

 マ○ュアン,ペ○ッキが共に,複数のケースで逃げを打ってきたことは意外でした. ペ○ッキはケース1,10と逃げを選択し,100%に近い確率で勝利を掴みました. マ○ュアンが見送った為です. 逃げに対する脅威を学習しなかったのでしょうか? ”なすすべが無いから今日はグルペット”という感じが,現実のマ○ュアン隊長を彷彿とさせて面白いです(笑).

 マ○ュアンが逃げたケース0,2,13では両者の勝利数が切迫する傾向にありました. パワーに劣るマ○ュアンからすれば,博打を打って五分五分の勝利をするのは価値があると言えます. 現実のレースにおいて,集団スプリントには向かないパンチャー型の選手が逃げを選択するのに似ていると思います.

 総合的にみると,”相手が間抜けな(見送る)場合があるならば,逃げは美味しい.特にパワー(持続力)がある場合は”と言えそうです.

 ただし,半端に逃げて相手にスリップに入られるのは最悪です. ケース14ではマ○ュアンは1勝も出来ませんでした. ”勝負を仕掛けるならば躊躇してはいけない”ということですね.

3. むすび

 面白くなって来ました. 次回はプレイヤーを増やして,より複雑な対戦をさせてみようと思います.

 前回のソースを更新しています*3