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

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

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

الدرس: خوارزمية القوة الغاشمة للجدولة

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

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

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

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

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

📝 ملخص الصفحة

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

يتم عرض دالة `brute_force_solver` التي تأخذ مشكلة جدولة كمدخل وتعيد الجدول الأفضل وزمن التباطؤ وأوقات الإنجاز. كما يتم تقديم مثال عملي باستخدام دالة `create_problem_instance` لإنشاء مشكلة عشوائية وتطبيق الخوارزمية عليها.

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

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

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

خوارزمية القوة الغاشمة للجدولة

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

import itertools def brute_force_solver(problem): # gets the information for this problem durations, weights, deadlines = problem['durations'], problem['weights'], \ problem['deadlines'] job_num = len(durations) # number of jobs # Generates all possible schedules all_schedules = itertools.permutations(range(job_num)) # Initializes the best solution and its total weighted tardiness best_schedule = None # initialized to None # 'inf' stands for 'infinity'. Python will evaluate all numbers as smaller than this value. best_tardiness = float('inf') # stores the finish time of each job in the best schedule best_finish_times = None # initalized to None for schedule in all_schedules: # for every possible schedule #evalutes 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 = tardiness best_schedule = schedule best_finish_times = finish_times # returns the results as a dictionary return {'schedule':best_schedule, 'tardiness':best_tardiness, 'finish_times':best_finish_times}

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

خوارزمية الحل تعطي الجدول الأفضل، وزمن التباطؤ، وزمن إنجاز كل مهمة معطاة في هذا الجدول. على سبيل المثال، إذا كان الجدول يحوي ثلاث مهام، وكانت أوقات إنجاز جميع المهام تساوي [20, 14, 10]، فذلك يعني أن المهمة التي بدأت أولاً انتهت بعد 10 ساعات، والمهمة الثانية انتهت بعد ذلك بأربع ساعات، والمهمة الأخيرة انتهت بعد ست ساعات من اكتمال المهمة الثانية.

مثال على استخدام الخوارزمية

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

sample_problem = create_problem_instance(5, [5, 20], [5, 30], [1, 3]) brute_force_solver(sample_problem) {'schedule': (0, 2, 1, 3, 4), 'tardiness': 164, 'finish_times': [5, 11, 21, 36, 51]}

نوع: METADATA

272

نوع: METADATA

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

🔍 عناصر مرئية

توضيح معاملات دالة إنشاء المشكلة

مخطط يوضح المعاملات المدخلة لدالة 'create_problem_instance' وكيفية تفسيرها. يشير السهم الأول من الرقم 5 إلى 'عدد المهام المراد إنشاؤها'. يشير السهم الثاني من القائمة [5, 20] إلى 'نطاق الموعد النهائي'. يشير السهم الثالث من القائمة [5, 30] إلى 'نطاق مدة المهمة'. يشير السهم الرابع من القائمة [1, 3] إلى 'مدى أهمية الوزن'.

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

--- SECTION: خوارزمية القوة الغاشمة للجدولة --- import itertools def brute_force_solver(problem): # gets the information for this problem durations, weights, deadlines = problem['durations'], problem['weights'], \ problem['deadlines']job_num = len(durations) # number of jobs# Generates all possible schedules all_schedules = itertools.permutations(range(job_num))# Initializes the best solution and its total weighted tardiness best_schedule = None # initialized to None # 'inf' stands for 'infinity'. Python will evaluate all numbers as smaller than this value. best_tardiness = float('inf')# stores the finish time of each job in the best schedule best_finish_times = None # initalized to None for schedule in all_schedules: # for every possible schedule #evalutes 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 = tardiness best_schedule = schedule best_finish_times = finish_times# returns the results as a dictionary return {'schedule':best_schedule, 'tardiness':best_tardiness, 'finish_times':best_finish_times}خوارزمية الحل تعطي الجدول الأفضل، وزمن التباطؤ، وزمن إنجاز كل مهمة معطاة في هذا الجدول. على سبيل المثال، إذا كان الجدول يحوي ثلاث مهام، وكانت أوقات إنجاز جميع المهام تساوي [20, 14, 10]، فذلك يعني أن المهمة التي بدأت أولاً انتهت بعد 10 ساعات، والمهمة الثانية انتهت بعد ذلك بأربع ساعات، والمهمة الأخيرة انتهت بعد ست ساعات من اكتمال المهمة الثانية.--- SECTION: مثال على استخدام الخوارزمية --- sample_problem = create_problem_instance(5, [5, 20], [5, 30], [1, 3]) brute_force_solver(sample_problem) {'schedule': (0, 2, 1, 3, 4), 'tardiness': 164, 'finish_times': [5, 11, 21, 36, 51]}2023 - 1447--- VISUAL CONTEXT --- **DIAGRAM**: توضيح معاملات دالة إنشاء المشكلة Description: مخطط يوضح المعاملات المدخلة لدالة 'create_problem_instance' وكيفية تفسيرها. يشير السهم الأول من الرقم 5 إلى 'عدد المهام المراد إنشاؤها'. يشير السهم الثاني من القائمة [5, 20] إلى 'نطاق الموعد النهائي'. يشير السهم الثالث من القائمة [5, 30] إلى 'نطاق مدة المهمة'. يشير السهم الرابع من القائمة [1, 3] إلى 'مدى أهمية الوزن'. Key Values: 5, [5, 20], [5, 30], [1, 3] Context: يوضح هذا المخطط معنى كل معامل عند إنشاء مشكلة جدولة جديدة باستخدام دالة 'create_problem_instance' في سياق خوارزمية القوة الغاشمة.

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

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

ما هو الهدف الرئيسي من خوارزمية القوة الغاشمة للجدولة (Brute Force Solver)؟

الإجابة: الهدف الرئيسي هو إيجاد الجدول الأمثل (أفضل تسلسل للمهام) الذي يقلل من زمن التباطؤ الإجمالي (total weighted tardiness) مع الأخذ في الاعتبار أوقات إنجاز كل مهمة.

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

تلميح: فكر في ما تبحث عنه الخوارزمية كـ 'أفضل' حل.

كيف تقوم خوارزمية القوة الغاشمة باستكشاف جميع الجداول الممكنة؟

الإجابة: تستخدم الخوارزمية مكتبة 'itertools' في بايثون، وتحديداً الدالة 'permutations'، لتوليد جميع التباديل الممكنة لترتيب المهام.

الشرح: الدالة 'itertools.permutations' تقوم بإنشاء جميع التسلسلات الممكنة لعناصر قائمة المدخلات، مما يمثل جميع الجداول الممكنة في هذه الحالة.

تلميح: ما هي العملية الرياضية التي تعني ترتيب العناصر؟

ماذا تمثل القيم [5, 11, 21, 36, 51] في مثال نتيجة خوارزمية القوة الغاشمة؟

الإجابة: تمثل هذه القيم أوقات الانتهاء المتراكمة لكل مهمة في الجدول الأمثل الذي تم إيجاده. بمعنى أن المهمة الأولى انتهت عند الثانية 5، والثانية عند الثانية 11، وهكذا.

الشرح: في سياق الجدولة، إذا كانت المهام متسلسلة، فإن وقت انتهاء المهمة الحالية هو وقت انتهاء المهمة السابقة مضافاً إليه مدة المهمة الحالية. القائمة تمثل هذه الأوقات النهائية.

تلميح: تذكر أن الخوارزمية تحسب زمن إنجاز كل مهمة.

ما هي المعاملات التي تم استخدامها في دالة 'create_problem_instance' بالمثال؟

الإجابة: تم استخدام المعاملات التالية: 5 (عدد المهام)، [5, 20] (نطاق الموعد النهائي)، [5, 30] (نطاق مدة المهمة)، و [1, 3] (مدى أهمية الوزن).

الشرح: تم توضيح معنى كل معامل في المخطط، حيث يحدد الرقم الأول عدد المهام، والقوائم تحدد نطاقات للقيم التي سيتم توليدها عشوائياً للمواعيد النهائية، مدة المهام، وأوزانها.

تلميح: ارجع إلى وصف المخطط التوضيحي للمعاملات.

لماذا يعتبر استخدام خوارزمية القوة الغاشمة للجدولة غير عملي للمشاكل الكبيرة؟

الإجابة: لأن عدد الجداول الممكنة يزداد بشكل أسي (Factorial) مع زيادة عدد المهام. توليد وتقييم كل هذه الاحتمالات يصبح مستحيلاً حسابياً للمشاكل التي تحتوي على عدد كبير من المهام.

الشرح: إذا كان لديك N مهمة، فإن عدد التباديل الممكنة هو N! (N مضروب). قيمة N! تنمو بسرعة هائلة، مما يجعل البحث الشامل غير فعال.

تلميح: فكر في كيف ينمو عدد التباديل مع كل عنصر إضافي.