AHC 029

 

 

AHC 029 参加記

 

AHC 029 でやったことと参加記です。

プレテストは 6.4B で暫定26位です。

 

 

やったこと

最終提出 の説明です。バグなどもありますがそのまま説明しています。細かいところは一部省略しています。

 

概要

評価関数による貪欲です。将来ターンのシミュレーションは行っていません。

 

 

カードを引く場面での選択

 

引くカードの評価をだいたい次の表のとおりとして、「(カードの評価)-(コスト)」が最大のものを選択する。

引くカードの種類 評価
通常労働カード 現在持っているプロジェクトに使ったときの評価の変動量の最大値
全力労働カード 現在持っているプロジェクトに使ったときの評価の変動量の合計
キャンセルカード 現在持っているプロジェクトのうち評価が最低のものの -1
業務転換カード 現在持っているプロジェクトの評価の合計の -1
増資カード 600 \times 2^{L}

 

ただし、プロジェクトの評価はだいたい次のとおりとした。

状態 プロジェクトの評価
未完了 0.83v - 0.85h + 0.1(h-h^{0.995})
完了 v

また増資カードは \displaystyle t \times (1 + \frac{p}{m - p + 1} \cdot \frac{1}{L + 5}) \le 999 のときに限り引くこととした。

ここで、 t はその時点のターン数、 m はその時点での所持金、 p はカードの価格、 L はそれまでの増資回数。

 

カードを使う(実行する)場面での選択

増資カードがあれば必ず使用する

そうでなければ「(お金の変動)+(プロジェクトの評価の変動)-(カード評価)」が最大のものを使用した。

プロジェクトの評価は上と同じものを使用した。カードの評価はだいたい次のとおりとした。

 

カードの種類 評価
通常労働カード 0.7w
全力労働カード 0.6Mw
キャンセルカード 2^{L}
業務転換カード 2^{L}

 

 

最終提出には使わなかったけど試したこと

  • 増資カードの評価を、増資カードの出やすさによって変える(実はやってるつもりだったけどバグっていた)
  • 「カードを引く」→「カードを使用する」の一連の流れをまとめて最適化する
  • 最後の方で実現可能性が低くなったプロジェクトは評価を下げるべきだった(一応何かは入れたけどあまりいい感じにならず・・)
  • プロジェクトごとに評価を作っていたので、特に M が大きいときは余りがちだった
  • Optunaでパラメタ調整をいろいろ試した(けど変動が大きすぎてよく分からなかったので結局手で決めたもの(上に書いたもの)に戻した)

 

できなかった・うまくいかなかったこと

  • N が大きいときも、選んだ直後のカードをそのまま使っていることが多かった(将来使う予定のカードをもう少し効率よくストックできると良かった)
  • 増資カードは 2 枚以上連続で買うと 2 枚目以降のコストが下げられることに気付いたが、うまく使えなかった
  • 高い買い物をしたときに、所持金不足で一定期間(ほぼ)ゼロコストのカードしか取れないみたいな状況に陥ることがあった。うまく指標化して避けるようにしたかったができなかった
  • 適当にシミュレーションすると上がりそうな気がしたけど、それ以前にいろいろバグってできなかった

 

 

参加記

 

序盤

最初の 1~2 日ぐらいはいい感じだったな(遠い昔の思い出)。

 

 

中盤

帰省

 

終盤

いろいろ改造したかったが試してみるとうまくいかず。。

 

 

 

 

End