सामग्री पर जाएँ
DispatchAtlas
खोजें

अपना कार्य प्रकाशित करना

DispatchAtlas अपनी रजिस्ट्रियों से सीधे वेबसाइट के समर्पित, दृश्य अनुभागों में स्वतः-प्रकाशित करता है: एक पंजीकृत सॉल्वर सॉल्वर अनुशंसक में प्रकट होता है, एक निर्यातित बेंचमार्क उपसमुच्चय एक डाउनलोड-योग्य बंडल बनता है, और एक निर्यातित कैंपेन परिणाम परिणाम अन्वेषक द्वारा रेंडर होता है। प्रत्येक चरण स्थापित सार्वजनिक API का उपयोग करता है -- कोई केवल-रिपॉज़िटरी टूलिंग नहीं -- अतः आपके अपने सॉल्वर, बेंचमार्क, व परिणाम उन्हीं सतहों तक पहुँचते हैं जिन तक भेजे गए पहुँचते हैं। चलाने-योग्य examples/publish_to_portal.py पूरी राह को एक सेकंड से कम में आद्योपांत चलता है।

एक सॉल्वर प्रकाशित करें

एक सॉल्वर रजिस्ट्री मेटाडेटा (एक profile) वहन करता है। इसे एक SolverRegistry में पंजीकृत करें, और एक सार्वजनिक-सूचीबद्ध profile उस सार्वजनिक कैटलॉग में प्रवेश करता है जिसे पोर्टल रेंडर करता है:

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_setscatalog_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)  # पंजीकृत तृतीय-पक्ष सॉल्वरों की id
 
generators = GeneratorRegistry()
discover_plugin_generators(generators)  # पंजीकृत तृतीय-पक्ष जनरेटरों की id

एक खोजा गया सॉल्वर ऊपर वाले के समान ही 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 व साइट द्वारा भेजे प्रतिबद्ध पोर्टल बंडलों से सीधे पढ़ी गई।