Deine Arbeit veröffentlichen
DispatchAtlas veröffentlicht automatisch aus seinen Registries direkt in die dedizierten,
sichtbaren Abschnitte der Website: ein registrierter Solver erscheint im
Solver-Empfehler, eine exportierte Benchmark-Teilmenge
wird ein herunterladbares Paket, und ein exportiertes
Kampagnen-Ergebnis wird vom Ergebnis-Explorer gerendert. Jeder
Schritt nutzt die installierte öffentliche API -- kein nur-Repository-Tooling -- sodass
deine eigenen Solver, Benchmarks, und Ergebnisse dieselben Oberflächen erreichen wie die
ausgelieferten. Das ausführbare
examples/publish_to_portal.py
durchläuft den ganzen Pfad Ende-zu-Ende in unter einer Sekunde.
Einen Solver veröffentlichen
Ein Solver trägt Registry-Metadaten (ein Profil). Registriere ihn in einer
SolverRegistry, und ein öffentlich-katalogisiertes Profil tritt in den öffentlichen
Katalog ein, den das Portal rendert:
from dispatchatlas.solve import SolverRegistry
catalog = SolverRegistry()
catalog.register_instance(your_solver)
published = {metadata.solver_id for metadata in catalog.public_catalog()}Das registry-abgeleitete Solver-Paket, das die Website serviert, trägt jeden katalogisierten Solver, sodass ein registrierter öffentlicher Solver den Solver-Empfehler ohne Extra-Schritt erreicht.
Eine Benchmark-Teilmenge veröffentlichen
Projiziere jeden Katalog in ein portables, selbstbeschreibendes Paket und eine flache CSV-Tabelle -- die exakten Artefakte, die das Download-Center des Portals einem Besucher serviert:
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) # ein herunterladbares Archiv
csv_text = catalog_subset_to_csv(records) # eine flache Tabelle derselben ZeilenBeide sind die herunterladbaren Artefakte, die das Downloads-Center anbietet, und der vollständige Kontinuum-Katalog ist bereits im Benchmark-Katalog durchstöberbar.
build_continuum_catalog materialisiert eine schnelle Drei-Ressourcen-Vorschau -- ideal
für die Portal-Filterung und einen schnellen Blick. Für Referenz-Benchmarks im
Forschungsmaßstab tausche build_continuum_full_catalog ein, das jede Familie in ihrem
deklarierten Maßstab baut -- ein größerer Ressourcenpool und Task-Anzahl, wo sich die
Co-Allokations-, Contention-, und Platzierungsstruktur wahrhaft manifestiert -- und durch
dieselbe Export-Oberfläche catalog_metadata_for_sets und catalog_subset_to_bundle
fließt:
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) # ForschungsmaßstabAus einem installierbaren Paket veröffentlichen
Die obigen Abschnitte registrieren einen Solver oder einen Generator aus deinem eigenen Skript heraus. Für eine wiederverwendbare Erweiterung – eine, die ein anderes Projekt installiert und ohne Klebecode aufgreift – liest DispatchAtlas die Packaging-Einstiegspunkte, sodass eine installierte Distribution Solver und Benchmark-Generatoren beiträgt, ohne die internen Registries zu berühren. Deklariere einen argumentlosen Anbieter unter der passenden Einstiegspunkt-Gruppe in der pyproject.toml deines Pakets:
[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"Jedes Ziel ist ein aufrufbares Objekt, das keine Argumente nimmt und ein Iterable zurückgibt – von ProfiledSolver für die Solver-Gruppe, von BenchmarkGenerator für die Generator-Gruppe – in derselben Form, die die mitgelieferten Anbieter zurückgeben. Die Erkennung erfolgt nie automatisch, daher bleiben die gebündelten Kataloge deterministisch; der Aufrufer entscheidet sich ausdrücklich dafür:
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) # IDs der registrierten Solver von Drittanbietern
generators = GeneratorRegistry()
discover_plugin_generators(generators) # IDs der registrierten Generatoren von DrittanbieternEin erkannter Solver durchläuft denselben register_instance-Pfad wie oben, sodass ein öffentlich katalogisierter Plugin-Solver ohne zusätzlichen Schritt den Solver-Empfehler erreicht. Die Erkennung ist bei der Evidenz fail-closed: ein Plugin-Solver, der keine Zitatreferenz angibt, oder ein Generator, der zitatgestützten Status behauptet, ohne eine Quelle zu nennen, wird abgewiesen, bevor er in eine Registry gelangt – eine Drittanbieter-Erweiterung trägt dieselbe zitatgestützte Invariante wie der mitgelieferte Katalog.
Ergebnisse veröffentlichen
Führe eine Kampagne aus, dann exportiere sie durch eine Offenlegungsrichtlinie zum portal-results-Paket, das der Ergebnis-Explorer der Site rendert:
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 schreibt ein inhalts-gehashtes portal-results.json, gefiltert auf
die deklarierte Offenlegungsstufe -- das exakte Paket, das der
Ergebnis-Explorer rendert, sodass der Export deine zum Portal
veröffentlichten Ergebnisse sind. Der Offenlegungsfilter ist fail-closed: ein Ergebnis,
das die Stufe nicht erlaubt, wird nie veröffentlicht, sodass eine Studie nicht versehentlich
über-teilen kann.
Sieh es Ende-zu-Ende
uv run python examples/publish_to_portal.pyDas Beispiel registriert einen Solver, bestätigt, dass er im Portal-Solver-Paket mitfährt, exportiert eine Benchmark-Teilmenge in ein Paket und ein CSV, und führt eine Kampagne aus, deren Ergebnisse im Format des Portal-Ergebnis-Explorers exportieren -- der ganze Veröffentlichungspfad, direkt aus der installierten öffentlichen API und den commiteten Portal-Paketen gelesen, die die Site ausliefert.