快速开始
只需两条命令即可运行你的第一个调度实验。两条都可直接复制粘贴, 在全新克隆上整条路径几秒内即可完成,而且每个结果都是确定性的 —— 重新运行会打印相同的数字。
⚡ 两条命令完成首次运行
# 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.py该脚本会把它的配置序列化到
experiments/configs/smoke-pilot.json —— 与 dispatchatlas-lab --config
命令行工具读取的是同一份 JSON —— 因此该脚本与
故障排查指南中的命令行示例运行的是完全相同的配方。
你应当看到类似这样的简短摘要:
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 且 failed_attempts: 0 表示成功了:两个求解器
各自针对两个基准实例运行,每次运行都产生了有效的调度。任何其他结果
都说明安装不完整 —— 参见
故障排查。
🧩 首次使用的术语
上面的摘要用到了少数几个领域术语。整个工具集都建立在这些术语之上:
- 基准实例(Benchmark instance) —— 一个生成的调度问题:一组任务、 运行它们的资源,以及它们之间的约束。
- 求解器(Solver) —— 一种算法,它随时间把任务分配给资源, 并返回一个调度。
- 目标(Objective) —— 求解器所优化的量。冒烟实验使用 makespan(最大完工时间):最后一个任务完成的时刻(越小越好)。
- 实验(Campaign) —— 一个批次,按设定的重复次数让选定的求解器 在选定的基准上运行,并把每次运行记录为证据。
- 种子 / 确定性(Seed / deterministic) —— 一个固定数字,使每个随机 选择都可复现,因此相同的输入总是产生相同的调度。
- 可行(Feasible) —— 一个调度,其中每个任务都被放置、没有资源被 超额占用,且每个依赖关系都得到尊重。
🛠️ 自己构建一次求解
若要在代码中构造单次求解,而不是运行捆绑的实验,把下面的内容
保存为检出目录内任意位置的 quickstart.py,并用
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)它打印 True:所选求解器产生了一个可行调度。这三个活动部件
与上面的实验相互对应 —— smoke_benchmark_provider 从一个种子
物化确定性的基准目录,registry.select 把求解器过滤为那些在公开的
core 证据层级上支持 makespan 目标的求解器,而 solver.solve
在显式的停止条件下运行,种子由稳定坐标派生而来,因此该运行
完全相同地重放。