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

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

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

الدرس: دالة التباديل وخوارزمية حل القوة المفرطة

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

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

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

نوع المحتوى: درس تعليمي

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

📝 ملخص الصفحة

تتناول هذه الصفحة حل مشكلة التباطؤ الموزون للآلة الواحدة (SMWT) باستخدام خوارزميات القوة المفرطة. تبدأ بتقديم دالة `compute_schedule_tardiness()` التي تحسب التباطؤ الكلي للجدول الزمني للمهام بناءً على أوقات الانتهاء والأوزان والمواعيد النهائية لكل مهمة.

يتم شرح استخدام دالة `itertools.permutations()` في بايثون لإنشاء جميع الجداول الممكنة (التباديل) للمهام، مع تقديم مثال عملي يوضح كيفية توليد جميع التبديلات لمجموعة من ثلاث مهام.

تناقش الصفحة خوارزمية حل القوة المفرطة وكيفية تطبيقها على مشكلة SMWT، مع التركيز على أن هذه الخوارزمية مناسبة فقط للمشكلات الصغيرة بسبب التعقيد الحسابي العالي. حيث يزداد عدد الجداول الممكنة بشكل مضاعف (N!) مع زيادة عدد المهام N.

يتم تقديم أمثلة رقمية توضح النمو السريع للتعقيد: 5 مهام تنتج 120 جدولاً، 10 مهام تنتج 3,628,800 جدولاً، و11 مهام تنتج 39,916,800 جدولاً. مما يوضح سبب عدم جدوى خوارزميات القوة المفرطة للمشكلات الكبيرة.

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

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

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

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

job_id=schedule[pos] # schedule[pos] is the id in the 'pos' position of the schedule if pos == 0: # if this is the job that was scheduled first (position 0) # the finish time of the job that starts first is equal to its run time finish_times[pos] = durations[job_id] else: # for all jobs except the one that was scheduled first # the finish time is equal to the finish time of the previous time plus the job's run time finish_times[pos] = finish_times[pos-1] + durations[job_id] # computes the weighted tardiness of this job and adds it to the schedule's overall tardiness schedule_tardiness += weights[job_id] * max(finish_times[pos] - deadlines[job_id], 0) return schedule_tardiness, finish_times

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

ستُستخدم الدالة ()compute_schedule_tardiness لتقييم الجداول، وستكون هذه الدالة بمثابة أداة مفيدة لكل الخوارزميات التي سيتم تقديمها في هذا الدرس لحل مشكلة التباطؤ الموزون للآلة الواحدة (SMWT).

دالة التباديل fx Itertools.Permutations() Function

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

دالة التباديل fx Itertools.Permutations() Function

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

تستخدم خوارزمية حل القوة المفرطة الدالة ()itertools.permutations لإنشاء كل الجداول الممكنة (تجميعات المهام). ثم تحسب تباطؤ كل جدول ممكن وتستخرج أفضل جدول (الجدول ذو التباطؤ الكلي الأدنى). تقبل الدالة ()itertools.permutations عنصرًا واحدًا متكررًا (مثل: قائمة) وتُنشئ كل تبديل ممكن لقيم المدخلات. ويوضح المثال البسيط التالي استخدام دالة ()permutations ويظهر التبديلات لكل عناوين المهام المعطاة:

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

تُستخدم خوارزميات حل القوة المفرطة بشكل أفضل لحل المشكلات الصغيرة. فالنسخة الخاصة بمشكلة التباطؤ الموزون للآلة الواحدة ذات عدد N من المهام، لديها عدد N! من الجداول الممكنة، فعندما يكون 5 = N، سيكون الناتج 120 = !5 جدولاً، ولكن هذا العدد يتزايد بشكل كبير عندما يكون 10 = N إلى !10 = 3,628,800، وعندما يكون 11 = N إلى !11 = 39,916,800.

Example Code for Permutations

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

job_ids = [0,1,2] # the ids of 3 jobs for schedule in itertools.permutations(job_ids): print(schedule)

Output of Permutations Example

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

(0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)

خوارزمية حل القوة المفرطة Brute-Force Solver

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

خوارزمية حل القوة المفرطة Brute-Force Solver

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

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

نوع: METADATA

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

🔍 عناصر مرئية

ملاحظة حول خوارزميات القوة المفرطة

A pink highlighted box explaining the computational complexity of brute-force algorithms for the Weighted Tardiness problem, specifically how the number of possible schedules (N!) grows rapidly with N. It provides examples for N=5, N=10, and N=11.

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

job_id=schedule[pos] # schedule[pos] is the id in the 'pos' position of the schedule if pos == 0: # if this is the job that was scheduled first (position 0) # the finish time of the job that starts first is equal to its run time finish_times[pos] = durations[job_id] else: # for all jobs except the one that was scheduled first # the finish time is equal to the finish time of the previous time plus the job's run time finish_times[pos] = finish_times[pos-1] + durations[job_id] # computes the weighted tardiness of this job and adds it to the schedule's overall tardiness schedule_tardiness += weights[job_id] * max(finish_times[pos] - deadlines[job_id], 0) return schedule_tardiness, finish_timesستُستخدم الدالة ()compute_schedule_tardiness لتقييم الجداول، وستكون هذه الدالة بمثابة أداة مفيدة لكل الخوارزميات التي سيتم تقديمها في هذا الدرس لحل مشكلة التباطؤ الموزون للآلة الواحدة (SMWT).--- SECTION: دالة التباديل fx Itertools.Permutations() Function --- دالة التباديل fx Itertools.Permutations() Functionتستخدم خوارزمية حل القوة المفرطة الدالة ()itertools.permutations لإنشاء كل الجداول الممكنة (تجميعات المهام). ثم تحسب تباطؤ كل جدول ممكن وتستخرج أفضل جدول (الجدول ذو التباطؤ الكلي الأدنى). تقبل الدالة ()itertools.permutations عنصرًا واحدًا متكررًا (مثل: قائمة) وتُنشئ كل تبديل ممكن لقيم المدخلات. ويوضح المثال البسيط التالي استخدام دالة ()permutations ويظهر التبديلات لكل عناوين المهام المعطاة:تُستخدم خوارزميات حل القوة المفرطة بشكل أفضل لحل المشكلات الصغيرة. فالنسخة الخاصة بمشكلة التباطؤ الموزون للآلة الواحدة ذات عدد N من المهام، لديها عدد N! من الجداول الممكنة، فعندما يكون 5 = N، سيكون الناتج 120 = !5 جدولاً، ولكن هذا العدد يتزايد بشكل كبير عندما يكون 10 = N إلى !10 = 3,628,800، وعندما يكون 11 = N إلى !11 = 39,916,800.--- SECTION: Example Code for Permutations --- job_ids = [0,1,2] # the ids of 3 jobs for schedule in itertools.permutations(job_ids): print(schedule)--- SECTION: Output of Permutations Example --- (0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)--- SECTION: خوارزمية حل القوة المفرطة Brute-Force Solver --- خوارزمية حل القوة المفرطة Brute-Force Solverلقد تعلمت في الدرس السابق طريقة استخدام خوارزمية حل القوة المفرطة في مشكلة تكوين فريق. وعلى الرغم من أن خوارزمية الحل هذه أظهرت بطئًا شديدًا في المشكلات الأكبر حجمًا، إلا أن قدرتها على إيجاد الحل الأمثل (أفضل حل ممكن) لنسخ المشكلة ذات الحجم الصغير كانت مفيدة في تقييم جودة الحلول المنتجة بواسطة خوارزميات التحسين الأسرع التي لا تتضمن إيجاد الحل الأمثل. وبالمثل، يمكن استخدام خوارزمية حل القوة الموزون للآلة الواحدة (SMWT).2023 - 1447--- VISUAL CONTEXT --- **FIGURE**: ملاحظة حول خوارزميات القوة المفرطة Description: A pink highlighted box explaining the computational complexity of brute-force algorithms for the Weighted Tardiness problem, specifically how the number of possible schedules (N!) grows rapidly with N. It provides examples for N=5, N=10, and N=11. Key Values: N=5 -> 5! = 120 schedules, N=10 -> 10! = 3,628,800 schedules, N=11 -> 11! = 39,916,800 schedules Context: Illustrates why brute-force is only suitable for small problems due to factorial growth in complexity, making it impractical for larger problem sizes.

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

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

ما هو الغرض الرئيسي من الدالة `itertools.permutations()` في سياق خوارزميات حل القوة المفرطة لمشكلة التباطؤ الموزون للآلة الواحدة (SMWT)؟

الإجابة: تُستخدم الدالة `itertools.permutations()` لإنشاء جميع الترتيبات أو الجداول الممكنة للمهام، مما يسمح لخوارزمية القوة المفرطة باختبار كل جدول ممكن للعثور على الأفضل.

الشرح: تقوم الدالة `itertools.permutations()` بتوليد جميع التباديل الممكنة لعناصر قائمة المدخلات. في سياق SMWT، يتم تطبيقها على معرفات المهام لإنشاء كل تسلسل ممكن لتنفيذ هذه المهام.

تلميح: فكر في وظيفة إنشاء كل التجميعات الممكنة للمدخلات.

كيف تساهم الدالة `compute_schedule_tardiness` في تقييم الجداول في مشكلة التباطؤ الموزون للآلة الواحدة؟

الإجابة: تحسب الدالة `compute_schedule_tardiness` إجمالي التباطؤ الموزون لجدول معين، مما يجعلها أداة أساسية لتقييم مدى جودة كل جدول ممكن يتم إنشاؤه بواسطة خوارزمية القوة المفرطة.

الشرح: تمثل الدالة `compute_schedule_tardiness` مقياس الأداء الذي تسعى الخوارزمية إلى تقليله. تقوم بحساب التباطؤ الموزون لكل مهمة في الجدول ثم تجمعها للحصول على التباطؤ الكلي للجدول.

تلميح: ما هو الهدف النهائي لتقييم الجداول في هذه المشكلة؟

لماذا تعتبر خوارزمية حل القوة المفرطة (Brute-Force Solver) مناسبة فقط للمشكلات الصغيرة في سياق SMWT؟

الإجابة: تعتبر خوارزمية القوة المفرطة مناسبة للمشكلات الصغيرة بسبب النمو الأسي (عاملي) لعدد الجداول الممكنة مع زيادة عدد المهام (N!). فمع زيادة N، يصبح عدد الاحتمالات كبيرًا جدًا لدرجة تجعل الحسابات غير عملية.

الشرح: عدد الجداول الممكنة لمشكلة SMWT هو N! (مضروب N). فعلى سبيل المثال، إذا كان N=5، فإن عدد الجداول هو 120. ولكن إذا كان N=10، فإن العدد يصبح 3,628,800، مما يجعل خوارزمية القوة المفرطة بطيئة للغاية وغير فعالة للمشكلات الأكبر.

تلميح: تذكر كيف يزداد عدد الحلول الممكنة بشكل كبير مع كل مهمة إضافية.

ما هي العلاقة بين خوارزمية حل القوة المفرطة (Brute-Force Solver) وخوارزميات التحسين الأسرع في مشكلة SMWT؟

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

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

تلميح: فكر في دور الحلول المثلى في التحقق من صحة الحلول الأخرى.