📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
خوارزمية القوة الغاشمة للجدولة
نوع: محتوى تعليمي
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! تنمو بسرعة هائلة، مما يجعل البحث الشامل غير فعال.
تلميح: فكر في كيف ينمو عدد التباديل مع كل عنصر إضافي.