Zum Inhalt springen
DispatchAtlas
Suchen

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 Zeilen

Beide 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ßstab

Aus 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 Drittanbietern

Ein 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.py

Das 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.