📄 النص الكامل للصفحة
--- SECTION: Code Snippet 1 ---
candidate_estimate = shortest_distance[candidate]+heuristic(candidate, target_cell)
if candidate_estimate < best_estimate:
winner = candidate best_estimate=candidate_estimate return winnerيستخدم التطبيق المشار إليه بالأعلى حلقة التكرار For لفحص الخلايا المُرشحة في المجموعة وتحديد الأفضل. ولتطبيق أكثر كفاءة، قد يُستخدم طابور الأولوية (Priority Queue) في تحديد المُرشح الأفضل دون الحاجة إلى فحص كل المُرشحين بصورة متكررة. تُستخدم دالة get_best_candidate() كدالة مُساعدة بواسطة الدالة الاستدلالية، يُستخدم هذا التطبيق كذلك astar_maze_solver() الموضحة فيما يلي. وبالإضافة إلى الدالتين المُساعدتين ()get_accessible_neighbors_weighted و ()reconstruct_shortest_path المُشار إليهما في القسم السابق.--- SECTION: Code Snippet 2 ---
import sys def astar_maze_solver(start_cell:tuple,
target_cell:tuple,
maze:np.ndarray,
get_neighbors: Callable,
heuristic:Callable,
verbose:bool=False):cell_visits=0shortest_distance = {}
shortest_distance[start_cell] = 0parent = {}
parent[start_cell] = start_cell expansion_candidates = set([(start_cell)])fully_expanded = set()# while there are still cells to be expanded while len(expansion_candidates) > 0:best_cell = get_best_candidate(expansion_candidates,shortest_distance,heuristic)if best_cell == None: break if verbose: print('\nExpanding cell', best_cell)# if the target cell has been reached, reconstruct the shortest path and exit if best_cell == target_cell:2023 - 1447
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هي وظيفة المتغير `candidate_estimate` في الكود؟
الإجابة: يمثل القيمة التقديرية لأقصر مسافة إلى الخلية المرشحة مضافاً إليها القيمة الاستدلالية (heuristic) للوصول إلى الخلية الهدف.
الشرح: يُستخدم `candidate_estimate` لمقارنة المسافات المقدرة بين الخلايا المرشحة، بهدف اختيار الخلية الأقرب والأكثر وعداً نحو الهدف.
تلميح: فكر في العناصر التي تُستخدم لحساب أفضل مرشح في خوارزميات البحث.
ما هي الاستراتيجية البديلة لحلقة التكرار `For` التي يُمكن استخدامها لتحسين كفاءة التطبيق؟
الإجابة: يمكن استخدام طابور الأولوية (Priority Queue) لتحديد المرشح الأفضل بشكل أكثر كفاءة، دون الحاجة إلى فحص كل المرشحين بصورة متكررة.
الشرح: طابور الأولوية يسمح باسترجاع الخلية ذات أقل قيمة تقديرية (أفضل مرشح) بسرعة، مما يقلل من عدد العمليات المطلوبة مقارنة بفحص جميع المرشحين في كل خطوة.
تلميح: ما هي هياكل البيانات التي تساعد في استرجاع العنصر ذي الأولوية القصوى بكفاءة؟
ما هو الدور الرئيسي للدالة `get_best_candidate()`؟
الإجابة: تعمل كدالة مساعدة لتحديد الخلية المرشحة الأفضل من بين مجموعة المرشحين المتاحة، وذلك بالاعتماد على المسافة القصيرة والقيمة الاستدلالية.
الشرح: هذه الدالة هي قلب عملية اتخاذ القرار في الخوارزمية، حيث تقيّم كل خلية مرشحة لاختيار الأكثر احتمالاً للوصول إلى الهدف بأقصر مسار.
تلميح: في سياق خوارزميات البحث، ما هي المهمة الأساسية لتحديد 'أفضل' خطوة تالية؟
ما هي وظيفة المتغير `expansion_candidates` في دالة `astar_maze_solver`؟
الإجابة: يحتوي على مجموعة من الخلايا التي لا تزال بحاجة إلى الفحص والتوسع (expansion) لاكتشاف مسارات جديدة.
الشرح: هذه المجموعة تمثل 'الحدود' الحالية لعملية البحث، حيث يتم اختيار أفضل خلية منها في كل تكرار لمحاولة توسيع البحث.
تلميح: فكر في أنواع الخلايا التي تحتاج الخوارزمية إلى استكشافها للوصول إلى الهدف.
متى تتوقف حلقة `while` الرئيسية في دالة `astar_maze_solver`؟
الإجابة: تتوقف الحلقة عندما لا يعود هناك خلايا متاحة للفحص (`len(expansion_candidates) == 0`)، أو عندما يتم الوصول إلى الخلية الهدف.
الشرح: الهدف هو إيجاد أقصر مسار. إذا لم يتم العثور على خلايا جديدة لاستكشافها ولم يتم الوصول للهدف، فهذا يعني عدم وجود مسار. وإذا تم الوصول للهدف، فهذا يعني إكمال البحث.
تلميح: ما هي الشروط التي تستدعي إنهاء عملية البحث عن مسار؟