CodinGame Spring Challenge 2021 参加記

CodinGame Spring Challenge 2021 に参加していました.CodinGame(こどげ)初参戦でした.最終順位はGlobal1742位/6867人, Gold1515位/1608人でした.

こどげ is 何

ぼくのつくったさいきょうのゲームAIを他の人のAIと戦わせるコンテストです.今回はボドゲで戦うプログラムを実装しました.

日本語ルールはこちらが詳しいです.

戦略

相手の行動をWAITで固定した20幅ビームサーチをしました.

評価値

日付ごとに変えています.

  • 最終日,最終日-2: 自分の得点
    • 最終日-2のときに先行して木を刈っておくとnutrientsやgrowコストの面で有利かな……と思って導入しました.
  • 最終日-1: 最終日に最大限スコアを稼げるようにSize3の木を増やす
  • それ以外: (スコア差重み)+(sun重み)+(立地重み)+(隣接重み)+(size重み)
    • スコア差重み: 自分のスコア-相手のスコア.負であれば3倍
      • 先に刈られ過ぎてnutrients負けするのを避けるために3倍にしました.
    • sun重み: 次ターンの自分のsun point-次ターンの相手のsun point
    • 立地重み: 自分の木に対する次のポイントの合計
      • セル0に木が存在していれば6*size
      • セル8,10,12,14,16,18に木が存在していれば4*min(size,2)
      • セル19,22,25,28,31,34に木が存在していれば2*min(size,2)
      • セル1,2,3,4,5,6に木が存在していれば1*size
    • 隣接重み: 自分の木が2本隣接している場合,ペアごとに-6ポイント
      • 自分の木の影が互いに干渉していると弱いことを踏まえたペナです.
    • size重み: size2の木の数*4+size3の木の数*7
      • grow分のsun pointを補填するイメージです.

セル0,8,10,…,18に木があると次の利点があると思ったので,それを重視した評価値設定にしています.流石に重視しすぎたかもしれません.

  • サイズ2以下であれば互いの影が干渉しない,サイズ3でもあまり干渉しない
  • セル0以外のrichness3のセルに影を置きやすく,相手がrichness3のセルに植えてもアドバンテージを得づらい

セル19, 22, 25…についても同様の理由です.

探索空間

次のルールで探索空間を絞りました.

  • 初手はwait
    • 「初手waitするだけで順位が上がる!」みたいな情報がTwitterで流れてきたのでそうしました.100位ぐらい上がった気がします.
  • 木が6本以上ある場合はseedしない
    • この制限が一番効きました.これのおかげでGoldに入りました.

環境など

自己対戦

qLethonさんがローカルで10000回対戦するやつを作ってくれたので,それをforkしてローカルで10000回対戦するやつを任意のコマンドで実行できるようにしたやつを作って自己対戦させました.qLethonさんありがとうございます.

言語

今回はKotlinを使ってました.書きやすいしIntelliJ IDEAが最高だったけどtororoのパフォーマンスが厳しかったです.なぜかTreeSet#add()に10msかかったり,2連続でgetTimeMillisした際の間隔が10ms空いたりしてました…… これのせいでTLE負けしてたので辛かったです.次回はC++使います.

感想

Gold帯に上がってから全然勝てなくなったので厳しかったです.MCTS/DUCTについては全く触ることができなかったので勉強しておこうと思います.

あとWordPressにMathJaxを導入できません.Help!

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA