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 samaKeduanya 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-penelitianMenerbitkan 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 terdaftarSebuah 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.pyContoh 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.