تخطٍّ إلى المحتوى
DispatchAtlas
بحث

البدء السريع

شغّل أول حملة جدولة لك في أمرَين. كلاهما قابل للنسخ واللصق، ويكتمل المسار بأكمله في ثوانٍ على نسخة جديدة، وكل نتيجة حتمية — تُعيد الطباعة الأرقام نفسها عند إعادة التشغيل.

أمران للوصول إلى أول تشغيل

# 1 — install the workspace (one time)
uv sync --all-extras --group dev
 
# 2 — build and run the bundled smoke campaign
uv run python experiments/scripts/run_smoke_pilot.py

يُسلسِل البرنامج النصي تهيئته إلى experiments/configs/smoke-pilot.json — وهي JSON نفسها التي تستهلكها واجهة سطر الأوامر dispatchatlas-lab --config — بحيث يُشغّل البرنامج النصي وأمثلة واجهة سطر الأوامر في دليل استكشاف الأخطاء الوصفة المتطابقة نفسها.

ينبغي أن ترى ملخّصاً قصيراً مثل هذا:

campaign_id: smoke-pilot
config: ...\experiments\configs\smoke-pilot.json
planned_runs: 4
estimated_wall_time_seconds: 2.0
completed_runs: 4
failed_attempts: 0

completed_runs: 4 مع failed_attempts: 0 يعني أنه نجح: عمل مُحَلِّلان، كلٌّ منهما على مثيلَي معيار، وأنتج كل تشغيل جدولاً صالحاً. أي نتيجة أخرى تشير إلى تثبيت غير مكتمل — راجع استكشاف الأخطاء.

🧩 مصطلحات الاستخدام الأول

يستخدم الملخّص أعلاه حفنة من مصطلحات المجال. تُبنى المجموعة بأكملها على هذه المصطلحات:

  • مثيل المعيار (benchmark instance) — مسألة جدولة واحدة مُولَّدة: مجموعة من المهام، والموارد التي تُنفّذها، والقيود بينها.
  • المُحَلِّل (solver) — خوارزمية تُسنِد المهام إلى الموارد عبر الزمن وتُعيد جدولاً.
  • الهدف (objective) — الكمية التي يُحسّنها المُحَلِّل. تستخدم الحملة التجريبية makespan: لحظة انتهاء آخر مهمة (الأقل أفضل).
  • الحملة (campaign) — دُفعة تُشغّل المُحَلِّلات المختارة عبر المعايير المختارة لعدد محدّد من التكرارات، مُسجّلةً كل تشغيل كدليل.
  • البذرة / الحتمية (seed / deterministic) — رقم ثابت يجعل كل اختيار عشوائي قابلاً للتكرار، بحيث تُنتج المدخلات نفسها دائماً الجدول نفسه.
  • الممكن (feasible) — جدول تُوضَع فيه كل مهمة، ولا يُحمَّل أي مورد فوق طاقته، وتُحترَم فيه كل تبعية.

🛠️ ابنِ عملية حلّ بنفسك

لبناء عملية حلّ واحدة في الكود بدلاً من تشغيل الحملة المُجمَّعة، احفظ هذا باسم quickstart.py في أي مكان داخل نسخة العمل وشغّله بـ uv run python quickstart.py:

from dispatchatlas.bench import smoke_benchmark_provider
from dispatchatlas.core import DisclosureLabel, TerminationPolicy, derive_seed
from dispatchatlas.solve import default_solver_registry
 
provider = smoke_benchmark_provider(root_seed=20260527)
problem = provider.get_problem(provider.list_problem_ids()[0])
 
registry = default_solver_registry()
solvers = registry.select(
    objective="makespan",
    disclosure_label=DisclosureLabel.CORE,
)
 
solver = registry.create(solvers[0].solver_id)
run = solver.solve(
    problem=problem,
    stop=TerminationPolicy(max_iterations=solvers[0].default_stop.max_iterations),
    seed=derive_seed(20260527, "docs.quickstart", 0),
)
 
print(run.result.feasible)

يطبع True: أنتج المُحَلِّل المُختار جدولاً ممكناً. تُحاكي الأجزاء الثلاثة المتحرّكة الحملة أعلاه — يُجسِّد smoke_benchmark_provider كتالوج المعايير الحتمي من بذرة واحدة، ويُرشِّح registry.select المُحَلِّلات إلى تلك التي تدعم هدف makespan عند مستوى الأدلة العام core، ويعمل solver.solve تحت معايير توقّف صريحة ببذرة مُشتقّة من إحداثيات ثابتة بحيث يُعاد التشغيل بشكل متطابق.

🧭 إلى أين تذهب بعد ذلك

  1. خُذ جولة إرشادية — تجوال مرويّ ومصغّر عبر مسار التوليد ← الحلّ ← التحليل ← الاستكشاف بأكمله، يبني على الحملة التجريبية التي شغّلتها للتو.
  2. اعمل خلال الدروس التعليمية — قارن أولاً بين مُحَلِّلين على مثيل معيار واحد، ثم شغّل حملة صغيرة واقرأ نتائجها.
  3. ارتقِ إلى محرّك الحملات ومساحة عمل الحملات القابلة للتكرار للتشغيلات المُؤشَّرة بنقاط فحص والقابلة للاستئناف.
  4. استكشف كيف تُشغّل البيانات الوصفية نفسها كتالوج المعايير، ومعاينة النتائج، ومُوصِّي المُحَلِّلات.