AHC030 環境構築 振り返り

AHC030に出て、11位でした。

自分は長期マラソンは殆どやったことがなく、2015年に3回topcoder MMに出たのが最初で最後(のはず)でした。 なので今回のAHCで環境整備系も全て一からやることになりました。なのであえてそちらについての感想や振り返りを書きます。

コンテスト中に使ったもの、また時間があったら欲しかったもの、を個人的に重要だと感じた順番で書いています。

ローカルテスター

Psyhoさんも言っています(https://twitter.com/FakePsyho/status/1605639454600806401)が、ローカルテスターが一番重要な環境整備要素でした。自分は適当な100行程度のpythonコードを準備して、改変しながら使っていました。

  • 絶対スコア / 相対スコアの一覧を(csv)出力する
  • 実行時間の一覧を出力する
  • ケースをMでフィルターする

の3つの機能を含んでいて、今回の問題だとこれらは必須だと思います。

また、

  • テストケースの並列実行機能

は結局実装しなかったのですが(なんで?)、必須級だと思います。3秒 * 100ケース回すと5分待ちなので、効率がすごい落ちた自覚があります。

個人的には複数の問題に対応できる強力なものを整備するよりは、pythonコードやらなんやらを問題ごとに毎回改変していくのが楽そうだなぁと思っています

Jupyter notebook (IPython notebook)

ちょっとした実験をすぐ書けて、プロットも出来るので非常に便利なツールでした。自分は今回は

  • いろんなk, vで正規分布をプロットしてみる
  • テストケースのMの分布を調べる
  • その他細かい実験/計算

に使いました。インストールが簡単(vscodeならプラグイン入れるだけ)なので使い得だと思います。

 

でかつよCPU

先述の並列テストケース実行とも関係して、CPUは多ければ多いほどいいと思いました。先述のように自分の用意したローカルテスターは並列実行しないのですが、最終盤は結局そのローカルテスターをいろんなMに対して並列に走らせる、とかやっていてCPUが足りない状態になりました。

クラウドにデカいインスタンス借りてsshするのが"正解"なのは間違いないのですが、インスタンス立てたり落としたりするのがどうしても億劫な気持ちになってしまい… 手元のPCが強ければそれが一番良いのは間違いないと思います

でかつよクラウドインスタンス

上と同じ話です。最終盤は強いCPUか強いクラウドインスタンスのどちらかは欲しい

google spread sheet

先述のローカルテスターの出力を張ってスコアの比較に使っていました。 最初のほうは快適だったのですが、画像のシート一覧を見るとわかるように終盤になるにつれて限界になっていきました。改善の余地がありそうです(がspread sheet職人はやりたくない うーん)

順位表のスナップショット機能 (未実装)

今回の問題は相対スコアなので、順位表のスコアが常時変動します。特に「自分の提出で他の人の点数がどのぐらい変わったか」は、自分の提出がbestを含むかを含んでおり、重要な情報でした。

そのため、提出直前の順位表を保存しておく必要があったのですが、注意力が低く複数回失敗しました。

考えられる対策としては定期的に順位表のスナップショットを取るスクリプトを走らせればいいです。でもどのぐらいの頻度なら怒られないのか、とか、そもそも参加者がみんな個人で定期的にスナップショットを取るというのは変な話なので、公式でスナップショットを提供してくれたら嬉しいなぁと思っています。