خوارزمية القوة المفرطة لمشكلة التباطؤ الموزون - كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: أنشئ خوارزمية حل بالقوة المفرطة لمشكلة التباطؤ الموزون للآلة الواحدة

📚 معلومات الصفحة

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: تمارين وأسئلة

مستوى الصعوبة: متوسط

📝 ملخص الصفحة

تقدم هذه الصفحة تمرينًا برمجيًا لإنشاء خوارزمية حل بالقوة المفرطة لمشكلة التباطؤ الموزون للآلة الواحدة. يُطلب من الطالب إكمال مقطع برمجي بلغة Python يستخدم الدالة `brute_force_solver` لحساب الجدولة الأمثل للوظائف بناءً على أوقات التنفيذ والأوزان والمواعيد النهائية.

يبدأ التمرين بتعريف المشكلة واستخراج المعلومات الأساسية مثل `durations` و`weights` و`deadlines`، ثم حساب عدد الوظائف باستخدام `len()`. بعد ذلك، يتم توليد جميع الجدولات الممكنة باستخدام `itertools.permutations` لتقييم كل ترتيب ممكن للوظائف.

يتم تقييم كل جدولة باستخدام دالة `compute_schedule_tardiness` لحساب التباطؤ وأوقات الانتهاء، مع مقارنة النتائج لتحديد الجدولة ذات التباطؤ الأدنى. يتم تخزين أفضل جدولة وقيمها المرتبطة في متغيرات مثل `best_schedule` و`best_tardiness` و`best_finish_times`.

في النهاية، تُرجع الخوارزمية النتائج في شكل قاموس يتضمن الجدولة الأمثل وقيمة التباطؤ وأوقات الانتهاء، مما يساعد في فهم تطبيقات البرمجة لحل مشاكل الجدولة الأمثل.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

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

✅ حلول أسئلة الكتاب الرسمية

عدد الأسئلة: 8

سؤال س 3 (1): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. job_num = len(____________) # number of jobs

الإجابة: س 3 (1): durations

خطوات الحل:

  1. **الشرح:** لنفهم هذا السؤال: نحن ننشئ خوارزمية لحساب عدد الوظائف (jobs) التي يجب جدولتها. في البرمجة، عادةً ما تُخزن مدة كل وظيفة في قائمة (list) أو مصفوفة (array). لحساب عدد الوظائف، نستخدم الدالة len() التي تُرجع طول كائن (عدد العناصر فيه). إذن، يجب أن نمرر لهذه الدالة المتغير الذي يحتوي على مدة كل وظيفة. بناءً على سياق مشكلة التباطؤ الموزون، هذا المتغير هو الذي يحوي مدة كل وظيفة. لذلك الإجابة هي: **durations**

سؤال س 3 (2): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. all_schedules = itertools.____________(range(job_num))

الإجابة: س 3 (2): permutations

خطوات الحل:

  1. **الشرح:** الفكرة هنا هي استخدام مكتبة itertools في بايثون لتوليد جميع التباديل (permutations) الممكنة لجدولة الوظائف. التباديل يعني جميع الطرق الممكنة لترتيب الوظائف. نحتاج إلى توليد جميع التباديل لعدد من الوظائف يساوي job_num. الدالة permutations() من مكتبة itertools تقوم بذلك. إذن الإجابة هي: **permutations**

سؤال س 3 (3): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. best_schedule = ____________ # initialized to None

الإجابة: س 3 (3): None

خطوات الحل:

  1. **الشرح:** في الخوارزمية، نحتاج إلى متغير لتخزين أفضل جدولة وجدناها حتى الآن. في البداية، لم نجد أي جدولة بعد، لذا نبدأ بقيمة أولية تشير إلى 'لا شيء' أو 'غير محدد'. في بايثون، القيمة None تُستخدم لتمثيل عدم وجود قيمة أو كائن. إذن الإجابة هي: **None**

سؤال س 3 (4): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. best_tardiness = float('____________')

الإجابة: س 3 (4): inf

خطوات الحل:

  1. **الشرح:** نحتاج إلى متغير لتخزين أقل قيمة للتباطؤ (tardiness) التي وجدناها. في البداية، نريد أن تكون هذه القيمة كبيرة جداً بحيث تكون أي قيمة أولية للتباطؤ أقل منها. في بايثون، float('inf') يُرجع قيمة تمثل اللانهاية (infinity)، وهي أكبر من أي عدد حقيقي. هذا يضمن أن أول جدولة نحسبها سيكون تباطؤها أقل من هذه القيمة الأولية. إذن الإجابة هي: **inf**

سؤال س 3 (5): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. best_finish_times=____________ # initalized to None

الإجابة: س 3 (5): None

خطوات الحل:

  1. **الشرح:** بالإضافة إلى أفضل جدولة وأقل تباطؤ، قد نحتاج إلى تخزين أوقات الانتهاء (finish times) المرتبطة بأفضل جدولة. في البداية، لم نحسب أي أوقات انتهاء بعد. لذلك، نبدأ بقيمة أولية تشير إلى 'لا شيء'، تماماً كما فعلنا مع best_schedule. إذن الإجابة هي: **None**

سؤال س 3 (6): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. if tardiness<best_tardiness: # this schedule is better than the best so far best_tardiness=____________

الإجابة: س 3 (6): tardiness

خطوات الحل:

  1. **الشرح:** عندما نجد جدولة جديدة يكون تباطؤها (tardiness) أقل من أفضل تباطؤ سابق (best_tardiness)، فهذا يعني أن هذه الجدولة أفضل. لذلك، يجب أن نُحدّث أفضل تباطؤ ليكون مساوياً لتباطؤ هذه الجدولة الجديدة الأفضل. إذن الإجابة هي: **tardiness**

سؤال س 3 (7): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. if tardiness<best_tardiness: # this schedule is better than the best so far best_schedule=____________

الإجابة: س 3 (7): schedule

خطوات الحل:

  1. **الشرح:** بعد أن تأكدنا أن الجدولة الحالية أفضل (لأن تباطؤها أقل)، يجب أن نحفظ هذه الجدولة نفسها كأفضل جدولة وجدناها حتى الآن. المتغير schedule يمثل الجدولة الحالية التي نقوم بتقييمها. إذن الإجابة هي: **schedule**

سؤال س 3 (8): أنشئ خوارزمية حلّ بالقوة المُفرطة لمشكلة التباطؤ الموزون للآلة الواحدة، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم الدالة القوة المُفرطة لإيجاد تبديل الجدولة الأمثل. if tardiness<best_tardiness: # this schedule is better than the best so far best_finish_times=____________

الإجابة: س 3 (8): finish_times

خطوات الحل:

  1. **الشرح:** بالإضافة إلى حفظ أفضل جدولة، قد نحتاج أيضاً إلى حفظ أوقات الانتهاء المرتبطة بهذه الجدولة المثلى. المتغير finish_times يمثل أوقات الانتهاء للجدولة الحالية التي أثبتت أنها الأفضل. إذن الإجابة هي: **finish_times**

📝 أسئلة اختبارية

عدد الأسئلة: 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
  • ب) 0
  • ج) []
  • د) ''

الإجابة الصحيحة: None

الشرح: يتم تهيئة best_schedule بقيمة None لأننا لم نجد أي جدولة بعد، وسيتم تحديثها عند العثور على جدولة أفضل

تلميح: ما هي القيمة الأولية المناسبة لمتغير لم يتم تعيينه بعد؟

سؤال 3: best_tardiness = float('____________')

  • أ) inf
  • ب) max
  • ج) 0
  • د) -inf

الإجابة الصحيحة: inf

الشرح: يتم تعيين best_tardiness إلى قيمة لا نهائية (inf) بحيث تكون أي قيمة tardiness محسوبة أصغر منها في البداية، مما يضمن تحديثها بأول جدولة

تلميح: ما هي القيمة التي تمثل اللانهاية في Python؟

سؤال 3: best_finish_times=____________ # initalized to None

  • أ) None
  • ب) []
  • ج) {}
  • د) 0

الإجابة الصحيحة: 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`.

الشرح: هذا هو قلب خوارزمية البحث عن الحد الأدنى. يسمح لنا بتتبع الجدول الزمني الأفضل الذي تم اكتشافه حتى الآن وتحديثه فور العثور على جدول زمني يحقق نتيجة أفضل (تباطؤ أقل).

تلميح: عندما تبحث عن أفضل نتيجة، كيف تتأكد من الاحتفاظ بها وتحديثها عند العثور على نتيجة أفضل؟