Running Experiments
ExperimentGrid manages the cross-product of datasets × approaches × seeds. Jobs can run locally or be dispatched to an HPC cluster, and results are automatically resumed if a run is interrupted.
Setting up an ExperimentGrid
from SRToolkit.dataset import Feynman
from SRToolkit.approaches import EDHiE, ProGED
from SRToolkit.experiments import ExperimentGrid
bm = Feynman()
datasets = [bm.create_dataset(n) for n in bm.list_datasets(num_variables=2, verbose=False)[:4]]
# EDHiE adapts once per symbol space; map each dataset to a shared weights file
adapted_states = {
"EDHiE": {ds.dataset_name: "states/edhie_2v.pt" for ds in datasets}
}
grid = ExperimentGrid(
datasets=datasets,
approaches=[ProGED(), EDHiE()],
num_experiments=5,
results_dir="results/feynman_run",
initial_seed=0,
adapted_states=adapted_states,
)
Results land at results_dir/{dataset}/{approach}/exp_{seed}.json. Re-running never overwrites completed jobs.
Adapting models
For approaches with adaptation_scope="once" (like EDHiE), call adapt_if_missing() before creating jobs. It adapts each (approach, dataset) pair whose state file is absent and saves it to the path given in adapted_states:
Running jobs locally
Generating commands for parallel execution
For larger experiments, write a commands file and run it with GNU Parallel or a SLURM array:
Each line is a self-contained CLI call:
python -m SRToolkit.experiments run_job \
--dataset results/feynman_run/_datasets/I.12.1/I.12.1.json \
--approach results/feynman_run/_approaches/ProGED_config.json \
--info results/feynman_run/I.12.1/ProGED/exp_0/info_0.json
Run with GNU Parallel:
Or submit to SLURM:
Tracking progress
Prints a dataset × approach table showing done/total completed experiments: