GENCO on datakit PF (paper §5.4.2)
GENCO checkpoints used for the residual-vs-grid-size figure of GENCO (fig:gridsize_vs_residuals_pf).
Base, Small, and Tiny (hidden size 48 / 24 / 12) through GOC 500, three seeds (0, 1, 42). GOC 2000 and GOC 10000 are Small and Tiny only: seeds 0 and 42 on GOC 2000, seeds 0 and 1 on GOC 10000.
Files
{case14,case30,case57,case118}_ieee/{base,small,tiny}/seed{0,1,42}/
best_model_state_dict.pt
normalizer_stats.pt
metrics.csv
<network>_<size>_seed<seed>.yaml
case500_goc/{base,small,tiny}/seed{0,1,42}/
best_model_state_dict.pt
normalizer_stats.pt
metrics.csv
<network>_<size>_seed<seed>.yaml
case2000_goc/{small,tiny}/seed{0,42}/
best_model_state_dict.pt
normalizer_stats.pt
metrics.csv
<network>_<size>_seed<seed>.yaml
case10000_goc/{small,tiny}/seed{0,1}/
best_model_state_dict.pt
last.pt
normalizer_stats.pt
metrics.csv
<network>_<size>_seed<seed>.yaml
mlflow/eval/ # grids through GOC 500
mlflow/train/ # GOC 2000 and GOC 10000
best_model_state_dict.pt is the best-validation state dict. Grids through GOC 500 and GOC 2000 were scored on that file. GOC 10000 was scored on last.pt, the last-epoch weights. normalizer_stats.pt is required by evaluate. The training YAML is in the same folder. The same files are on GitHub: scripts/datakit_pf/configs.
For grids through GOC 500, the figure uses the eval-run test metrics under mlflow/eval/. For GOC 2000 and GOC 10000 it uses the training-run test metrics under mlflow/train/: those runs restored the best checkpoint before test(). Weights stay next to normalizer_stats.pt, not inside mlflow/.
In scripts/datakit_pf/results/pf_eval_combined_eval_metrics.csv, seed1 / seed2 / seed3 for grids through GOC 500 are these folders' seeds 0 / 1 / 42.
Install
The paper results were obtained with genco-paper-repro. We only guarantee the same numbers on this branch, because main is under active development. Clone it and install from source:
git clone --branch genco-paper-repro https://github.com/gridfm/gridfm-graphkit.git
cd gridfm-graphkit
python -m venv venv && source venv/bin/activate
pip install -e .
TORCH_CUDA_VERSION=$(python -c "import torch; print(torch.__version__ + ('+cpu' if torch.version.cuda is None else ''))")
pip install torch-scatter -f https://data.pyg.org/whl/torch-${TORCH_CUDA_VERSION}.html
Data
Converted datakit PF parquet (already public). Graphkit loads {data_path}/{network}/raw/*.parquet.
| Grid | Dataset | network folder |
|---|---|---|
| IEEE 14 | gridfm/pf_small_case14_ieee | case14_ieee |
| IEEE 30 | gridfm/pf_small_case30_ieee | case30_ieee |
| IEEE 57 | gridfm/pf_small_case57_ieee | case57_ieee |
| IEEE 118 | gridfm/pf_small_case118_ieee | case118_ieee |
| GOC 500 | gridfm/pf_small_case500_goc | case500_goc |
| GOC 2000 | gridfm/pf_small_case2000_goc | case2000_goc |
| GOC 10000 | gridfm/pf_small_case10000_goc | case10000_goc |
mkdir -p data/case118_ieee/raw
hf download gridfm/pf_small_case118_ieee --repo-type dataset --local-dir data/case118_ieee/raw
Evaluate
From the graphkit repo root. Same command for every grid; only the config and the checkpoint folder change.
hf download gridfm/genco-pf-datakit --include "case118_ieee/base/seed0/**" --local-dir genco-pf-datakit
gridfm_graphkit evaluate \
--config scripts/datakit_pf/configs/case118_ieee_base_seed0.yaml \
--data_path data \
--model_path genco-pf-datakit/case118_ieee/base/seed0/best_model_state_dict.pt \
--normalizer_stats genco-pf-datakit/case118_ieee/base/seed0/normalizer_stats.pt
For GOC 10000, pass last.pt instead of best_model_state_dict.pt.
Full commands: GENCO §5.4.2.