发布你的工作
DispatchAtlas 从其注册表自动发布,直达网站专门的可视区域:一个已注册的求解器出现在
求解器推荐器,一个导出的基准子集成为一个
可下载包,而一个导出的活动结果由
结果浏览器 渲染。每一步都使用已安装的公开 API——无任何仅-仓库
工具——因此你自己的求解器、基准与结果抵达与已发行者相同的界面。可运行的
examples/publish_to_portal.py
在不到一秒内端到端走完整条路径。
发布一个求解器
一个求解器携带注册表元数据(一个 profile)。将其注册进一个 SolverRegistry,一个
公开-编目的 profile 便进入门户渲染的公开目录:
from dispatchatlas.solve import SolverRegistry
catalog = SolverRegistry()
catalog.register_instance(your_solver)
published = {metadata.solver_id for metadata in catalog.public_catalog()}网站所服务的注册表-派生求解器包携带每个已编目求解器,因此一个已注册的公开求解器无需额外 步骤即抵达求解器推荐器。
发布一个基准子集
将任意目录投射为一个可移植、自描述的包与一张扁平 CSV 表——即门户下载中心向访客提供的确切 产物:
from dispatchatlas.bench import (
build_continuum_catalog,
catalog_metadata_for_sets,
catalog_subset_to_bundle,
catalog_subset_to_csv,
)
records = catalog_metadata_for_sets(build_continuum_catalog(root_seed=23))
bundle_bytes = catalog_subset_to_bundle(records) # 一个可下载归档
csv_text = catalog_subset_to_csv(records) # 相同行的一张扁平表两者都是下载中心提供的可下载产物,且完整的连续统目录已可在 基准目录中浏览。
build_continuum_catalog 物化一个快速的三-资源预览——对门户筛选与快速一瞥理想。对于
研究-规模参考基准,改用 build_continuum_full_catalog,它以每个族声明的规模构建——一个更大
的资源池与任务计数,在那里协同分配、争用与放置结构真正显现——并流经同一
catalog_metadata_for_sets 与 catalog_subset_to_bundle 导出界面:
from dispatchatlas.bench import build_continuum_full_catalog
research_records = catalog_metadata_for_sets(
build_continuum_full_catalog(root_seed=23, problem_count_per_family=4)
)
research_bundle = catalog_subset_to_bundle(research_records) # 研究-规模从可安装的包发布
上面各节是在你自己的脚本里注册一个求解器或生成器。对于可复用的扩展——另一个项目安装后即可自动获取、无需任何粘合代码——DispatchAtlas 会读取打包入口点,因此一个已安装的分发包无需改动内置注册表即可贡献求解器和基准生成器。在你的包的 pyproject.toml 中,于相应的入口点组下声明一个零参数的提供者:
[project.entry-points."dispatchatlas.solvers"]
my-solvers = "my_package.providers:scheduling_solvers"
[project.entry-points."dispatchatlas.benchmark_generators"]
my-generators = "my_package.providers:scheduling_generators"每个目标都是一个不接受参数、返回可迭代对象的可调用对象——求解器组返回 ProfiledSolver,生成器组返回 BenchmarkGenerator——与随附的提供者返回的形状相同。发现绝不自动进行,因此捆绑的目录保持确定性;调用方显式选择加入:
from dispatchatlas.bench import GeneratorRegistry, discover_plugin_generators
from dispatchatlas.solve import default_solver_registry, discover_plugin_solvers
solvers = default_solver_registry()
discover_plugin_solvers(solvers) # 已注册的第三方求解器的 id
generators = GeneratorRegistry()
discover_plugin_generators(generators) # 已注册的第三方生成器的 id被发现的求解器会经过与上面相同的 register_instance 路径,因此一个公开编目的插件求解器无需额外步骤即可到达求解器推荐器。发现对证据是 fail-closed 的:未声明引用文献的插件求解器,或声称具备引用支撑却未引用任何来源的生成器,会在进入注册表之前被拒绝——第三方扩展承载着与随附目录相同的引用支撑不变量。
发布结果
运行一个活动,然后将其通过一项披露策略导出到站点结果浏览器所渲染的 portal-results 包:
from dispatchatlas.analytica import (
AnalysisConfig,
EvidenceTier,
default_disclosure_policy,
load_result_dataset,
write_portal_dataset,
)
dataset = load_result_dataset(workspace, "your-campaign-id")
write_portal_dataset(
dataset,
default_disclosure_policy(EvidenceTier.CORE),
target_dir,
AnalysisConfig(objective_name="makespan"),
)write_portal_dataset 写出一个内容-哈希的 portal-results.json,过滤到所声明的披露层——即
结果浏览器 渲染的确切包,因此该导出即是你发布到门户的结果。披露
过滤器是 fail-closed:该层不允许的结果绝不发布,因此一项研究无法意外过度-共享。
端到端一观
uv run python examples/publish_to_portal.py该示例注册一个求解器,确认其搭乘门户求解器包,将一个基准子集导出为一个包与一个 CSV,并 运行一个活动,其结果以门户结果-浏览器格式导出——整条发布路径,直接从已安装的公开 API 与 站点发行的已提交门户包读取。