Lewati ke konten
DispatchAtlas
Cari

Menerbitkan karya Anda

DispatchAtlas otomatis-menerbitkan dari registry-nya langsung ke bagian situs web yang khusus dan dapat-dilihat: solver terdaftar muncul di Perekomendasi solver, subset benchmark yang diekspor menjadi bundel yang dapat-diunduh, dan hasil kampanye yang diekspor dirender oleh Penjelajah hasil. Setiap langkah memakai API publik terpasang -- tanpa perkakas hanya-repositori -- sehingga solver, benchmark, dan hasil Anda sendiri mencapai permukaan yang sama dengan yang dikapalkan. Yang dapat-dijalankan examples/publish_to_portal.py menempuh seluruh jalur ujung-ke-ujung dalam kurang dari satu detik.

Menerbitkan sebuah solver

Solver membawa metadata registry (sebuah profil). Daftarkan ke sebuah SolverRegistry, dan profil yang dikatalogkan-publik masuk ke katalog publik yang dirender portal:

from dispatchatlas.solve import SolverRegistry
 
catalog = SolverRegistry()
catalog.register_instance(your_solver)
published = {metadata.solver_id for metadata in catalog.public_catalog()}

Bundel solver turunan-registry yang disajikan situs web membawa setiap solver yang dikatalogkan, sehingga solver publik terdaftar mencapai Perekomendasi solver tanpa langkah tambahan.

Menerbitkan subset benchmark

Proyeksikan katalog mana pun menjadi bundel yang portabel dan mendeskripsikan-diri serta tabel CSV datar -- artefak persis yang disajikan pusat unduhan portal kepada pengunjung:

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)  # arsip yang dapat-diunduh
csv_text = catalog_subset_to_csv(records)  # tabel datar dari baris yang sama

Keduanya adalah artefak yang dapat-diunduh yang ditawarkan pusat Unduhan, dan katalog kontinum penuh sudah dapat-dijelajahi di Katalog benchmark.

build_continuum_catalog mewujudkan pratinjau tiga-sumber-daya yang cepat -- ideal untuk penyaringan portal dan lirikan cepat. Untuk benchmark referensi skala-penelitian, tukar dengan build_continuum_full_catalog, yang membangun setiap keluarga pada skala deklarasinya -- kumpulan sumber daya dan jumlah tugas lebih besar, di mana struktur ko-alokasi, kontensi, dan penempatan benar-benar terwujud -- dan mengalir melalui permukaan ekspor yang sama catalog_metadata_for_sets dan 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)  # skala-penelitian

Menerbitkan dari paket yang dapat dipasang

Bagian-bagian di atas mendaftarkan sebuah solver atau generator dari dalam skrip Anda sendiri. Untuk ekstensi yang dapat dipakai ulang —yang dipasang oleh proyek lain dan langsung terambil tanpa kode perekat— DispatchAtlas membaca titik masuk pemaketan, sehingga sebuah distribusi yang terpasang menyumbang solver dan generator benchmark tanpa menyentuh registry bawaan. Deklarasikan sebuah penyedia tanpa argumen di bawah grup titik masuk yang sesuai dalam pyproject.toml paket Anda:

[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"

Setiap target adalah objek yang dapat dipanggil yang tidak menerima argumen dan mengembalikan sebuah iterable —berupa ProfiledSolver untuk grup solver, BenchmarkGenerator untuk grup generator— dengan bentuk yang sama seperti yang dikembalikan penyedia bawaan. Penemuan tidak pernah otomatis, sehingga katalog bawaan tetap deterministik; pemanggil ikut serta secara eksplisit:

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 dari solver pihak ketiga yang terdaftar
 
generators = GeneratorRegistry()
discover_plugin_generators(generators)  # id dari generator pihak ketiga yang terdaftar

Sebuah solver yang ditemukan mengalir melalui jalur register_instance yang sama seperti di atas, sehingga solver plugin yang terkatalog secara publik mencapai Perekomendasi solver tanpa langkah tambahan. Penemuan bersifat fail-closed terhadap bukti: solver plugin yang tidak mendeklarasikan referensi sitasi, atau generator yang mengklaim status berdukungan-sitasi tanpa menyebut sumber, ditolak sebelum masuk ke registry —ekstensi pihak ketiga membawa invarian berdukungan-sitasi yang sama seperti katalog bawaan.

Menerbitkan hasil

Jalankan sebuah kampanye, lalu ekspor melalui kebijakan pengungkapan ke bundel portal-results yang dirender penjelajah hasil situs:

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 menulis portal-results.json ber-hash-konten yang disaring ke tingkat pengungkapan yang dideklarasikan -- bundel persis yang dirender Penjelajah hasil, sehingga ekspor itu adalah hasil Anda yang diterbitkan ke portal. Penyaring pengungkapan bersifat fail-closed: hasil yang tidak diizinkan tingkat tidak pernah diterbitkan, sehingga sebuah studi tidak dapat terlalu-berbagi secara tak sengaja.

Lihat ujung-ke-ujung

uv run python examples/publish_to_portal.py

Contoh tersebut mendaftarkan sebuah solver, mengonfirmasi ia menumpang bundel solver portal, mengekspor subset benchmark ke sebuah bundel dan sebuah CSV, dan menjalankan sebuah kampanye yang hasilnya diekspor dalam format penjelajah-hasil portal -- seluruh jalur penerbitan, dibaca langsung dari API publik terpasang dan bundel portal terkomit yang dikapalkan situs.