حاسبة Shift
بالنظر إلى مجموعة من الكيانات ذات القيود ، قم بحساب جدول التحولات لهم الذي يحترم هذه القيود بشكل أقصى.
الاستخدام
تأكد من أن جهاز الكمبيوتر الخاص بك قد تم تثبيته عن طريق تشغيل python --version
على سطر الأوامر.
إذا لم يحدث ذلك ، يمكنك تنزيل Python هنا: https://www.python.org/downloads
عند تثبيت Python:
- قد تحاول Windows أن تجعلك تثبيت Python من متجر التطبيقات ، يجب عليك تجاهل ذلك والتثبيت من Python.org ، لأنه وإلا لا يمكنك تخصيص التثبيت. يجب أن تكون قادرًا على تخصيص التثبيت حتى تتمكن من ذلك:
- حدد المربع لإضافته إلى PATH! سيتيح ذلك محطة سطر الأوامر للعثور على Python عند محاولة تشغيل البرنامج.
لتشغيل البرنامج:
- قم بتنزيل ملف
calculateShifts.py
من الإصدارات (يمكنك أيضًا العثور على sampleEntities.csv
مفيدة). - انتقل إلى المجلد الذي يحتوي على
calculateShifts.py
- انقر فوق "ملف" في أعلى اليسار و "فتح في Windows PowerShell".
- اكتب الأمر. (انظر أدناه.)
يتم تشغيل هذا البرنامج من سطر الأوامر. يستغرق ملف إدخال ويسجل الجدول الذي تم إنشاؤه في ملف الإخراج. الحجج التالية مطلوبة:
- اسم ملف الكيانات (على سبيل المثال foo.csv) - هذا هو ملف الإدخال الخاص بك ، راجع المتطلبات أدناه لما ينبغي أن يبدو عليه.
- تاريخ البدء (Yyyy-MM-DD)
- عدد الأسابيع
- أيام مع التحولات ، باستخدام أحرف صغيرة ، أسماء يومية مختصرة مفصولة مع نصف كولون (على سبيل المثال الجمعة ؛ السبت ؛ الشمس)
- الحد الأدنى لعدد الأيام بين التحولات
على سبيل المثال:
python calculateShifts.py sampleEntities.csv 2021-08-01 10 "fri;sat;sun" 6
كيانات الملف متطلبات ملف
يجب أن يكون ملف الكيانات عبارة عن ملف قيم مفصل للفاصلة (CSV) مع الأعمدة التالية:
- اسم
- المجموعة - غير المستخدمة حاليًا من قبل البرنامج ، ولكن سيتم تضمينها في الإخراج في حال كنت ترغب في معرفة كيفية توزيع المجموعات المختلفة في الجدول.
- أيام غير متوفرة - حدد أي أيام من الأسبوع غير متوفرة باستخدام أسماء ليوم صغيرة مختصرة مفصولة بأسماك شبه (مثل الجمعة ؛ SAT ؛ SUN).
انظر sampleententities.csv للحصول على مثال!
الإخراج
سيقوم البرنامج بإخراج ملف output.csv مع الأعمدة التالية:
- تاريخ
- يوم الأسبوع
- مجموعة
- اسم
سيحاول الجدول الزمني تقليل انتهاكات القيود إلى الحد الأدنى ، ولكن نظرًا لأن هذه القيود يمكن أن تدخل في الصراع ، فلن يكون الجدول الزمني مثاليًا. نوصي بالسماح بدائل إذا كنت تستخدم هذا الجدول مباشرة.
بالإضافة إلى ذلك ، سيقوم البرنامج بطباعة بعض إخراج التصحيح إلى وحدة التحكم. بالنسبة لكل كيان ، سيشاركه في نونمبر من الأوقات التي تعرضت لقيودها للخطر ، وتوزيع نوباتهم خلال الأيام المختلفة.
خطة التنفيذ
فيما يلي بعض التفاصيل حول كيفية عمل البرنامج ، إذا كنت مهتمًا.
قيود
لا يضمن هذا البرنامج تلبية جميع القيود تمامًا ، لأن ذلك يتطلب أن تكون المدخلات غير متطورة تمامًا. بدلاً من ذلك ، يعطي الأولوية للأنواع المقدمة من القيود ومحاولات التقليل وتوزيع انتهاكات تلك القيود بشكل متساوٍ عبر الكيانات المجدولة.
حسب الأولوية:
- أيام غير متوفرة - يجب ألا يتم جدولة كيان لمدة يوم غير متوفر.
- توزيع التحول - تأكد من أن جميع الكيانات لها أعداد متساوية تقريبًا من التحولات على مدار الفترة بأكملها.
- الحد الأدنى لعدد الأيام بين التحولات - محاولة احترام الحد الأدنى من الوقت بين التحولات.
- توزيع اليوم - حاول التأكد من أن كل كيان لديه تحولات عبر مجموعة متنوعة من الأيام التي تتوفر فيها.
رمز كاذب
- توليد قائمة جميع التحولات.
- في البداية ، فرز الكيانات من معظم القيود اليومية.
- لكل كيان لم يتم "القيام به":
- ابحث عن التحول المثالي التالي.
- إذا كان غير مشغول ، خذها.
- إذا كانت مشغولة ، استرخ قيودًا وابحث عن تحول مثالي جديد. زيادة عدد حل وسط هذا الكيان بمقدار 1.
- إذا كنا في التقييد الأخير (الأيام المتاحة) ، تخطي هذا الكيان ووضع علامة عليه على أنه "تم" بدلاً من انتهاك هذا التقييد.
- تحقق مما إذا كانت هناك تحولات غير معروفة والكيانات التي لم يتم "القيام بها".
- إذا كان الأمر كذلك ، فصنّع الكيانات بعدد من التنازلات من معظم إلى الأقل ، ثم حلقتها مرة أخرى. هذا يضمن أن الكيانات التي تعرضت للخطر أكثر من غيرها اختيار كل جولة.
- إخراج الجدول الزمني إلى Output.csv.
هياكل البيانات المطلوبة:
- قائمة التحولات مع التاريخ واليوم والكيان المعين
- قائمة الكيانات ذات الاسم والمجموعة والأيام غير متوفرة وعدد التسويات والعلامة التي تم إجراؤها