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

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

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

الدرس: استخدام خوارزمية البحث بأولوية الاتساع في حل ألغاز المتاهة

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

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

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

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

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

📝 ملخص الصفحة

تشرح هذه الصفحة تطبيق خوارزمية البحث بأولوية الاتساع (BFS) لحل ألغاز المتاهة باستخدام برمجة Python. يبدأ المحتوى بتوضيح كيفية استخدام دالة `bfs_maze_solver` التي تستخدم خلية البداية وخلية الهدف لتطبيق BFS، مع الاستعانة بدالة `get_accessible_neighbors` لفحص الخلايا المجاورة المتاحة أثناء البحث.

يتم عرض كود Python لدالة `reconstruct_shortest_path` التي تعيد بناء المسار الأقصر من خلية الهدف إلى خلية البداية بتتبع المسار عكسياً، وهي دالة مساعدة تستخدم أيضاً في خوارزميات أخرى مثل البحث بأولوية الأفضل (A* search).

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

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

--- SECTION: استخدام خوارزمية البحث بأولوية الاتساع في حل ألغاز المتاهة --- استخدام خوارزمية البحث بأولوية الاتساع في حل ألغاز المتاهة--- SECTION: Using BFS to Solve Maze Puzzles --- Using BFS to Solve Maze Puzzlesتُستخدم دالة ()bfs_maze_solver المشار إليها في هذا الجزء خوارزمية البحث بأولوية الاتساع (BFS) لحل ألغاز المتاهة باستخدام خلية البداية وخلية الهدف. يُستخدم هذا النموذج دالة ()get_accessible_neighbors المحددة بالأعلى لاستدعاء الخلايا المجاورة التي يمكن فحصها عند أي نقطة أثناء البحث. وبمجرد عثور خوارزمية البحث بأولوية الاتساع (BFS) على الخلية الهدف، ستُستخدم دالة ()reconstruct_shortest_path الموضحة بالأسفل لإعادة بناء المسار الأقصر واستدعائه، وذلك بتتبع المسار بصورة عكسية من خلية الهدف إلى خلية البداية:--- SECTION: Python Code: reconstruct_shortest_path function --- def reconstruct_shortest_path(parent:dict, start_cell:tuple, target_cell:tuple): shortest_path = [] my_parent=target_cell # start with the target_cell # keep going from parent to parent until the search cell has been reached while my_parent!=start_cell: shortest_path.append(my_parent) # append the parent my_parent=parent[my_parent] # get the parent of the current parent shortest_path.append(start_cell) # append the start cell to complete the path shortest_path.reverse() # reverse the shortest path return shortest_pathستُستخدم دالة ()reconstruct_shortest_path أيضًا لإعادة بناء الحل لخوارزمية البحث بأولوية الأفضل (A* search) المشار إليها سلفًا في هذا الدرس. وبالنظر إلى تعريف الدالتين ()get_accessible_neighbors و ()reconstruct_shortest_path المساعدتين، يمكن تنفيذ دالة ()bfs_maze_solver على النحو التالي:--- SECTION: Python Code: bfs_maze_solver function --- from typing import Callable # used to call a function as an argument of another function def bfs_maze_solver(start_cell:tuple, target_cell:tuple, maze:np.ndarray, get_neighbors: Callable, verbose:bool=False): # by default, suppresses descriptive output text cell_visits=0 # keeps track of the number of cells that were visited during the search visited = set() # keeps track of the cells that have already been visited to_expand = [] # keeps track of the cells that have to be expanded # add the start cell to the two lists visited.add(start_cell) to_expand.append(start_cell) # remembers the shortest distance from the start cell to each other cell shortest_distance = {} # the shortest distance from the start cell to itself, zero2023 - 1447

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

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

ما هي وظيفة المتغير `to_expand` في دالة `bfs_maze_solver`؟

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

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

تلميح: في البحث، ما هي العقد التي نحتاج إلى زيارتها لاحقاً؟

ما هي خوارزمية البحث بأولوية الاتساع (BFS) المستخدمة في سياق حل ألغاز المتاهات؟

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

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

تلميح: فكر في كيفية استكشاف الخوارزمية للمتاهة، هل تستكشف عميقاً بسرعة أم تتوسع أفقياً أولاً؟

ما هو الغرض من الدالة `reconstruct_shortest_path` عند استخدامها مع خوارزمية البحث بأولوية الاتساع لحل المتاهات؟

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

الشرح: بما أن BFS يجد أقصر مسار، فإن تتبع الوالد (parent) لكل خلية بدءًا من الهدف وصولًا إلى البداية يعطينا المسار الأقصر.

تلميح: بعد العثور على الهدف، كيف يمكن معرفة الطريق الذي أدى إلى هناك؟

ما هو الدور الذي تلعبه الدالة `get_accessible_neighbors` في سياق استخدام BFS لحل المتاهات؟

الإجابة: تقوم الدالة `get_accessible_neighbors` بتحديد وإرجاع الخلايا المجاورة التي يمكن الوصول إليها وفحصها من الخلية الحالية أثناء عملية البحث في المتاهة.

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

تلميح: عندما تكون في خلية، ما هي الخطوة المنطقية التالية لاستكشاف المتاهة؟

ما هو الغرض من المتغير `visited` في دالة `bfs_maze_solver`؟

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

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

تلميح: لماذا نحتاج إلى تذكر الأماكن التي زرناها بالفعل؟