inani_waonの日記

コンテスト覚書

RECRUIT 日本橋ハーフマラソン 2024冬(AHC029) - Business Simulation Game 参加記録

RECRUIT 日本橋ハーフマラソン 2024冬(AHC029)に参加しました。

 

atcoder.jp

 

問題名は Business Simulation Game。拡大再生産カードゲームでした。

結果は提出833人中83位。(暫定テストでは99位)

あまり上手くやれた気がしないけど、その割にはまあまあ。

開催期間4日強に対してクリスマス+イブが被ってたし、全力参加できなかった人が多そう。

カップルに恨みでもあるのか?

 

問題

労働カードでプロジェクトカードを倒してお金を稼いでね。

プロジェクトを爆破するカードや、増資して全ての倍率を上げるカードもあるよ。

 

考察

MCTSが強そうな問題。でも2000ms/1000Turnか。何はともあれ、まずルールベースか貪欲だな。

平均比率はほぼ[金1:労働力1:残務1]なので、上振れを引いていかないと利益が出ない。増資20回まで…そんなに行けるのか?多くて10回とかじゃない?

心の目で見ると、増資カードを買って使わなければ、コストを増やさないままもう1枚買えるって書いてる。うーん、そこまでする価値あるのか?

分からん。こういうのはまず手を動かす。

 

やったこと

初日

まずローカルテスターを作る。長期インタラクティブでは毎回やってる。ジャッジとやり取りする入出力の部分を注入する形にすると、ソルバーを標準入出力に依存させずに作れる。お気に入り。

カードのピック(手札に加える)は適当な貪欲で、プレイはルールベースで適当に書いてみる。スコアは平均13K。ちなみにサンプルは平均1K。苦労して稼いだお金で高いカードを買って安いプロジェクトにぶつける、という賽の河原をすることが多かった。そうなると常に1枚無賃金労働や、キャンセルカードを抱えたいわけで…。あ、これもしかしなくてもピック→プレイの順に変えてセットで評価した方がいいな。そうしたら無賃金労働をその場で拾って使えるから、無駄に何かを抱える必要は無い。

というか、サンプルは無賃金労働を999ターン続けるから約1000円なのか。1ターンの価値が上振れ無しで1円ということで良さそう。

2日目~

ピック→プレイの順に変えてセットで評価、を書く。評価値は1000ターン目の見込みスコアを目標にするのが安定かな。

以下評価値*1

・所持金はスコアなのでそのまま。ただし、お金があれば上振れしたカードを買えるし、増資のために貯蓄することも必要。0~30円帯と200~700円帯に追加ボーナスを付ける。

・労働カードは無賃金労働の代わりに使うことで時間を生み出せる。時間は1ターン1円換算で。ただし見込みスコアなので実際の価値より下げておく。

・キャンセル系のカードは分からん。無賃金労働よりは上、2枚目以降は価値が落ちるように。

・増資カードは使うことだけ考える。1ターンの価値が上がるので、残ターン数*増資倍率にすればいいよね。ただ拡大再生産なので、いくらか複利で増えることも含めておこう。毎ターン2%複利くらい?

・プロジェクトは…何?

 いや、実際に何ターンかかるか、どういうカードを購入して倒すかが決まっていないんだから評価しようがなくない?早く完了させることによる複利効果とかは…残ターンの評価に仕込んじゃったんだよなぁ。

 MNW(マジで何も分からん)

 労働カードを使ってプロジェクトを進めることはプラス評価されるべきだから、所持金>プロジェクト>労働カードという大小関係にはなるよね。

 利益率の良いプロジェクトから片づけたいし、あと複利で回る都合上、小さいプロジェクトを先に片付けたい。

 前者については、価値でソートして下位ほど得点を減衰させた。また、赤字プロジェクトは爆破できるので、赤字を減衰させたりする。黒字プロジェクトがある限り全体除去を撃つ必要性はやや薄いので、黒字があるなら減衰率を上げたり。

 後者は[無賃金労働でかかるターン数^0.8]をペナルティとし、ターン数が短いものを先に処理したくなるようにした。

・終局間際の詰め

 ラストN(持てるカード数)ターン+αで現金以外の価値を減衰させていく。

・手持ちカードの労働力カーブも評価したい。

 効果が2^Nの労働カードやプロジェクトをNマナと定義する。2マナ労働だけではファッティプロジェクトに対抗できないし、8マナ労働だけでは接死持ちである低マナプロジェクトとの相性が悪い。

 カーブとは言ったけど枚数を積みたいわけじゃないし、手持ちカードと3,4,5,6マナとの各最小差をペナルティとして付ければいいかな。

 

やらなかったり没になったこと

・複数手読み

 腰が重くて最後まで渋ってしまった。

・終盤に終わらないプロジェクトに打ち込むのを直す

 上振れ労働カードを引けば終わる可能性があったり、判定が難しい。最後まで対策できなかった。

・各カードの出現率を考慮する

 それを気にする段階まで行ってないと思う。

・プロジェクトの価値を正確に評価する

 何も分からん。

・全力労働(全体労働)を使いやすい盤面作り

 つまりプロジェクトの評価だけど、それよりもっと基本的な部分が綺麗に動いていないので。

・増資カードの一括使用

 上手く回らないんじゃないかという、やりたくない理由を積み重ねてた。

 そんなに実装重くないだろうし、最後手詰まりだったんだから試すだけ試しても良かったね。

・増資前の弱いカードの処分

 でも使わないと捨てられない。そして使うのは弱い。本当にやるべきなのか?

・手元1000ケースへの過学習をしない

 3日目からこれに縛られて、あっちは上がったけどこっちが4桁まで落ちたとか、不毛な調整に走ってしまった感。

 インフレ+終盤の詰めで点数が大きく変わるうえ相対スコア評価なので、正当に伸ばすか、足を止めて相対スコア対策に回るかという択が出来てしまう。いつも後者を選ぶので、システスで順位は伸びるけど何と戦ってるのかよく分からない。

 

他の人の解法を見て

モンテカルロ系もあるけど、貪欲の評価関数差だけで大きく離されている人もいる。

差が付くとしたらプロジェクトの評価かなぁ。後で見直してみたい。

 

感想

今回は短めの長期で新鮮でした。

半分がクリスマスと被り、更に全体がコドゲと被っているのはAHC乱立も含めてなんとかなりません?とは思いつつ。

問題も面白かったけど、噛み合いで絶対スコアが数桁変わる問題で相対スコアなので、本質以外の部分と向き合って慌ただしかった感もあるかな。

じっくり本質と向き合ってみたい問題でした。

*1:増資0回として書いています。増資回数に応じて2^L倍する。