📄 النص الكامل للصفحة
يمكن تطبيق هذا بسهولة في صورة دالة البايثون كما يلي:--- SECTION: Manhattan Heuristic Function ---
def manhattan_heuristic(candidate_cell:tuple, target_cell:tuple):
x1,y1=candidate_cell x2,y2=target_cell return abs(x1 - x2) + abs(y1 - y2)يُستخدم المقطع البرمجي التالي لاختبار إمكانية استخدام هذا الاستدلال الذكي لدعم astar_maze_solver() في البحث بشكل أسرع في كل من الحالات الموزونة وغير الموزونة:--- SECTION: Unweighted A* Search Example ---
start_cell=(14,0)
target_cell=(5,10)solution_astar_unw_mn, distance_astar_unw_mn, cell_visits_astar_unw_mn=astar_maze_solver(
start_cell,
target_cell,
big_maze,
get_accessible_neighbors,
manhattan_heuristic,
verbose=False)print('\nA* Search unweighted with the Manhattan heuristic.')
print('\nShortest Path:', solution_astar_unw_mn)
print('Cells on the Shortest Path:', len(solution_astar_unw_mn))
print('Shortest Path Distance:', distance_astar_unw_mn)
print('Number of cell visits:', cell_visits_astar_unw_mn)--- SECTION: Weighted A* Search Setup ---
horz_vert_w=1 # weight for horizontal and vertical moves diag_w=3 # weight for diagonal moves--- SECTION: Weighted A* Search Example ---
solution_astar_w_mn, distance_astar_w_mn, cell_visits_astar_w_mn=astar_maze_solver(
start_cell,
target_cell,
big_maze,
partial(get_accessible_neighbors_weighted,
horizontal_vertical_weight=horz_vert_w,
diagonal_weight=diag_w),
manhattan_heuristic,
verbose=False)print('\nA* Search weighted with the Manhattan heuristic.')
print('\nShortest Path:', solution_astar_w_mn)
print('Cells on the Shortest Path:', len(solution_astar_w_mn))
print('Shortest Path Distance:', distance_astar_w_mn)
print('Number of cell visits:', cell_visits_astar_w_mn)2023 - 1447
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هي الدالة البرمجية المسؤولة عن حساب المسافة مانهاتن (Manhattan distance)؟
الإجابة: الدالة هي `manhattan_heuristic(candidate_cell: tuple, target_cell: tuple)`.
الشرح: الدالة `manhattan_heuristic` معرفة بوضوح في بداية المقطع البرمجي وهي مصممة لحساب المسافة مانهاتن بين خليتين.
تلميح: ابحث عن اسم الدالة الذي يتطابق مع اسم الاستدلال المذكور في السياق.
ما هي صيغة حساب المسافة مانهاتن بين خليتين (x1, y1) و (x2, y2)؟
الإجابة: المسافة مانهاتن تُحسب بالصيغة: `abs(x1 - x2) + abs(y1 - y2)`.
الشرح: الدالة `manhattan_heuristic` تطبق هذه الصيغة مباشرة لحساب الفرق المطلق في الإحداثيات السينية والصادية وجمعهما.
تلميح: انظر إلى العمليات الحسابية داخل دالة `manhattan_heuristic`.
لأي خوارزمية بحث يُمكن استخدام دالة `manhattan_heuristic` لدعمها؟
الإجابة: يمكن استخدامها لدعم خوارزمية البحث A* (`astar_maze_solver`)، سواء في الحالات الموزونة أو غير الموزونة.
الشرح: المقطع البرمجي يوضح بوضوح كيف يتم تمرير `manhattan_heuristic` كوسيط لدالة `astar_maze_solver` سواء كانت البحث غير الموزون أو الموزون.
تلميح: ابحث عن اسم الخوارزمية التي يتم استدعاؤها في الأمثلة البرمجية.
في مثال البحث غير الموزون باستخدام A*، ما هي نقاط البداية والنهاية المحددة؟
الإجابة: نقطة البداية هي `(14,0)` ونقطة النهاية هي `(5,10)`.
الشرح: المتغيرات `start_cell` و `target_cell` تُعيّن صراحةً قبل استدعاء دالة `astar_maze_solver` في هذا الجزء من الكود.
تلميح: حدد الأسطر التي تُعرف فيها المتغيرات `start_cell` و `target_cell` في قسم 'Unweighted A* Search Example'.
ما هي الأوزان (weights) المستخدمة في مثال البحث الموزون (Weighted A* Search)؟
الإجابة: وزن الحركة الأفقية والرأسية (`horz_vert_w`) هو 1، ووزن الحركة القطرية (`diag_w`) هو 3.
الشرح: القسم 'Weighted A* Search Setup' يحدد هذه الأوزان بوضوح كقيم للمتغيرات `horz_vert_w` و `diag_w`.
تلميح: ابحث عن المتغيرات التي تُعرّف قيم الأوزان قبل استدعاء البحث الموزون.