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

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

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

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

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

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

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

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

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

📝 ملخص الصفحة

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

يتم توضيح ذلك من خلال إنشاء نسخ متعددة للمشكلة بتزايد عدد العمال (5، 10، 15، 20)، حيث يتم توليد 100 نسخة لكل حجم، مع تحديد المهارات الإجمالية والمطلوبة والحد الأقصى للمهارات لكل عامل.

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

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

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

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

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

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

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

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

problems_with_5_workers = [] # 5 workers problems_with_10_workers = [] # 10 workers problems_with_15_workers = [] # 15 workers problems_with_20_workers = [] # 20 workers for i in range(100): # repeat 100 times problems_with_5_workers.append(create_problem_instance(10, 5, 8, 5)) problems_with_10_workers.append(create_problem_instance(10, 10, 8, 5)) problems_with_15_workers.append(create_problem_instance(10, 15, 8, 5)) problems_with_20_workers.append(create_problem_instance(10, 20, 8, 5))

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

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

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

import time def gets_solutions(problems, solver): total_seconds = 0 # total seconds required to solve all problems with this solver total_solved = 0 # total number of problems for which the solver found a solution solutions = [] # solutions returned by the solver for problem in problems: start_time = time.time() # starts the timer best_team = solver(problem) # computes the solution end_time = time.time() # stops the timer solutions.append(best_team) # remembers the solution total_seconds += end_time-start_time # computes total elapsed time if best_team != None: # if the best team is a valid team total_solved += 1 print("Solved {} problems in {} seconds".format(total_solved, total_seconds)) return solutions

نوع: METADATA

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

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

من المؤكد أن خوارزمية الحل بالقوة المفرطة ستجد أفضل حل ممكن، أي: أقل الفرق عددًا طالما أن هناك حل ممكن. ولكن كما تم مناقشته في بداية هذا الدرس فإن طبيعة الخوارزمية الشمولية تؤدي إلى زيادة هائلة في التكلفة الحاسوبية كلما زاد حجم المشكلة.يمكن توضيح ذلك من خلال إنشاء نسخ لمشكلات متعددة من حيث تزايد عدد العمال، ويمكن استخدام المقطع البرمجي التالي لتوليد نسخ متنوعة من مشكلة تكوين الفريق، حيث يتنوع عدد العمال ليكون: 5 و 10 و 15 و 20. ثم يتم توليد 100 نسخة بعدد العمال، وتشمل كل النسخ المهارات الإجمالية العشر، والمهارات الثمان المطلوبة، والخمس مهارات كحد أقصى لكل عامل:problems_with_5_workers = [] # 5 workers problems_with_10_workers = [] # 10 workers problems_with_15_workers = [] # 15 workers problems_with_20_workers = [] # 20 workers for i in range(100): # repeat 100 times problems_with_5_workers.append(create_problem_instance(10, 5, 8, 5)) problems_with_10_workers.append(create_problem_instance(10, 10, 8, 5)) problems_with_15_workers.append(create_problem_instance(10, 15, 8, 5)) problems_with_20_workers.append(create_problem_instance(10, 20, 8, 5))تقبل الدالة التالية قائمة بنسخ المشكلة وخوارزمية الحل بالقوة المفرطة، وتستخدم هذه الخوارزمية لإجراء العمليات الحسابية ثم استخراج الحل لجميع النسخ، كما أنها تسجل الوقت الإجمالي المطلوب (بالثواني) لحساب الحلول وكذلك العدد الإجمالي للنسخ التي يمكن إيجاد حل منها:import time def gets_solutions(problems, solver):total_seconds = 0 # total seconds required to solve all problems with this solver total_solved = 0 # total number of problems for which the solver found a solution solutions = [] # solutions returned by the solver for problem in problems:start_time = time.time() # starts the timer best_team = solver(problem) # computes the solution end_time = time.time() # stops the timer solutions.append(best_team) # remembers the solution total_seconds += end_time-start_time # computes total elapsed time if best_team != None: # if the best team is a valid team total_solved += 1print("Solved {} problems in {} seconds".format(total_solved, total_seconds))return solutions2023 - 1447

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

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

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

الإجابة: زيادة هائلة في التكلفة الحاسوبية.

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

تلميح: فكر في العلاقة بين حجم المشكلة والعبء على الحاسوب.

ماذا يهدف المقطع البرمجي المعطى في النص إلى توليده؟

الإجابة: توليد نسخ متعددة من مشكلة تكوين الفريق بأعداد عمال مختلفة (5، 10، 15، 20 عامل) مع ثبات المهارات المطلوبة والحد الأقصى للمهارات لكل عامل.

الشرح: يتم استخدام الدالة `create_problem_instance` لتوليد 100 نسخة لكل حجم من أحجام العمال المحددة، مما يسمح بدراسة تأثير زيادة عدد العمال على أداء الخوارزمية.

تلميح: ابحث عن الأرقام التي تتغير في الدالة `create_problem_instance`.

ما هي المدخلات التي تستقبلها الدالة `gets_solutions`؟

الإجابة: قائمة بنسخ المشكلة وخوارزمية الحل (solver).

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

تلميح: انظر إلى معامِلات الدالة `gets_solutions`.

ما هي المعلومات التي تسجلها الدالة `gets_solutions` أثناء معالجتها للمشكلات؟

الإجابة: الوقت الإجمالي المطلوب (بالثواني) لحساب الحلول، والعدد الإجمالي للنسخ التي تم إيجاد حل لها.

الشرح: الغرض من الدالة هو تقييم أداء خوارزمية معينة، لذلك تسجل الوقت المستغرق وعدد المشكلات التي تم حلها بنجاح.

تلميح: ابحث عن المتغيرات التي يتم تحديثها داخل حلقة `for problem in problems`.

كيف تتعامل الدالة `gets_solutions` مع الحالات التي لا تجد فيها الخوارزمية حلاً (best_team is None)؟

الإجابة: لا يتم زيادة العداد `total_solved`، ولا يتم تضمين الحل (None) في قائمة `solutions` بهذا السياق (ولكن الحل يتم احتسابه ضمن الوقت).

الشرح: العداد `total_solved` يمثل عدد المشكلات التي تم إيجاد حل صحيح لها، لذا لا يتم زيادته إذا كان الحل غير صالح (None).

تلميح: لاحظ الشرط الذي يتم عنده زيادة `total_solved`.