This repository generates and analyzes temporal-game benchmark suites that isolate specific growth facets:
- Edge density growth
- Horizon (time bound) growth
- Constraint complexity growth
- Periodicity hardness growth
The workflow is:
- Generate paired game corpora for both solvers (
.dotfor Temporis,.tgfor Ontime). - Benchmark both solvers on the same generated instances.
- Consolidate solver outputs into one JSON file.
- Summarize performance by axis and level (success rate, timeout rate, mean/median/p90 time).
This lets you measure how runtime and robustness change as one selected game property grows.
generate_growth_sweeps.py: controlled corpus generator for all 4 facets (or selected axes)analyze_growth_sweeps.py: post-processing grouped bysolver -> axis -> level
# C++ Build Tools
sudo apt install cmake build-essential
# Python 3 with plotting libraries
sudo apt install python3 python3-pip
pip3 install matplotlib numpy
# Rust (for Ontime)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source .cargo/env
# Boost Libraries (for Temporis/GGG)
sudo apt install libboost-all-dev# Clone required repositories
git clone https://github.com/gamegraphgym/ggg.git
git clone https://github.com/petejaustin/ontime.git
git clone https://github.com/petejaustin/temporis.git
git clone https://github.com/petejaustin/case-study-extensioncd ggg
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DTOOLS_ALL=ON
cmake --build build -j$(nproc)cd temporis
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Verify builds
ls temporis/build/temporis_solvers/temporis
ls temporis/build/temporis_solvers/temporis_static_expansioncd ontime
cargo build --release
# Verify build
ls ontime/target/release/ontime- Built solver binaries:
temporisand/ortemporis_static_expansionontime
- Existing benchmark helpers from the parent case-study directory:
../benchmark_ontime.sh../consolidate_results.py../ggg/extra/scripts/benchmark.sh
If your folder layout differs, update the command paths below.
The commands below use the ~500-game horizon example corpus already configured in this repo.
Run from this repository directory:
python3 generate_growth_sweeps.py \
--output-dir examples/horizon_500 \
--axes horizon \
--replicates 83 \
--vertices 300 \
--manifest-name horizon_manifest.json \
--cleanExpected total: 6 horizon levels × 83 replicates = 498 paired games.
bash ../ggg/extra/scripts/benchmark.sh \
examples/horizon_500/temporis_games \
/ABSOLUTE/PATH/TO/temporis/build/temporis_solvers \
--time 300 \
-o examples/horizon_500/temporis_results.json \
--solvers temporis,temporis_static_expansionAdjust solver list as needed.
bash ../benchmark_ontime.sh \
examples/horizon_500/ontime_games \
/ABSOLUTE/PATH/TO/ontime/target/release/ontime \
300 \
examples/horizon_500/ontime_results.jsonConsolidate all solver outputs:
python3 ../consolidate_results.py \
examples/horizon_500/temporis_results.json \
examples/horizon_500/ontime_results.json \
-o examples/horizon_500/full_results.jsonThen generate growth summary:
python3 analyze_growth_sweeps.py \
examples/horizon_500/full_results.json \
examples/horizon_500/horizon_manifest.json \
-o examples/horizon_500/horizon_summary.jsonexamples/horizon_500/temporis_results.jsonexamples/horizon_500/ontime_results.jsonexamples/horizon_500/full_results.jsonexamples/horizon_500/horizon_summary.json
horizon_summary.json contains grouped metrics per solver and horizon level, including:
success_ratetimeout_ratemean_timemedian_timep90_time
Change --axes to one of:
edge_densityhorizonconstraint_complexityperiodicity_hardness
or generate all four by omitting --axes.