TL;DR

  • Q. マラソンマッチ (あるいは AtCoder Heuristic Contest など) のためのツールセットであって高機能なものを考えたとき、どのようなものになるだろうか?
  • A. それは個人用のオンラインジャッジシステムのようなものになるだろう。

はじめに

AtCoder Heuristic Contest が始まりました。 私もすこしずつこの手の長期コンテストに復帰していきたいと考えています1

さて、パソコン力で殴って優位に立てるなら殴っておきたいものです。 そのような事前準備について、考察や資料のまとめを置いておきます。

要件

マラソンマッチのためのツールに必要な機能を列挙してみましょう。 これには「並列実行」「可視化」「統計」「パラメタ最適化」「履歴管理」の 5 つを挙げられるはずです2。 それぞれの詳細は下で述べますが、つまりは書いたコードを「素早く」かつ「分かりやすく」評価して改善するための枠組みが求められています3

並列実行

コア数の多い計算機を使って並列実行することはよく行なわれます。自分で購入してもよいですし、クラウドサービス (Amazon EC2 など) で借りてもよいでしょう。借りた場合は 64 コアのマシンが 1 時間 70 円くらいです4。GitHub Actions 経由で自動実行されることもあります。

  • 例:
  • 例:

可視化

参加者はコンテストごとに与えられたビジュアライザを修正して改良するのが通常です。また、これをするための汎用の枠組みを作っている人もいます。

  • 例:
  • 例:
  • 例:
  • 例: kmyk/longcontest-visualizer-framework
  • 例: colun/gvc

統計

ICFPC においてはチーム内の専用の順位表 (「ダッシュボード」と呼ばれることが多い) が作られることが多いです。 個人戦のマラソンマッチにおいても、複数の提出間でのテストケースごとの傾向の差を観察することは有効です。

パラメタ最適化

ハイパーパラメータ自動最適化フレームワークを用いてパラメータ調整をする試みもなされています。フレームワークとしては Optuna が有名です。

  • 例:

履歴管理

コードの編集履歴を管理する際には Git が用いられます。 Git ではあるふたつの辞典のコードの差分を表示したり複数の変更をマージしたりできます。

結論

これらの要件をすべて (あるいはいくつか) を満たすものはどのようになるでしょうか? おそらくそれは「オンラインジャッジシステム」とかなり似たものになるはずです。 「コードを提出すると評価結果が返ってくる」という枠組みはまさにオンラインジャッジです。統計や最適化のためのいくつかの拡張が入るでしょう5し、実行環境はオフラインにあるかもしれませんが、大枠の理解としてはなおオンラインジャッジということになるように思います。

おわりに

誰か作ってください。たのむ。

注釈

  1. 2 週間全力を捧げるのは単純にしんどいので、赤タッチしてすぐ引退してしまっていました。 

  2. もちろん、まだ他にもあるかもしれません。 

  3. コードの自動生成をしたいという要求もありますが、今回はこれについては議論しません。事例としては colun/mmlang競技プログラミングの問題を自動で解きたい - うさぎ小屋 (kmyk/Jikka) などがあります。 

  4. 2021 年 03 月 18 日時点で c6g.16xlarge (64 vCPU) が $0.6385/1時間 です (料金 - Amazon EC2 スポットインスタンス - Amazon EC2 | AWS)。 

  5. 可視化の機能が組み込まれたオンラインジャッジとしてはすで CodingGame があります。