Quick Start
Run your first DispatchAtlas scheduling campaign in two copy-paste commands — instantiate a smoke benchmark, run baseline solvers, and inspect the results.
Run your first scheduling campaign in two commands. Both are copy-paste, the whole path finishes in seconds on a fresh clone, and every result is deterministic — re-running prints the same numbers.
⚡ Two Commands To A First Run
# 1 — install the workspace (one time)
uv sync --all-extras --group dev
# 2 — build and run the bundled smoke campaign
uv run python experiments/scripts/run_smoke_pilot.pyThe script serializes its configuration to
experiments/configs/smoke-pilot.json — the same JSON the dispatchatlas-lab
subcommands (validate, run) consume via --config — so the script and the
CLI examples in the troubleshooting guide run the identical
recipe.
You should see a short summary like this:
campaign_id: smoke-pilot
config: ...\experiments\configs\smoke-pilot.json
planned_runs: 4
estimated_wall_time_seconds: 2.0
completed_runs: 4
failed_attempts: 0completed_runs: 4 with failed_attempts: 0 means it worked: two solvers
each ran against two benchmark instances, and every run produced a valid
schedule. Any other result points at an incomplete install — see
troubleshooting.
🧩 First-Use Terms
The summary above uses a handful of domain terms. The whole toolkit is built on these:
- Benchmark instance — one generated scheduling problem: a set of tasks, the resources that run them (a task may demand several at once), and the constraints between them.
- Solver — an algorithm that assigns tasks to resources over time and returns a schedule.
- Objective — the quantity a solver optimizes. The smoke campaign uses makespan: the moment the last task finishes (lower is better).
- Campaign — a batch that runs chosen solvers across chosen benchmarks for a set number of repeats, recording every run as evidence.
- Seed / deterministic — a fixed number that makes every random choice reproducible, so the same inputs always yield the same schedule.
- Feasible — a schedule where every task is placed, no resource is over-committed, and every dependency is respected.
🛠️ Build A Solve Yourself
To construct a single solve in code rather than running the bundled campaign,
save this as quickstart.py anywhere inside the checkout and run it with
uv run python quickstart.py:
from dispatchatlas.bench import smoke_benchmark_provider
from dispatchatlas.core import DisclosureLabel, TerminationPolicy, derive_seed
from dispatchatlas.solve import default_solver_registry
provider = smoke_benchmark_provider(root_seed=20260527)
problem = provider.get_problem(provider.list_problem_ids()[0])
registry = default_solver_registry()
solvers = registry.select(
objective="makespan",
disclosure_label=DisclosureLabel.CORE,
)
solver = registry.create(solvers[0].solver_id)
run = solver.solve(
problem=problem,
stop=TerminationPolicy(max_iterations=solvers[0].default_stop.max_iterations),
seed=derive_seed(20260527, "docs.quickstart", 0),
)
print(run.result.feasible)It prints True: the selected solver produced a feasible schedule. The three
moving parts mirror the campaign above — smoke_benchmark_provider
materializes the deterministic benchmark catalog from one seed,
registry.select filters solvers to those that support the makespan
objective at the public core evidence tier, and solver.solve runs under
explicit stop criteria with a seed derived from stable coordinates so the run
replays identically.
🧭 Where To Go Next
- Take the guided tour — a narrated walk of the whole generate → solve → analyze → explore arc that builds on the smoke campaign you just ran.
- Work through the tutorials — first compare two solvers on one benchmark instance, then run a small campaign and read its results.
- Graduate to the campaign engine and the reproducible campaigns workspace for checkpointed, resumable runs.
- Explore how the same metadata drives the benchmark catalog, result preview, and solver recommender.