📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
3
نوع: QUESTION
أنشئ خوارزمية حل بالقوة المفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المفرطة لإيجاد الجدولة الأمثل.
نوع: محتوى تعليمي
def brute_force_solver(problem):
# gets the information for this problem
durations, weights, deadlines=problem['durations'], problem['weights'], problem['deadlines']
job_num = len(____________) # number of jobs
# generates all possible schedules
all_schedules = itertools.____________(range(job_num))
best_schedule = ____________ # initialized to None
# 'inf' stands for 'infinity'. Python will evaluate all numbers as smaller than this value.
best_tardiness = float('____________')
# stores the finish time of each job in the best schedule
best_finish_times=____________ # initalized to None
for schedule in all_schedules: # for every possible schedule
#evalute the schedule
tardiness,finish_times=compute_schedule_tardiness(problem, schedule)
if tardiness<best_tardiness: # this schedule is better than the best so far
best_tardiness=____________
best_schedule=____________
best_finish_times=____________
# return the results as a dictionary
return {'schedule':best_schedule,
'tardiness':best_tardiness,
'finish_times':best_finish_times}
نوع: METADATA
وزارة التعليم
Ministry of Education
2023 - 1447
280
📄 النص الكامل للصفحة
--- SECTION: 3 ---
أنشئ خوارزمية حل بالقوة المفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المفرطة لإيجاد الجدولة الأمثل.def brute_force_solver(problem):
# gets the information for this problem durations, weights, deadlines=problem['durations'], problem['weights'], problem['deadlines']job_num = len(____________) # number of jobs
# generates all possible schedules all_schedules = itertools.____________(range(job_num))best_schedule = ____________ # initialized to None
# 'inf' stands for 'infinity'. Python will evaluate all numbers as smaller than this value.
best_tardiness = float('____________')
# stores the finish time of each job in the best schedule best_finish_times=____________ # initalized to None for schedule in all_schedules: # for every possible schedule
#evalute the schedule tardiness,finish_times=compute_schedule_tardiness(problem, schedule)
if tardiness<best_tardiness: # this schedule is better than the best so far best_tardiness=____________
best_schedule=____________
best_finish_times=____________# return the results as a dictionary return {'schedule':best_schedule,
'tardiness':best_tardiness,
'finish_times':best_finish_times}2023 - 1447
📝 أسئلة اختبارية
عدد الأسئلة: 9
سؤال 3: أنشئ خوارزمية حل بالقوة المفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المفرطة لإيجاد الجدولة الأمثل.
الإجابة الصحيحة: انظر الأسئلة الفرعية
الشرح: هذا سؤال رئيسي يحتوي على أسئلة فرعية تتعلق بإكمال المقطع البرمجي
تلميح: راجع الأسئلة الفرعية أدناه لإكمال الأجزاء الناقصة في الكود
سؤال 3: job_num = len(____________) # number of jobs
- أ) durations
- ب) weights
- ج) deadlines
- د) problem
الإجابة الصحيحة: durations
الشرح: يتم حساب عدد المهام من طول قائمة durations لأن كل مهمة لها مدة زمنية محددة
تلميح: ما هي القائمة التي تحتوي على معلومات كل مهمة؟
سؤال 3: all_schedules = itertools.____________(range(job_num))
- أ) combinations
- ب) permutations
- ج) product
- د) combinations_with_replacement
الإجابة الصحيحة: permutations
الشرح: يتم استخدام itertools.permutations لتوليد جميع التباديل الممكنة للمهام، حيث تمثل كل تباديل جدولة محتملة
تلميح: ما هي الدالة في itertools التي تولد جميع الترتيبات الممكنة؟
سؤال 3: best_schedule = ____________ # initialized to None
الإجابة الصحيحة: None
الشرح: يتم تهيئة best_schedule بقيمة None لأننا لم نجد أي جدولة بعد، وسيتم تحديثها عند العثور على جدولة أفضل
تلميح: ما هي القيمة الأولية المناسبة لمتغير لم يتم تعيينه بعد؟
سؤال 3: best_tardiness = float('____________')
الإجابة الصحيحة: inf
الشرح: يتم تعيين best_tardiness إلى قيمة لا نهائية (inf) بحيث تكون أي قيمة tardiness محسوبة أصغر منها في البداية، مما يضمن تحديثها بأول جدولة
تلميح: ما هي القيمة التي تمثل اللانهاية في Python؟
سؤال 3: best_finish_times=____________ # initalized to None
الإجابة الصحيحة: None
الشرح: يتم تهيئة best_finish_times بقيمة None لأننا لم نحسب أوقات الانتهاء لأي جدولة بعد، وسيتم تحديثها مع best_schedule
تلميح: ما هي القيمة الأولية المناسبة لمتغير لم يتم تعيينه بعد؟
سؤال 3: best_tardiness=____________
- أ) tardiness
- ب) best_tardiness
- ج) finish_times
- د) schedule
الإجابة الصحيحة: tardiness
الشرح: عند العثور على جدولة أفضل (tardiness أقل)، يتم تحديث best_tardiness بقيمة tardiness الحالية لتسجيل القيمة الجديدة الأفضل
تلميح: ما هي القيمة التي تمثل tardiness للجدولة الحالية؟
سؤال 3: best_schedule=____________
- أ) schedule
- ب) best_schedule
- ج) all_schedules
- د) job_num
الإجابة الصحيحة: schedule
الشرح: عند العثور على جدولة أفضل، يتم تحديث best_schedule بالجدولة الحالية (schedule) لتسجيل الترتيب الأمثل للمهام
تلميح: ما هي المتغير الذي يمثل الجدولة الحالية؟
سؤال 3: best_finish_times=____________
- أ) finish_times
- ب) best_finish_times
- ج) tardiness
- د) schedule
الإجابة الصحيحة: finish_times
الشرح: عند العثور على جدولة أفضل، يتم تحديث best_finish_times بأوقات الانتهاء الحالية (finish_times) لتسجيل الأوقات المرتبطة بالجدولة الأمثل
تلميح: ما هي المتغير الذي يمثل أوقات الانتهاء للجدولة الحالية؟
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هو الهدف الأساسي للدالة `brute_force_solver` في إيجاد الحل الأمثل لمشكلة التباطؤ الموزون للآلة الواحدة؟
الإجابة: الهدف الأساسي هو توليد جميع الجداول الزمنية الممكنة (التوافيق) لمجموعة من المهام، وحساب مقدار التباطؤ لكل جدول زمني، ومن ثم تحديد الجدول الزمني الذي يؤدي إلى أقل مقدار من التباطؤ الإجمالي.
الشرح: تعتمد خوارزمية القوة المفرطة على فحص جميع الحلول الممكنة. في سياق جدولة المهام، يعني هذا توليد كل ترتيب ممكن للمهام وتقييم كل ترتيب لاختيار الأفضل.
تلميح: فكر في العملية التي تضمن تجربة كل احتمال ممكن للوصول إلى الأفضل.
ماذا يمثل المتغير `job_num` في الدالة `brute_force_solver`؟
الإجابة: يمثل `job_num` العدد الإجمالي للمهام التي يجب جدولتها.
الشرح: لإنشاء جميع التوافيق الممكنة لجدولة المهام، نحتاج أولاً إلى معرفة عدد المهام الكلي. يتم استخلاص هذه المعلومة من طول قائمة `durations` (أو `weights` أو `deadlines`، حيث أنها متساوية الطول).
تلميح: لإيجاد عدد العناصر في قائمة، نستخدم دالة معينة. انظر إلى سياق الحصول على معلومات المهام.
ما هي المكتبة أو الوحدة المستخدمة لتوليد جميع الجداول الزمنية الممكنة؟
الإجابة: المكتبة المستخدمة هي `itertools`، وبالتحديد الدالة `permutations`.
الشرح: الدالة `itertools.permutations(range(job_num))` تقوم بتوليد كل الترتيبات الممكنة (التوافيق) لمجموعة من الأرقام تمثل مؤشرات المهام، مما يسمح بفحص كل جدول زمني محتمل.
تلميح: البحث عن الكلمة التي تدل على توليد الترتيبات المختلفة لعناصر مجموعة.
كيف يتم تهيئة المتغير `best_tardiness` لضمان مقارنته الصحيحة مع أول تباطؤ يتم حسابه؟
الإجابة: يتم تهيئة `best_tardiness` بقيمة لانهائية (`float('inf')`) لضمان أن أي تباطؤ يتم حسابه لأي جدول زمني سيكون أصغر منها في البداية، مما يجعل الجدول الزمني الأول هو الأفضل مبدئياً.
الشرح: عند البحث عن الحد الأدنى لقيمة، نبدأ بقيمة أكبر من المتوقع أو قيمة تمثل اللانهاية. هذا يضمن أن الشرط `if tardiness < best_tardiness` سيتحقق مع أول جدول زمني يتم تقييمه، وسيبدأ تجميع أفضل جدول زمني منذ البداية.
تلميح: لتكون أي قيمة لاحقة أصغر من القيمة الأولية، يجب أن تكون القيمة الأولية أكبر من أي قيمة ممكنة.
ما هو الدور الذي تلعبه جملة `if tardiness < best_tardiness:` ضمن حلقة تكرار الجداول الزمنية؟
الإجابة: تُستخدم هذه الجملة لمقارنة مقدار التباطؤ للجدول الزمني الحالي مع أقل مقدار تباطؤ تم العثور عليه حتى الآن. إذا كان الجدول الزمني الحالي أفضل (تباطؤ أقل)، يتم تحديث `best_tardiness` و`best_schedule` و`best_finish_times`.
الشرح: هذا هو قلب خوارزمية البحث عن الحد الأدنى. يسمح لنا بتتبع الجدول الزمني الأفضل الذي تم اكتشافه حتى الآن وتحديثه فور العثور على جدول زمني يحقق نتيجة أفضل (تباطؤ أقل).
تلميح: عندما تبحث عن أفضل نتيجة، كيف تتأكد من الاحتفاظ بها وتحديثها عند العثور على نتيجة أفضل؟