CodeVSforStudentでやったこと
CodeVSforStudentの決勝AIでの戦略をまとめてみました。
探索方法:
発火ターンを決め打ちしてビームサーチでした。
最初の発火を22ターン以内、それ以降は15ターン以内に決め打っています。
ただし、オジャマが送られてきたとき、発火ターンに相手が自分の連鎖よりも大きな連鎖をもっていそうなときは発火ターンを先延ばしにします。
探索の深さは決め打ちしたターンまで、
探索幅は、通常2700で探索の深さが浅くなると最大15000まで大きくします。
序盤に探索幅を大きくしすぎると局所解?みたいなものにはまってしまい、その後の探索ではあまり連鎖が伸びなくなることがあったため序盤は幅2700くらいがちょうど良かったです。
また、2連鎖以上した盤面は探索を打ち切っています。(消えたブロック数にした方がよかったかも)
評価関数:
・ブロックの数で加点(ブロックを消しすぎないように)
・端の列の高さで減点(見つける連鎖の大きさが安定した)
・左端を0として、2 3 6 7の列の高さに加点(高い山二つになるように)
・ブロックの島が分断しているなら減点
・連鎖数
連鎖数に関しては盤面の列ごとに左右どちらかの空いているブロックを下から数えて5個まで消してみて連鎖数をチェックします。また、発火ターンに近い深さまでくると、そこから発火ターンまでのパックのすべての落とし方を試して連鎖数をチェックする方式に切り替えます。
連鎖数は親盤面でチェックし、全ての子盤面にその連鎖数分の評価を与えます。(これが良かったかは怪しい)
という感じでした。
決勝の感想:
いろんな方と話せて楽しかったです。