مینیمکس با هرس آلفا–بتا
بهترین حرکت در درخت بازی: بازیکنها به نوبت بیشینه و کمینه میکنند و شاخههایی که روی نتیجه اثری ندارند هرس میشوند.
در یک بازی دونفره، بیشینهکننده میخواهد امتیاز را بالا ببرد و کمینهکننده پایین. درخت بازی همهی حرکتها را نشان میدهد و برگها امتیاز پایان بازیاند. مینیمکس از برگها بالا میآید: در سطح بیشینه بیشینهی فرزندان و در سطح کمینه کمینهشان.
ادامهی توضیح ↓- زمان:
O(n) worst, about O(n^¾) with good ordering - حافظه:
O(log n) - هوروویتز–ساهنی، فصل ۸
هشت برگ در سه سطح (بیشینه، کمینه، بیشینه)؛ دو بار هرس رخ میدهد و فقط ۵ برگ دیده میشود. جواب ۵ است.
INF = float("inf")def alpha_beta(leaves):return search(leaves, 0, len(leaves) - 1, True, -INF, INF)def search(leaves, lo, hi, maximizing, alpha, beta):if lo == hi:return leaves[lo]mid = (lo + hi) // 2if maximizing:best = search(leaves, lo, mid, False, alpha, beta)alpha = max(alpha, best)if alpha >= beta:return bestbest = max(best, search(leaves, mid + 1, hi, False, alpha, beta))return bestbest = search(leaves, lo, mid, True, alpha, beta)beta = min(beta, best)if alpha >= beta:return bestbest = min(best, search(leaves, mid + 1, hi, True, alpha, beta))return best
شروع اجرا
درخت فراخوانیهای بازگشتی
نارنجی پر = فراخوانی در حال اجرا · حاشیهی نارنجی = هنوز روی پشته · خاکستری = تمام شده
متغیرهای محلی
نارنجی = در همین گام عوض شد
leaves list
Call stack
- alpha_beta()خط 4
توضیح
ایده
در یک بازی دونفره، بیشینهکننده میخواهد امتیاز را بالا ببرد و کمینهکننده پایین. درخت بازی همهی حرکتها را نشان میدهد و برگها امتیاز پایان بازیاند. مینیمکس از برگها بالا میآید: در سطح بیشینه بیشینهی فرزندان و در سطح کمینه کمینهشان.
اینجا آرایه برگهای یک درخت دودویی کامل است: دو حرکت در هر نوبت و نوبت اول با بیشینهکننده.
هرس آلفا–بتا
α: امتیازی که بیشینهکننده تا اینجا تضمین کرده.β: امتیازی که کمینهکننده تا اینجا تضمین کرده.
اگر جایی α ≥ β شد، حریف هرگز اجازه نمیدهد بازی به این شاخه برسد؛ پس بقیهی فرزندان هرس میشوند. جواب دقیقاً همان مینیمکس است، فقط سریعتر.
ترتیب حرکتها
با ترتیب خوب (بهترین حرکت اول) تعداد برگهایی که دیده میشوند تقریباً به n^¾ (برای درخت دودویی) کم میشود؛ با ترتیب بد هیچ صرفهجویی نیست.
در trace به چه چیزی نگاه کنی
- درخت فراخوانیها همان درخت بازی است؛ بازهی
lo..hiزیر آرایه زیردرخت فعلی است. - «ترتیب خوششانس» و «ترتیب بدشانس» را از نظر تعداد برگهای دیدهشده مقایسه کن.