Перейти к содержимому
DispatchAtlas
Поиск

Публикация вашей работы

DispatchAtlas авто-публикует из своих реестров прямо в выделенные, видимые секции веб-сайта: зарегистрированный решатель появляется в Рекомендателе решателей, экспортированное подмножество бенчмарков становится скачиваемым пакетом, а экспортированный результат кампании рендерится Обозревателем результатов. Каждый шаг использует установленный публичный API -- без инструментария только-для-репозитория -- так что ваши собственные решатели, бенчмарки, и результаты достигают тех же поверхностей, что и отгруженные. Исполняемый examples/publish_to_portal.py проходит весь путь от-края-до-края менее чем за секунду.

Опубликовать решатель

Решатель несёт метаданные реестра (профиль). Зарегистрируйте его в 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_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)  # идентификаторы зарегистрированных сторонних решателей
 
generators = GeneratorRegistry()
discover_plugin_generators(generators)  # идентификаторы зарегистрированных сторонних генераторов

Обнаруженный решатель проходит по тому же пути 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 и закоммиченных пакетов портала, которые отгружает сайт.