| Crates.io | pahcer |
| lib.rs | pahcer |
| version | 0.3.1 |
| created_at | 2024-11-27 13:47:35.805797+00 |
| updated_at | 2025-07-27 17:48:15.680928+00 |
| description | A tool to run tests for AtCoder Heuristic Contest (AHC) |
| homepage | |
| repository | https://github.com/terry-u16/pahcer |
| max_upload_size | |
| id | 1463080 |
| size | 219,180 |
AtCoder Heuristic Contest (AHC) のローカルテストを並列実行するツールです。
Rustの実行環境が必要です。公式サイトを参考に事前にインストールしてください。
Rustインストール後、以下のコマンドでpahcerをインストールしてください。
$ cargo install pahcer
以下のコマンドが実行できればインストール成功です。
$ pahcer --version
インストールが失敗する場合、以下を順にお試しください。
$ rustup update
--locked オプションを付けてインストールする$ cargo install pahcer --locked
最新バージョンがうまく動かないなどの理由によりバージョンを指定してインストールするには、以下のコマンドを実行してください。
インストール可能なバージョンの一覧はcrates.ioをご参照ください。
# 例: cargo install pahcer --version 0.1.1
$ cargo install pahcer --version <VERSION>
cargo-update を使用する方法と素のCargoを使う方法があります。前者がオススメです。
cargo-update を使う方法$ cargo install cargo-update # 初回のみ必要
$ cargo install-update pahcer
更新がなかった場合でも都度コンパイル処理が走るので少し重いです。
$ cargo install -f pahcer
アンインストールしたい場合は以下のコマンドを実行してください。
$ cargo uninstall pahcer
以下のようにコードとAtCoderの公式テストツールを配置してください。
この配置に従わなくても構いませんが、設定ファイルの編集が必要になります。
ただしここで、"AtCoder提供の公式ローカルテストツール"とは、Windows用のコンパイル済みバイナリではなく、Rust言語で書かれたソースファイルの方を指すものとします。
ahc000 (プロジェクトルート)
├ main.cpp (解答プログラムのコード)
└ tools (AtCoder提供の公式ローカルテストツール)
├ src
└ in
ahc000 (プロジェクトルート)
├ main.py (解答プログラムのコード)
└ tools (AtCoder提供の公式ローカルテストツール)
├ src
└ in
ahc000 (プロジェクトルート)
├ src
│ └ main.rs (解答プログラムのコード)
├ targets (ビルド成果物フォルダ)
├ Cargo.toml
└ tools (AtCoder提供の公式ローカルテストツール)
├ src
└ in
ahc000 (プロジェクトルート)
├ main.go (解答プログラムのコード)
└ tools (AtCoder提供の公式ローカルテストツール)
├ src
└ in
以下を実行して、初期設定を行います。
$ pahcer init -p <PROBLEM_NAME> -o <OBJECTIVE> -l <LANGUAGE> [-i]
<PROBLEM_NAME> にはコンテスト名を入れてください。<OBJECTIVE> にはスコアが大きい方が良いか小さい方が良いかを指定してください。
max : スコアが大きい方が良いmin : スコアが小さい方が良い<LANGUAGE> にはお使いの言語を入力してください。現在以下のオプションが指定可能です。
cpp : C++python : Pythonrust : Rust
cargo.toml の package.name と patcher init の <PROBLEM_NAME> を一致させないと設定ファイルの編集が必要になります。targets ディレクトリがプロジェクトルート直下にない場合も同様です。cargo-competeを使用している場合などは注意してください。go : Go-i オプションはインタラクティブ問題の時に設定してください。実行すると、設定ファイルが ./pahcer_config.toml に生成されます。また、テストケースの実行結果が格納される ./pahcer ディレクトリが生成されます。
AHC039 (非インタラクティブ問題、スコア最大化)でC++を使用
$ pahcer init -p ahc039 -o max -l cpp
AHC030 (インタラクティブ問題、スコア最小化)でPythonを使用
$ pahcer init -p ahc030 -o min -l python -i
以下のコマンドを実行するとテストケースが並列で実行されます。
$ pahcer run
実行中、各ケースの実行結果がコンソールに表形式で逐次出力されます。各列の内容は以下の通りです。
Progress : テストケース実行の進行状況です。Seed : 実行したテストケースのseed値です。Case Score : 当該テストケースのスコアです。
Score : 実スコア(正の整数値のみ許容)です。0点の場合はWA扱いとなります。Relative : ローカルでのベストスコアを100としたときの相対スコアです。
OBJECTIVE = max のときは 100 * YOURS / BEST 、 OBJECTIVE = min のときは 100 * BEST / YOURS で計算されます。Average Score : その時点までの平均スコアです。
Score : 実スコアの平均値です。Relative : 相対スコアの平均値です。Exec. Time : 実行時間(ミリ秒表示)です。並列実行数などにより変化しうるので参考程度にご覧ください。このとき、並列実行を行っている都合上seedの順番が実行ごとに変化することに注意してください。途中で実行を中断する場合は Ctrl+C を押してください。
実行後、以下の情報が表示されます。
Average Score : 実スコアの平均値です。Average Score (log10) : 実スコアの対数を取った値の平均値です。相対スコア問題の評価などに活用いただけます。Average Relative Score : 相対スコアの平均値です。Accepted : Acceptされたケース数です。正の点数を取ったテストケースがAcceptedと見なされます。実行時間が長くてもTLE扱いにはなりませんのでご注意ください。Max Execution Time : 実行時間の最大値です。また、実行後以下の3ファイルが生成または追記されます。
./pahcer/summary.md : 実行結果のサマリが表形式で記録されたファイルです。./pahcer/best_scores.json : ローカルでのベストスコアが保存されたJSONファイルです。./pahcer/json/result_*.json : 実行結果の詳細が記録されたJSONファイルです。デフォルトでは、 seed=0 から seed=99 までの100ケースが実行されます。カスタマイズしたい場合やうまく動かない場合は ./pahcer_config.toml を編集してください。
以下のコマンドを実行すると、最新10件の実行結果が表形式で確認できます。
# 最新10件の結果を表示
$ pahcer list
オプションを指定することで、表示件数を変更することもできます。
# 最新5件の結果を表示
$ pahcer list -n 5
# 全ての結果を表示
$ pahcer list -a
Optunaとの連携によるパラメータ最適化も可能です。詳細は ./optuna-sample/README.md をご参照ください。
pahcerの実行コマンド一覧です。
pahcer initpahcerの初期設定を行います。
$ pahcer init [OPTIONS] -p <PROBLEM_NAME> -o <OBJECTIVE> -l <LANGAGE>
-p, --problem
-o, --objective
max : スコアが大きい方が良いmin : スコアが小さい方が良い-l, --language
cpp : C++python : Pythonrust : Rustgo : Go-i, --interactive
以下でヘルプが出せます。
$ pahcer init -h
$ pahcer init -p ahc030 -o min -l python -i
pahcer runテストケースを並列実行します。
$ pahcer run [OPTIONS]
-c, --comment
-t, --tag
pahcer/{コミットハッシュの最初8桁}形式で自動生成されます(例: pahcer/a3f9c1b2)。pahcer/<tag-name> という形式で作成されます(例: pahcer run -t my-solution → pahcer/my-solution)。pahcer prune で一括削除可能です。-j, --json
--shuffle
--setting-file
./pahcer_config.toml )のパスをデフォルトから変更します。--freeze-best-scores
--no-result-file
--no-compile
以下でヘルプが出せます。
$ pahcer init -h
$ pahcer run -c 焼きなまし高速化バージョン -j --shuffle --setting-file settings.toml --freeze-best-scores --no-result-file
pahcer list過去のテスト実行結果を表形式で一覧表示します。
$ pahcer list [OPTIONS]
実行結果のJSONファイルを読み込み、以下の情報を含むテーブルを表示します。
Time : テスト実行日時AC/All : Accept数/全テストケース数Avg Score : 平均スコアAvg Rel. : 平均相対スコア(最新のベストスコアを元に再計算されます)Max Time : 最大実行時間Tag : Gitタグ名(pahcer/プレフィックスは除去して表示)Comment : テスト実行時のコメント-n, --number
-a, --all
--setting-file
./pahcer_config.toml )のパスをデフォルトから変更します。以下でヘルプが出せます。
$ pahcer list -h
# 最新10件の結果を表示
$ pahcer list
# 最新5件の結果を表示
$ pahcer list -n 5
# 全ての結果を表示
$ pahcer list -a
pahcer prunepahcerが作成したGitタグを全て削除します。
$ pahcer prune
このコマンドは pahcer/* パターンにマッチするタグを全て削除します。手動で作成したタグには影響しません。
$ pahcer prune
Deleted tag: pahcer/4e7d8a90
Deleted tag: pahcer/f2a1b3c4
Deleted tag: pahcer/my-solution
設定ファイル ./pahcer_config.toml の内容を説明します。
general全般に関する設定です。
version設定ファイルのバージョンです。
problem問題固有の項目に関する設定です。
problem_name問題の名前(コンテスト名)です。
objectiveスコアが大きい方が良いか小さい方が良いかを指定します。以下のいずれかが指定可能です。
Max : スコアが大きい方が良いMin : スコアが小さい方が良いscore_regexスコアの抽出を行う正規表現です。
pahcerは各実行ステップにおける標準出力・標準エラー出力の内容を全て読み込み、 score_regex に一致した行からスコアを抽出します。そのような行が複数存在する場合は最も最後の行が優先されます(同実行ステップで標準出力・標準エラー出力両方に存在する場合は標準エラー出力が優先)。なお、一致する行が1つも存在しなかった場合は WA となります。
testテストケースの実行に関する設定です。
start_seedテストケースの開始seed値を指定します。
end_seedテストケースの終了seed値を指定します。 start_seed より大きい値でなければなりません。
[start_seed, end_seed) の半開区間が実行されるため、 end_seed は区間に含まれない ことに注意してください。
threads並列実行数を指定します。 0 を指定すると実行しているマシンの物理CPU数と同じ値となります。
out_dir全ケース終了後の結果ファイルの出力先ディレクトリを指定します。
compile_stepspahcer run を実行したときに一度だけ行われるコンパイル実行のステップです。複数設定することが可能で、その場合は上から順に逐次実行されます。
programコンパイルステップで実行されるプログラム名です。
argsコンパイルステップでプログラムに渡されるコマンドライン引数です。配列の形で渡します。
current_dirコンパイルステップの実行ディレクトリです。省略が可能で、省略した場合はカレントディレクトリとなります。
test_stepsテストケース実行時に行われるステップです。複数設定することが可能で、その場合は上から順に逐次実行されます。
なお、 args, stdin, stdout, stderr にはプレースホルダーが設定可能で、以下のように展開されます。
{SEED} : シード値(例: {SEED}.txt -> 1.txt){SEED04} : 0で4桁にパディングされたシード値(例: {SEED04}.txt -> 0001.txt)programテストステップで実行されるプログラム名です。
argsテストステップでプログラムに渡されるコマンドライン引数です。配列の形で渡します。
stdinテストステップでプログラムに渡される標準入力の内容が記録されたファイルを指定します。省略が可能で、省略した場合は標準入力に何も渡しません。
stdoutテストステップでプログラムから出力される標準出力の記録先ファイルを指定します。省略が可能で、省略した場合はファイル出力を行いません(スコア抽出にのみ使用されます)。
stderrテストステップでプログラムから出力される標準エラー出力の記録先ファイルを指定します。省略が可能で、省略した場合はファイル出力を行いません(スコア抽出にのみ使用されます)。
measure_time実行時間の計測対象か否かをbool値で指定します。 true が指定されたテストステップの実行時間の合計値が最終的に出力されます。
MITまたはApache-2.0のデュアルライセンスです。
pahcer をよく pacher とtypoします。必要に応じてエイリアスを設定するとよいです。