こんにちは.changです. 今回は自転車レースでAI同士を対戦させながら学習させてみました.
0. 自転車レース
前回*1,スリップストリームを利用したゴールスプリントが,自転車レースで勝利をつかむ為の代表的な戦略であることを説明しました. 今回の記事を書くにあたり,いくつかキーワードを追加します.
逃げ
レースの序盤から加速をしてライバルに差をつけ,そのまま追いつかれること無くゴールする戦略です. 博打色が強い戦略であることから,kamikazeと呼ばれたりします.
お見合い
相手の出方を見ながら,スプリントを仕掛けるタイミングをゴール直前まで伺う戦略です. スプリントを先に仕掛けてしまうと,ライバルにスリップストリームに入られるリスクが高くなります. このリスクを相手に追わせようと駆け引きする頭脳戦になります.
1. プログラム
主に,前回から変えたところを紹介します.
(1) フィールド
基本的には前回と同じで,32×8の画像の上を上から下方向にレースさせます. 今回,コンペティターのエネルギー残量バーを追加しました.
(2) プレイヤー(マ○ュアン)
前回と同じですが,ポイントになるところなので載せておきます.
- アクションは4パターン
- 1回のスプリントで,エネルギー1を消費する
- エネルギーが0になると,スプリント(0)は前進(2)と同じ動きになる
- 初期エネルギーは5
- コンペティターの背後に入る動きを発生させる為,横方向の動きを大きくしている
- ロングスプリントは苦手(=初期エネルギーが小さい)だが小回りが効く(横方向の動きが大きい),マ○ュアン型の特性
(3) コンペティター(ペ○ッキ)
これも前回とほぼ同じです.違うのは,アクションを乱数ではなくQ値から決める点です.
- アクションは4パターン
- 1回のスプリントで,エネルギー1を消費する
- エネルギーが0になると,スプリント(0)は前進(2)と同じ動きになる
- 初期エネルギーは6
- 重量級(=横方向の動きが小さい)でロングスプリントを得意とする(=初期エネルギーが大きい),ペ○ッキ型の特性
Note: 今回,プレイヤー,コンペティター共に,左右の壁に対する動きを変えました. 壁に張り付いて横に動かないことが多かった為です. 左右の壁をリング上につなげています. 壁に衝突するアクションを採った場合,反対側の壁にワープします. 壁に衝突した場合はストップするやり方も試したのですが,ゴールにたどり着くのに精一杯でレースをしなくなってしまったのでやめました.
(4) スリップストリーム
前回と同じく簡単なルールで擬似しました. 前回はプレイヤーのみにスリップが効く様に作りましたが,今回は両者にスリップが作用します.
(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でした. パワー(初期エネルギー)に勝るペ○ッキが圧倒的に有利な条件にあったと言えるでしょう.
代表的なパターンのアニメーションを見てみます.
ここでは割と綺麗に動いたケースを抜粋してします. 結果を全体的にご覧になりたい方は,こちら*2でお願いします.
2. 1 戦略分析
マ○ュアンとペ○ッキの戦略を分析してみます.
マ○ュアンはお見合い(からのスプリント勝負)という戦略を,15ケース中7件で採って来ました. パワーで劣るマ○ュアンが勝利をつかむには,相手を先行させてスリップストリームを利用する必要があるためでしょう. 現実のマ○ュアンも,ライバルの力を利用するのが巧い選手でした.
一方,ペ○ッキは進路を変えずにまっすぐに進み,中盤から後半にかけてスプリントをするという”マイペース”戦略を多く採ってきました. 相手の動きに関係なく自分の距離でスプリントをした,ということですね. 実は今回のルールでは,両者がスリップストリームを使うこと無くエネルギーを使い切れば,必ずペ○ッキが勝利します. ペ○ッキからすれば,マ○ュアンに後ろを取られないように前半はダッシュを控え,ゴール直前でエネルギーを使い切ることだけに集中すれば良いのです. 正直,プログラムを書いたときには気づいていませんでした. AIにバグを指摘された気分です(笑).
2. 2 逃げ
マ○ュアン,ペ○ッキが共に,複数のケースで逃げを打ってきたことは意外でした. ペ○ッキはケース1,10と逃げを選択し,100%に近い確率で勝利を掴みました. マ○ュアンが見送った為です. 逃げに対する脅威を学習しなかったのでしょうか? ”なすすべが無いから今日はグルペット”という感じが,現実のマ○ュアン隊長を彷彿とさせて面白いです(笑).
マ○ュアンが逃げたケース0,2,13では両者の勝利数が切迫する傾向にありました. パワーに劣るマ○ュアンからすれば,博打を打って五分五分の勝利をするのは価値があると言えます. 現実のレースにおいて,集団スプリントには向かないパンチャー型の選手が逃げを選択するのに似ていると思います.
総合的にみると,”相手が間抜けな(見送る)場合があるならば,逃げは美味しい.特にパワー(持続力)がある場合は”と言えそうです.
ただし,半端に逃げて相手にスリップに入られるのは最悪です. ケース14ではマ○ュアンは1勝も出来ませんでした. ”勝負を仕掛けるならば躊躇してはいけない”ということですね.
3. むすび
面白くなって来ました. 次回はプレイヤーを増やして,より複雑な対戦をさせてみようと思います.
前回のソースを更新しています*3.