Skip to content

Repository files navigation

Parameter-estimation paper snapshots

A vendored, citable archive of the exact computational environment that generated the data for our IEEE submission "Making Algebraic Parameter Estimation Practical for Noisy Data via Gaussian Process Regression" (Bassik, Demin, Ovchinnikov 2026), and a harness for producing successor snapshots when we re-run the benchmark with newer code or new ODE systems.

What is in here

  • julia/: vendored source for the five Julia packages that constitute the paper-era environment (ODEParameterEstimation and four dependencies that aren't in the Julia General registry or that the paper relied on at specific patched commits).
  • julia/env/: the Project.toml and Manifest.toml that resolve the benchmark environment under Julia 1.11.5.
  • pipeline/: the Python wrapper (generate_data.py, generate_scripts.py, estimate.py), the Julia/Mustache estimation template, and the configuration files (config.json, systems.json) that drive the benchmark.
  • python/requirements.txt: the paper-era pin of the Python wrapper's dependencies.
  • data/source_csvs/: the two CSV files that the paper's dataset_package/combined_results_filtered.csv was assembled from.
  • data/per_experiment/: 2200 per-experiment directories across four variants. ODEPE side: 550 cells in odepe/ and 550 in odepe_polish/, each with script.jl, data.csv, result.csv. AMIGO2 side: 550 cells in amigo2_0_10/ (search bounds [0,10]) and 550 in amigo2_0_100/ (bounds [0,100]), each with script.m, data.csv, objf_nl2sol.m, and either result.csv (parameters extracted from AMIGO2's Estimated global parameters section) or no_result_in_paper.txt (138 cells where AMIGO2 hit a known MATLAB postprocessing crash; preserved as paper-era failures).
  • bin/gcc: 3-line GCC wrapper required for AMIGO2 MEX compilation on modern Linux (GCC 14+). See docs/AMIGO2_SETUP.md.
  • SNAPSHOT.toml: a single TOML manifest declaring the version and upstream commit of every vendored component. The harness reads this.
  • setup.sh, reproduce_one.sh, reproduce_all.sh, expand_with_new_system.sh: the run scripts.
  • docs/RECIPE.md: a condensed reproducibility recipe (the long form lives in the paper repo's docs/reproducibility_audit.md).

How to use it

One-time setup

git clone https://github.com/orebas/parameter-estimation-snapshots
cd parameter-estimation-snapshots
./setup.sh

setup.sh:

  • Installs Julia 1.11.5 via juliaup if not already installed.
  • Builds a uv venv under python/.venv and installs python/requirements.txt.
  • Runs Pkg.instantiate() on julia/env/, which resolves the vendored path-dependencies and precompiles ~600 packages (around one minute on a warm cache, ten to thirty minutes from cold).

Reproducing one experiment

./reproduce_one.sh harmonic_0_0                              # ODEPE (default)
./reproduce_one.sh -v odepe_polish harmonic_0_0              # ODEPE with polish
./reproduce_one.sh -v amigo2_0_10 harmonic_0_0               # AMIGO2 (needs MATLAB)
./reproduce_one.sh -v amigo2_0_100 harmonic_0_0              # AMIGO2 wider bounds

For ODEPE variants: runs the paper-era preserved script.jl against the vendored Julia env, diffs the resulting result.csv against the paper's preserved result.csv. Verification passes when values agree to within roughly 1e-9 (residual gap from HomotopyContinuation's unseeded RNG, measured directly).

For AMIGO2 variants: runs the paper-era preserved script.m against your MATLAB + AMIGO2 install, with the snapshot's gcc wrapper for MEX compatibility. Verification tolerance defaults to 1e-2 because AMIGO2 is a stochastic global optimizer (eSS), not bit-exact. See docs/AMIGO2_SETUP.md for MATLAB / AMIGO2_PATH setup.

Wall-clock time ranges from ~5 minutes (harmonic) to ~30 minutes (heaviest crauste + biohydrogenation runs).

Reproducing the full benchmark

./reproduce_all.sh

Runs all 1100 experiments serially. Estimated wall-clock time: ~10 days single-core; substantially less if the script is invoked under a Slurm array job (template at pipeline/hpc/array_job_odepe.s).

Adding a new ODE system

./expand_with_new_system.sh path/to/new_systems.json

Re-runs the full pipeline (Python data generation + Julia estimation) under this snapshot's pinned environment, treating the user-provided systems.json as input. Output lands under data/per_experiment/ for inclusion in the next snapshot version. See docs/ADDING_A_SYSTEM.md for details.

Snapshot tags

tag created what it captures
v1.0 2026-05-01 The original IEEE-paper environment: Julia 1.11.5, ODEParameterEstimation@7f2b313, AMIGO2_R2025. Reproduces the paper's combined_results_filtered.csv ODEPE side bit-exactly (1e-9), AMIGO2 side within optimizer stochastic spread (1e-2).

Successor tags will be listed here as we cut them.

How to cite

If you use this archive, please cite both the paper and the specific snapshot tag's DOI (issued by Zenodo on each GitHub release). For the canonical paper data, cite v1.0.

License

GPL-3.0 (inherited from ODEParameterEstimation). See LICENSE and NOTICES.md for the full list of vendored components and their individual licenses.

About

Vendored, citable archive of the computational environment for the IEEE paper 'Making Algebraic Parameter Estimation Practical for Noisy Data via Gaussian Process Regression' (Bassik, Demin, Ovchinnikov 2026).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages