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

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

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

الدرس: استراتيجيات المبادلة في تحسين الجدولة

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

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

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

نوع المحتوى: example

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

📝 ملخص الصفحة

تتناول هذه الصفحة تقنيات تحسين الجدولة باستخدام خوارزميات البحث المحلي، مع التركيز على استراتيجيات المبادلة لتوليد حلول مجاورة. تُعرّف الدالة `random_swap` التي تختار مهمتين عشوائيتين في الجدول لتبادلهما، مما يسمح باستكشاف واسع للحلول المحتملة. كما تُقدم الدالة `adjacent_swap` التي تقتصر على مبادلة مهمتين متجاورتين فقط، مما يوفر نهجاً أكثر تركيزاً لتحسين الجدولة. يتم تقييم الحلول الجديدة من خلال حساب التأخير باستخدام دالة `compute_schedule_tardiness`، ويتم تحديث أفضل حل عند العثور على جدولة ذات تأخير أقل. تُستخدم هذه التقنيات في سياق حل مشاكل جدولة المهام لتحسين الأداء وتقليل التأخير الكلي.

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

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

نوع: محتوى تعليمي

# computes the new tardiness after the swap new_tardiness, new_finish_times = compute_schedule_tardiness(problem, new_schedule) # if the new schedule is better than the best one so far if new_tardiness < best_tardiness: # the new_schedule becomes the best one best_schedule = new_schedule best_tardiness = new_tardiness best_finish_times = new_finish_times # returns the best solution return {'schedule':best_schedule, 'tardiness':best_tardiness, 'finish_times':best_finish_times}

نوع: محتوى تعليمي

جيران الحل في هذا المثال كلها حلول يتم الحصول عليها عن طريق انتقاء مهمتين داخل الحل ومبادلة موقعيهما في الجدول.

نوع: محتوى تعليمي

تطبق الدالة التالية مبادلة عشوائية بانتقاء مهمتين عشوائيتين في الجدول المعطى الذي يستوجب تبديل مكانيهما:

نوع: محتوى تعليمي

def random_swap(schedule): job_num = len(schedule) # gets the number of scheduled jobs pos1 = random.randint(0, job_num - 1) # samples a random position pos2 = pos1 while pos2 == pos1: # keeps sampling until it finds a position other than pos1 pos2 = random.randint(0, job_num - 1) # samples another random position return pos1, pos2 # returns the two positions that should be swapped

نوع: محتوى تعليمي

تستخدم الدالة التالية استراتيجية مختلفة وذلك باختيارها الدائم لمهمتين متجاورتين في الجدول لتبادلهما. على سبيل المثال، إذا كان الجدول الحالي لنسخة مشكلة مكونة من أربع مهام هو [0, 1, 3, 2]، فإن المبادلات المرشحة ستكون فقط 0<>1 و 1<>3 و 3<>2.

نوع: محتوى تعليمي

def adjacent_swap(schedule): job_num = len(schedule) # gets the number of scheduled jobs pos1 = random.randint(0, job_num - 2) # samples a random position (excluding the last one) pos2 = pos1 + 1 # gets the position after the sampled one return pos1,pos2 # returns the two positions that should be swapped

نوع: METADATA

وزارة التعليم Ministry of Education 2023 - 1447

نوع: METADATA

276

🔍 عناصر مرئية

وزارة التعليم logo

Logo of the Ministry of Education with text 'وزارة التعليم' and 'Ministry of Education 2023 - 1447'.

📄 النص الكامل للصفحة

# computes the new tardiness after the swap new_tardiness, new_finish_times = compute_schedule_tardiness(problem, new_schedule)# if the new schedule is better than the best one so far if new_tardiness < best_tardiness: # the new_schedule becomes the best one best_schedule = new_schedule best_tardiness = new_tardiness best_finish_times = new_finish_times# returns the best solution return {'schedule':best_schedule, 'tardiness':best_tardiness, 'finish_times':best_finish_times}جيران الحل في هذا المثال كلها حلول يتم الحصول عليها عن طريق انتقاء مهمتين داخل الحل ومبادلة موقعيهما في الجدول.تطبق الدالة التالية مبادلة عشوائية بانتقاء مهمتين عشوائيتين في الجدول المعطى الذي يستوجب تبديل مكانيهما:def random_swap(schedule): job_num = len(schedule) # gets the number of scheduled jobs pos1 = random.randint(0, job_num - 1) # samples a random position pos2 = pos1 while pos2 == pos1: # keeps sampling until it finds a position other than pos1 pos2 = random.randint(0, job_num - 1) # samples another random position return pos1, pos2 # returns the two positions that should be swappedتستخدم الدالة التالية استراتيجية مختلفة وذلك باختيارها الدائم لمهمتين متجاورتين في الجدول لتبادلهما. على سبيل المثال، إذا كان الجدول الحالي لنسخة مشكلة مكونة من أربع مهام هو [0, 1, 3, 2]، فإن المبادلات المرشحة ستكون فقط 0<>1 و 1<>3 و 3<>2.def adjacent_swap(schedule): job_num = len(schedule) # gets the number of scheduled jobs pos1 = random.randint(0, job_num - 2) # samples a random position (excluding the last one) pos2 = pos1 + 1 # gets the position after the sampled one return pos1,pos2 # returns the two positions that should be swapped2023 - 1447--- VISUAL CONTEXT ---Context: Identifies the publisher/source of the textbook.

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 5 بطاقة لهذه الصفحة

ما هي وظيفة الدالة `compute_schedule_tardiness`؟

الإجابة: تحسب هذه الدالة قيمة التأخير الجديدة وجداول أوقات الانتهاء (finish times) لجدول زمني معين.

الشرح: تُستخدم الدالة `compute_schedule_tardiness` لتقييم جودة الجدول الزمني الجديد عن طريق حساب إجمالي التأخير.

تلميح: ابحث عن الكلمات التي تشير إلى حسابات متعلقة بالجدولة والتأخير.

ماذا يحدث عند العثور على جدول زمني أفضل من الأفضل الحالي؟

الإجابة: يصبح الجدول الزمني الجديد هو الجدول الأفضل (best_schedule)، ويتم تحديث قيمة التأخير الأفضل (best_tardiness) وأوقات الانتهاء الأفضل (best_finish_times).

الشرح: تُستخدم هذه العملية في خوارزميات البحث عن الحلول لتحسين الحل الحالي بالانتقال إلى حل أفضل إذا تم العثور عليه.

تلميح: فكر في عملية التحسين أو البحث عن الحل الأمثل.

ما هي الفكرة الأساسية لإنشاء "جيران" الحل في سياق هذا الكود؟

الإجابة: في هذا المثال، يتم إنشاء "جيران" الحل عن طريق انتقاء مهمتين عشوائيتين في الجدول الحالي ومبادلة مواقعهما.

الشرح: تُستخدم فكرة "الجيران" في خوارزميات البحث المحلي لاستكشاف الحلول القريبة من الحل الحالي بهدف تحسينه.

تلميح: ما هي العملية التي يتم فيها تغيير الحل الحالي بشكل بسيط للحصول على حلول مشابهة؟

ما هو الفرق بين الدالتين `random_swap` و `adjacent_swap`؟

الإجابة: تقوم `random_swap` بتبديل موقع مهمتين مختارتين عشوائياً من أي مكان في الجدول، بينما تقوم `adjacent_swap` بتبديل موقع مهمتين متجاورتين فقط في الجدول.

الشرح: تُقدم `random_swap` مرونة أكبر في استكشاف المساحة البحثية، بينما تركز `adjacent_swap` على التغييرات المحلية الصغيرة.

تلميح: ركز على نطاق اختيار المواقع للتبديل في كل دالة.

في الدالة `random_swap`، ما هو الغرض من حلقة `while pos2 == pos1`؟

الإجابة: الغرض هو التأكد من أن الموضع الثاني (`pos2`) الذي يتم اختياره لمبادلة هو مختلف عن الموضع الأول (`pos1`)، لضمان تبادل مهمتين مختلفتين.

الشرح: إذا تم اختيار نفس الموضع مرتين، فلن تحدث أي مبادلة فعلياً، ولن يتغير الجدول الزمني.

تلميح: لماذا قد يكون من المهم اختيار موقعين مختلفين للتبديل؟