Codin Game Fall Challenge 2020に参加しました(リンク)
参加したのはボンドさんのツイートで、こどげ思ったより始めるハードル低いかもと思ったことがきっかけ。
ルールはツカモさんの記事に丸投げして、大まかな方針、最終方針でやったけどダメだったこと、やって良かったこと、結果、感想を書いていきます。↓ツカモさんの記事。
https://tsukammo.hatenablog.com/entry/2020/11/13/024329
大まかは方針転換は2回やりました。
やったこと
最初期: CASTして無駄にならない呪文をCAST、足りなかったらREST、1/2の確率でLEARNする。
無駄CAST以外を適当にCASTして、BREWできたらBREWするとだけしたコードでBronzに昇格し、Bronzでボロボロに負けたのでとりあえずLEARNさせようとしたコードです。
このLEARNする確率をうまい具合にいじったら180位くらいまでいけて、意外と戦えるかもしれないと思いました。
中盤: 初手LEARN->3手全探索->queueに入れて実行
今のターンから数えて3手を全探索し、weight={1,2,3,4}とした重みづけをインベントリに施して、Score+重みづけ和を最大とするように次の手を選択しました。
次の3手で最も良いのを探したんだから、全部実行しなきゃダメでしょと思ったので実行コマンドをqueueにpushして、queueが空の時だけ探索しました。
終盤: 初手LEARN->ビームサーチ
3手全探索おばあちゃんではSilverボスに勝てなかったので、ビームサーチを書きました。このおばあちゃんでやったことはもう少し詳しく書きます。
基本的には最初LEARNして残り探索という方針を取りました。
やってみてダメだったこと
盤面を見てtierごとの評価の重みを変更すること。
終盤は安いポーションを早く作り、6個目のポーションを取りやすくすること。
自分3手以上、相手次のターンでbrewできるポーションをbrewする選択肢を枝刈り(多分バグを埋め込んだせい、方針自体は良さそう)。
やってみて良かったこと
ビーム幅を可変にした。序盤は全探索をし、自分がポーションを4つ取って以降は試合終了を見越して幅150~200のビームサーチに切り替えた。
序盤のLEARN時に強い呪文を優先するのではなく、明らかに弱い呪文を避けるようにした。
初期呪文を2,0,0,0以外封印した。
20ターン目以降LEARNする選択肢を枝刈りした。
勝ちの決まるBREWは最短で取りに行くこと(勝ちの決まる判定はがばがばでもある程度有効だった)。
REST->BREWの動きをさせないために、速いターンのBREWに若干のボーナスを付与した。
結果
最終GOLD、全体226位でした。
事前に練習した感じSilverはいけそうだけどGOLDは厳しいかもな~~と思っていたので、 予想外の高順位に満足してしまっています。
感想
ものすごいハマりました。研究室でずっとこどげやっていたし、PCの前にいないときは戦略を考えたりしていました。めちゃくちゃ面白かったので、周りの人に布教していけたらなと思う反面、人生が大事なときは触るべきじゃないなとも思いました。修士論文さん......。
日本人が上位にすごく多かったので、逐一目標を決めてそこに追いつこうとやってました。あと、僕はあまり貢献できませんでしたが、京大が世界3位に入ってうれしいです。次は僕も貢献する側に回れるように、ヒューリスティックも精進してSpring Challengeに備えたいです(3月は忙しいので参加しないかもしれませんが......)。