跳到内容
DispatchAtlas
搜索

快速开始

只需两条命令即可运行你的第一个调度实验。两条都可直接复制粘贴, 在全新克隆上整条路径几秒内即可完成,而且每个结果都是确定性的 —— 重新运行会打印相同的数字。

两条命令完成首次运行

# 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: 0

completed_runs: 4failed_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 在显式的停止条件下运行,种子由稳定坐标派生而来,因此该运行 完全相同地重放。

🧭 下一步去哪里

  1. 跟随引导教程 —— 在你刚运行的 冒烟实验之上,带讲解地走一遍从生成 → 求解 → 分析 → 探索的完整流程。
  2. 通读教程 —— 先在一个基准实例上比较两个求解器, 然后运行一个小型实验并阅读其结果。
  3. 进阶到实验引擎可复现实验工作区,进行带检查点、 可恢复的运行。
  4. 探索同样的元数据如何驱动 基准目录结果预览求解器推荐器