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

حملات قابلة لإعادة الإنتاج

تحتفظ مساحة عمل experiments/ بكل ما تُنتِجه حملة وبكل ما يلزم لإعادة إنتاجها. الفصل صارم: الوصفات مُتعقَّبة، والمخرجات محلّية. تعيش تهيئات الحملات وسكربتات التشغيل في ضبط الإصدارات؛ ويبقى كل مخرج ثقيل — النسخ المرجعية المولَّدة، وسجلّات التشغيل، والسجلّات، ونقاط التفتيش، وحِزَم الأدلّة، ولقطة البيئة — على الجهاز الذي أنتجه، ويُعاد توليده عند الطلب من الوصفة.

🗂️ التخطيط

المسارمُتعقَّبيحتفظ بـ
configs/نعمتهيئات الحملة — الوصفة الكاملة: قائمة الحلّالات، وطقم النسخ المرجعية، وأعداد التشغيل، والميزانيات، والبذرة الرئيسية.
scripts/نعممُشغّلات الحملة والتحليل (مثل run_smoke_pilot.py).
benchmarks/لانسخ مرجعية مُجسَّدة.
results/لاسجلّات التشغيل في results/{campaign_id}/{solver_id}/{benchmark_id}/run_{idx}.json.
logs/لاسجلّات التنفيذ في logs/{campaign_id}_{YYYYMMDD_HHMMSS}.log.
.checkpoints/لاحالة حملة قابلة للاستئناف في .checkpoints/{campaign_id}.json، محميّة بتجزئة تهيئة.
evidence-bundles/لاصادرات مُنسَّقة ومُدرَّجة وفق الإفصاح في evidence-bundles/{campaign_id}-{tier}/.
ENVIRONMENT.mdلالقطة للمضيف ونظام التشغيل وPython والالتزام، مُلتقَطة وقت التشغيل.

تُوجد أدلّة المخرجات محليًّا ويُعيد مُشغّل الحملة إنشاءها تلقائيًّا عند غيابها؛ ولا يُجهَّز أي شيء تحتها للالتزام أبدًا.

🧱 طبقتان، مصدر حقيقة واحد

  1. طبقة قابلية إعادة الإنتاج (دقيقة). كل تشغيل سجلّ JSON واحد في results/{campaign_id}/{solver_id}/{benchmark_id}/run_{idx}.json. المسار نفسه هو الفهرس — حملة، ثم حلّال، ثم نسخة مرجعية، ثم تكرار — فأي شريحة من الأدلّة قابلة للعنونة دون قاعدة بيانات. تحمل السجلّات حقولًا من الدرجة الأولى للتوقيت والتقارب والحل وجهد الحلّال؛ ولا يختبئ أي شيء تحليلي في ملاحظات حرّة الشكل.
  2. طبقة التنسيق (مُدرَّجة). يحتفظ evidence-bundles/{campaign_id}-{tier}/ بالصادرات المُدرَّجة وفق الإفصاح المشتقّة من سجلّات التشغيل. تأتي معرّفات الطبقات من المفردات الثابتة الآمنة للعموم — core وspeed وquality وplatform — وتُشتقّ الحزمة دائمًا من سجلّات مستوى التشغيل، لا مصدر حقيقة مستقلًّا أبدًا.

🔁 عقد قابلية إعادة الإنتاج

  • تُعلِن كل حملة بذرةً رئيسية واحدة؛ وتُشتقّ بذرة كل تشغيل حتميًّا منها ومن موقع التشغيل — تهيئة واحدة، البذور نفسها، السجلّات نفسها، بِتًّا ببِت.
  • يُسجّل .checkpoints/{campaign_id}.json تجزئة التهيئة. تستأنف تهيئةٌ دون تغيير من نقطة التفتيش وتتخطّى عمليات التشغيل المكتملة؛ وأي تغيير في التهيئة يُبطل نقطة التفتيش كليًّا.
  • يلتقط ENVIRONMENT.md لقطةً للمضيف ونظام التشغيل وPython والتزام المستودع وقت التنفيذ، فتكون كل نتيجة قابلة للتعقّب إلى الشيفرة والجهاز اللذين أنتجاها بالضبط.
  • السجلّات للإلحاق-فقط لكل تنفيذ.

تتبع هذه الممارسات — بذرة لكل تشغيل، والتقاط التهيئة والبيئة كي يُعاد توليد نتيجة من وصفتها — معاييرَ معترفًا بها لتوثيق التجارب الحاسوبية وإعادة إنتاجها (ACM Artifact Review and Badging, Version 1.1, 2020؛ Gundersen & Kjensmo 2018).

كما يُسوّغ بيانُ قابلية إعادة الإنتاج حدَّ الثلاثين تشغيلًا ببيان قوّة مشتقّ: عند الحدّ، وبمستوى ثنائي-الطرف 0.05 وقوّة 0.80، يكشف التصميمُ الزوجي آثارًا معيارية بنحو 0.523 أو أكبر تحت تقريب Wilcoxon المُعدَّل بالكفاءة النسبية المقارِبة (Noether 1987؛ الإطار: Campelo وTakahashi 2019). وتُعاد حَوسبةُ الجملة من الحدّ وقت التصيير، فلا يمكن أن تنجرف أبدًا عن الحدّ الذي تُسوّغه. ويسافر واصفان بروتوكوليّان آخران إلى جانبها: مدخلُ تدرّج-ميزانية يُسجّل كيف تنمو ميزانيةُ التقييم مع حجم النسخة (البروتوكول المُقاس-بالحجم لـ Vallada وRuiz وFramiñan 2015، يُسجّله بيانُ المقارنة العادلة للمختبر بوصفه قاعدةً مُقاسة-بالتقييم أو مُثبَّتة-للحملة)، ومدخلُ تكافؤ-ضبط يحمل ميزانيةَ الضبط المتساوية لكل خوارزمية التي تُعلِنها كلُّ حملة مقارِنة (LaTorre وMolina وOsaba وPoyatos وDel Ser وHerrera 2021)؛ ويُصيَّر تكافؤٌ غير مُعلَن أمينًا بوصفه غير مُعلَن.

🏃 كيف تكتب حملة في مساحة العمل

  1. أنشئ أو عدّل تهيئة حملة تحت configs/ (smoke-pilot.json هو نقطة البداية المُتعقَّبة).

  2. شغّلها عبر مُشغّل الحملة — برمجيًّا كما في الدروس التعليمية، عبر سكربت وصفة مُتعقَّب (uv run python experiments/scripts/run_smoke_pilot.py)، أو عبر واجهة سطر الأوامر:

    uv run dispatchatlas-lab run --config experiments/configs/smoke-pilot.json
  3. يتحقّق المُشغّل من التهيئة محوّلًا إيّاها إلى خطة حتمية، ويكتب results/{campaign_id}/plan.json وenvironment.json، ثم يُديم سجلًّا مُجزَّأً بالمحتوى لكل تشغيل مكتمل إضافةً إلى أي محاولات فاشلة.

  4. افحص سجلّات التشغيل تحت results/ واستأنف أو أعِد التشغيل أو أعِد التنفيذ من التهيئة نفسها. تُعيد إعادة تشغيل التهيئة نفسها إنتاج السجلّات نفسها بِتًّا ببِت؛ وتُبطل تهيئة مُغيَّرة نقطة التفتيش بدلًا من إعادة استخدامها بصمت.

توثّق صفحة محرّك الحملات التحقّق، وميزانيات التشغيل الجاف، وأنماط التنفيذ، والإعادات، والاستئناف، والتحقّق بإعادة التشغيل بالكامل.

📦 من سجلّات التشغيل إلى حِزَم الأدلّة

يحوّل مسار التصدير دليل حملة مكتملًا إلى حزمة مُنسَّقة تحت evidence-bundles/{campaign_id}-{tier}/:

uv run dispatchatlas export `
  --campaign-dir .\experiments\results\smoke-pilot `
  --target-dir .\experiments `
  --authorized-output-root .\experiments `
  --tier core

يقود tools/build_campaign_evidence.py المسار نفسه على نطاق واسع، فيبني كتالوجات النسخ المرجعية والحملات والتحليلات والحِزَم لكل طبقة من تهيئة واحدة مُسجَّلة. تصف صفحة حِزَم الأدلّة الطبقات؛ وتصف صادرات التحليل المحتوى الإحصائي.

🔒 الحدّ الآمن للعموم

لا تقرأ الصفحات العامة مساحة العمل هذه مباشرةً أبدًا: يستهلك موقع التوثيق وبوابة النتائج فقط الصادرات المُلتزَمة والمُرشَّحة وفق الإفصاح المُنتَجة من الطبقة المُنسَّقة. أما سجلّات البرنامج الخاصة في مساحة العمل فيتجاهلها ضبط الإصدارات ولا تصل إلى أي سطح عام أبدًا.