# AHC029 2023/12/22 12:00 ~ 12/26 21:00 https://atcoder.jp/contests/ahc029/ ## 1日目 ### 所感 この問題、絶賛PJが大変な私への当てつけか!? カードゲーム、拡大再生産系。 最後moneyの最大化なので、微調整は必要。 期待値を求めるゲーム。適当にやると全然お金増えない。 ひたすら増資を狙うのが鉄板そう。まずはそこから いつもの貪欲作ってモテカルロアプローチでは? コスパの良し悪しを決めるのが大事そう。 PJ削除系のカードやつ、効果は変わらないので最初に保持しておくのがオトクそう。 増資後だと、単純にコストが倍増していく。 カードの生成割合はシード毎に異なるっぽい。 集計していけばいい。 基本的にはコスト=労力、労力=価値、をベースとした ガウス分布で生成されるっぽい。 一方で、コスト=0で労力=1が手に入るのでこれを基準に考えた方がよい。 シミュレーションできるよう、入力には全部入ってそう。 これ、結構スコアがふっとんでいきそうな問題だけど、評価は比率のまま? →単純に 自分/最大スコア だったので、これはmaxを飛ばすの大事そう。 →期待値最大化でいいか。 キャンセル系、ベースコスト5っぽい。 ### 実装 愚直解を出す。 シミュレータ。 バッチ実行。 貪欲法やる。 労力=価値なので、1000turnで1000スコアが基準。 とりあえず各カードの使用と取得を雑に書いた。 おー、めっちゃ伸びる。 ![image](https://hackmd.io/_uploads/r1ibZSQD6.png) 適当に貪欲伸ばしていくのが楽しそう。 俺達のcodingame winter はここにあったんだ! とにかく場を回転させていくのが重要そう。 うーん、そうでもない? ![image](https://hackmd.io/_uploads/r1OSZIQw6.png) あー、次の手を評価しながらカード選択すればいいじゃん。 あと、全削除がデカいやつに引っ張られて起こるのは良くないな。途中まで削ったやつもあるので。 **TODO** ~~入出力作成~~ ~~内部シミュレータ作成~~ ~~バッチ処理~~ ~~愚直解出力~~ そこそこ貪欲 ## 2日目 ### 実装 playするカードをpickするカードの評価を共通化。 ガクッとさがった。弱いカードが溜まっちゃうのが問題っぽい。弱いのから使う。 ![image](https://hackmd.io/_uploads/HyX5ekEwp.png) こういう使い方しちゃう。多分これは手札に保持する価値を評価していないから。 ![image](https://hackmd.io/_uploads/HJV1DJEDT.png) 盤面自体の価値を評価しないといけない。 →カードを選んでプレイまでが1サイクル →ループの区切りを変える→変えた ![image](https://hackmd.io/_uploads/Byts3yVPT.png) PJはhに対して、vが正規分布でブレる。 hはL=0時に4~256。 指数増加なので、中央値は32。 期待値としていくら増えたかで評価。今は削られたPJの報酬がでかすぎ。 →取ったカードをすぐ使う縛りでそこそこ良くなった。パッと見悪くない。 ![image](https://hackmd.io/_uploads/BJ58cFEwp.png) 新規に選んだものをプレイした時に既存の手札から嬉しいものと →既存の手札からプレイした後で何が残ると嬉しいかを調べるの2つに →よーし、初日の貪欲こえた。 ![image](https://hackmd.io/_uploads/BJZdPj4wp.png) 現金がちゃんとあると、通常の評価より増やす。 ![image](https://hackmd.io/_uploads/H1nQDh4Dp.png) 初日貪欲が27.5% PJの更新時に少し色を付けると結構伸びた。初日貪欲が19.4% ![image](https://hackmd.io/_uploads/SkH3RhNwa.png) **TODO** ~~盤面の評価~~ ~~そこそこ貪欲~~ ## 3日目 ### 考察 手札が多い時、workの大きいカードを保持したまま、 大きいPJをwork0で触りがち。 無駄にして欲しくはないが、着手するなら大きいのから使うべき。 ![image](https://hackmd.io/_uploads/HJt-AGSDp.png) Lの20over、ちゃんとツールで見ておくか。→OK longでmoney持ったけど、intで行ける?行けない? →L<=20でもintだとあふれる コストの大きいPJの価値を減算するやつ、今はコスト順に小さい方から0.95をかけていく方式。 →順序を入れ替えると評価が変わる、絶対評価にしたい →コスト増加に伴って緩やかに上昇が減ってく関数ないかな。 →x^0.95とかの緩いのでいいや。 →x^0.98が良かったので採用 現状の課題、Workカードを保持して、ALLは即時使用しか存在しない。 ![image](https://hackmd.io/_uploads/ryWgUDBwp.png) 一括系を使う際、露払いしてから使ったほうがいい。 →場のPJに応じて、手札の評価を変える? →変に評価上げると使わないで保持し続けちゃう問題はある。 →一方で、変に他のでPJを消費すると価値が下がるから、価値が高い間に使用されるか? →削除系が上手く行かない。一番効率が悪いやつが優先されるわけじゃない。 ![image](https://hackmd.io/_uploads/SyxK4FSvT.png) →謎のバランスで成り立ってそうで、重みを変えるとスコアが下がる。ちょっと置き。 →キャンセルの縛りを入れた。ただ記載の問題は防げない。 値段0保証のルールが書いてないな。 ちょっと調べたほうがいい。値段0しか労働カードか生成されないseedがありそう。 →先に値段0のを入れてから、確率に従っていれてそうなので、労働カードが生成されないseedはない。 ![image](https://hackmd.io/_uploads/ByazKtrPp.png) 先のゲーム終了時の考慮をする。 →残り数ターンでだんだんmoneyしか見なくする。した。ちょっとあがった。 初日貪欲が8.7%。 Mの少ないケースでうまくいっているものは業務転換カードでバンバン引き直している。 Mが小さいのに合わせて業務転換カードの価値は増減しそう。 ケースのパラメータに応じた価値増減をそろそろ考えたい。 →特に増資カードは高い。無理して買わないほうが良い時もありそう。 →削除系カードも同様、確保しておいたほうがよいか、必要なら使うでいいか。 →一度に選べるカードの中に削除があるかどうかが大事。 →大体入ってくるなら、値段も高くないのでその場で買うでいい。 →増資カードは考慮で良くなるが他は下がる。 →大きな評価値よりも、その場の必要性の方が大事ということか。 初日貪欲が8.3%。 ![image](https://hackmd.io/_uploads/SJDf9nBDp.png) あー、場を回すことについて、 通常労働が多いと業務転換が良くて、全力労働が多いと個別のキャンセルが良いな。 →上がらなかった。発想は合ってるはずだが。☆ seed=21、ローカルの相対で2%。 21=0.02 s= 41355150 N/M/K=5/6/4 ![image](https://hackmd.io/_uploads/rk4iqhrD6.png) うーん、どうしても小さい方からキャンセルしちゃう。 コストが小さいPJの影響力を大きくする以上、しょうがない所があるが。。。 →本来、全力労働次第なはず。今の場の評価は単独の対象選択のため。 →全力労働カードの評価を上げてもスコアさがる一方。。。 →あくまでカードはフラットに評価できるのがいいのかなぁ。。。 いくつか行動を縛るか。。。 →キャンセル、候補を縛る。 →やはり下がる。逆にキャンセルblockを作る? →blockでもだめ。 →効率悪いやつがいる時に、効率がいいやつはblockするとあがった →全力労働、すぐ終わらせられるのがある。お金が無いから焦ってる系。 ![image](https://hackmd.io/_uploads/ByYRv0Hw6.png) →下がる。やはりお金を持っておくのは重要っぽい。 →Mが大きい時、最小コストのPJを中途半端に下げずに滞留させるようにした。 →全力労働で巻き込み解消を狙う。 ![image](https://hackmd.io/_uploads/SkPZ8kIwa.png) やはり業務転換を上手くキメるのが重要そう。 →業務転換を狙うようにする。☆ →キャンセル時と違って、DESTROY時は期待される効率はちょっと下げた方が良さそう。 →下げたらだめだった。 →完了済PJがあればプラス評価 →ちょい伸び。 あ!手札の更新ができてない。☆ 枚数関連の評価が軒並みずれるはず。 モンテカルロ、全アクションに対してやるのも微妙。 →一定以上プラスになるアクションに対してやる。☆ ## 4日目 ### 実装 手札更新を正しくする →取って即時使用の時は不要 →正しくしたが、かなり下がった。 ![image](https://hackmd.io/_uploads/ryZ1wsUDa.png) とはいえ正しいのでこれで調整する。 低いケースみているけど、増資カードが上手く取れるかどうかっぽい。 コストの高い全力労働を手札でプールさせないのが大事かも。 そろそろ増資できそうという所で全力労働を買ったせいで、増資逃している。 →うーん、これは運! →色々調整してこれくらいしか行かない。左が改修後、右がバグ込み。 ![image](https://hackmd.io/_uploads/Sk_YK-wDp.png)![image](https://hackmd.io/_uploads/HJpsFbwwT.png) →偶然コスト0のDESTROYがたくさん来たときに、とりあえず保持しておくのが強いみたい。 →でも評価関数として入れるとだめ。 →違うわ、お金が無い時にコスト0の労働カードより、業務転換を保持するのが強いんだ。 ![image](https://hackmd.io/_uploads/ryNIcQPwp.png) これは先にキャンセル入れてから全体で良さそう。 ![image](https://hackmd.io/_uploads/BydsCsIDT.png) モンテカルロ入れたい。 ## 5日目 最終日 平日何もできないよ。 とりあえずバグ貪欲を出す。 あっれ!?!?これはちょっと困ったな。。。 ![image](https://hackmd.io/_uploads/ryMEA6wPa.png) バグなしの方が点数高かった。やはりみんなピーキーなやつはやってないみたい。 ![image](https://hackmd.io/_uploads/HkQErCDDp.png) なのでバグなし側をちゃんと伸ばす。 ![image](https://hackmd.io/_uploads/BJfXJNODp.png) 終了。暫定順位 ![image](https://hackmd.io/_uploads/ry9lSSOw6.png) ## 反省会 あー、増資はまとめて使ったほうがいいのか。納得。 →そうでもないっぽい?みんな試して弱くなったとも言ってる。 以外と上位も貪欲っぽい。貪欲力で負けた。 1位のeijirouさん、やはり貪欲プレイアウトのモンテカルロ。 ![image](https://hackmd.io/_uploads/HyWJk8_vT.png) 貪欲で盤面評価するか手の評価するかについて。 ![image](https://hackmd.io/_uploads/rJZ90LOwa.png)