본문으로 건너뛰기
DispatchAtlas
검색

작업 게시하기

DispatchAtlas 는 자신의 레지스트리에서 웹사이트의 전용 열람 가능 섹션으로 곧장 자동-게시합니다: 등록된 솔버는 솔버 추천기에 나타나고, 내보낸 벤치마크 부분집합은 다운로드 가능 번들이 되며, 내보낸 캠페인 결과는 결과 탐색기에 의해 렌더링됩니다. 각 단계는 설치된 공개 API 를 사용합니다 -- 저장소-전용 도구 없음 -- 그래서 당신 자신의 솔버, 벤치마크, 결과가 출하된 것들과 같은 표면에 도달합니다. 실행 가능한 examples/publish_to_portal.py 는 전체 경로를 1 초 미만에 종단간 걷습니다.

솔버 게시

솔버는 레지스트리 메타데이터(프로파일)를 담습니다. 그것을 SolverRegistry 에 등록하면, 공개-카탈로그화된 프로파일이 포털이 렌더링하는 공개 카탈로그에 들어갑니다:

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_setscatalog_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 와 사이트가 출하하는 커밋된 포털 번들에서 곧장 읽어냅니다.