Privacy Policy Cookie Policy Terms and Conditions Algorytm alpha-beta - Wikipedia, wolna encyklopedia

Algorytm alpha-beta

Z Wikipedii

Algorytm Alfa-Beta jest algorytmem przeszukiwawczym, redukującym liczbę węzłów, które muszą być rozwiązywane w drzewa przeszukiwawczych przez algorytm Minimax. Jest to przeszukiwanie wykorzystywane w grach dwuosobowych, kółko i krzyżyk, szachy, Go. Warunkiem stopu jest znalezienie przynajmniej jednego rozwiązania poprawiajacego ruch gorszy niż poprzedni. Nie przyniesie korzyści graczowi, który wykonałby taki ruch, dlatego też nie ma potrzeby przeszukiwać tej gałęzi drzewa dalej. Ta technika pozwala zaoszczędzić czas poszukiwania bez wpływania na wynik końcowy.

Spis treści

[edytuj] Poprawiony minimax

korzyść płynąca z algorytmu alfa-beta leży w fakcie, że niektóre gałęzie drzewa przeszukiwawczego mogą zostać odcięte. Czas przeszukiwanie ograniczony zostaje do przeszukania najbardziej obiecujących poddrzew w związku z czym możemy zejść głębiej w tym samym czasie. Tak samo jak swój poprzednik algorytm należy do algorytmów "branch and bound". Współczynnik rozgałęzienia jest dwukrotnie mniejszy niż w metodzie minimax. Algorytm staje się wydajniejszy, gdy węzły rozwiązywane są układane w porządku optymalnym, lub jemu bliskim.

Ze średnim albo stałym współczynnikiem rozgałęzienia b i głębokością d maxymalna ilość rozwiązanych węzłów (kiedy porządkowanie ruchów jest przypadkiem pesymistycznym) wynosi O(b*b*...*b) = O(bd) i jest taki sam jak w przypadku minimax. Jeśli porządek wykonywania ruchów jest optymalny, czyli najlepsze ruchy są przeszukiwane jako pierwsze ilość przeszukiwanych pozycji wyniesie O(b*1*b*1*...*b) dla nieparzystej głębokości i odpowiednio O(b*1*b*1*...*1) gdy głębokość będzie parzysta lub O(b^{d/2}) = O(\sqrt{b^d}). W późniejszych przypadkach efektywny współczynnik rozgałęzienia jest redukowany do pierwiastka, lub przeszukiwanie może odbywać się dwukrotnie głębiej.[1]. b*1*b*1*... bierze się stąd, że wszystkie pierwsze ruchy gracza muszą zostać sprawdzone w celu znalezienia ruchu najlepszego, ale dla każdego kolejnego tylko najlepszy ruch gracza jest potrzebny, aby odrzucić wszystkie ruchy poza pierwszym, najlepszym ruchem – Alfa-Beta dba o to, że żaden inny ruch drugiego gracza nie musi być brany pod uwagę. Jeśli b=40(szachy) i głębokość wynosi 12 współczynnik pomiędzy optymalnym i pesymistycznym przypadkiem wspłczynnika jest bliski 406.

Normalnie w czasie alfa-beta poddrzewa są tymczasowo zdominowane przez przewagę pierwszego gracza(kiedy ruch gracza są dobre i w każdym wyszukiwaniu głębokość jest odpowiednia, ale każda odpowiedź drugiego gracza jest nastawiona na odparcie ataku) lub vice versa. Ta przewaga może zmieniać strony wiele razy w trakcie poszukiwań jeśli porządek ruchów jest niewłaściwy za każdym razem prowadząc do marnotrawstwa. Jako, że ilość pozycji zmniejsza się wykładniczo dla każdego ruch początkowego, warto zastanowić się nad sortowaniem pierwszych ruchów. Zastsowanie sortowania na każdej głębokości wykładniczo zredukuje ilość przeszukiwanych pozycji, ale sortowanie wszystkich pozycji na głębokości bliższej korzeniwi jest relatywnie tańsza z powodu ich małej ilości. W praktyce porządkwanie ruchów jest określane przez wyniki wcześniejszych mniejszych poszukiwań, takich jak iterative deepening.

Algorytm utrzymuje dwie wartości alfa i beta, które reprezentują minimalny wynik MAX gracza i maksymalny wynik gracza MIN. Pczątkowo alfa jest -nieskończonością a beta +nieskończonścią. W miarę postępowania rekursji okno(alfa-beta) staje się mniejsze i kiedy beta staje się miejsze niż alfa ozbacza to, że obecna pozycja nie może być wynikiem najlepszej gry przez obu graczy i w skutek tego nie ma potrzeby przeszukiwania głębiej.

[edytuj] Usprawnienia Heurystyczne

Dalsza pprawa może zostać osiągnięta bez utraty skuteczności poprzez użycie porządku herystyki do przeszukiwania drzew, które zostają odcięte wcześnie. Na przykład w szachach ruchy, które biją pionki mogą być sprawdzone przed innymi, albo ruchy punkktowane wysoko w poprzednich analizach mogą być sprawdzane przed innymi. Inną, częstą, tanią metodą jest heurystyką jest sprawdzenie na początku ruchów, które spowodowały beta-odccięcie na tej samej głębokości. Ida może zostać zgeneralizowana jako refutation tables.


Przeszukiwanie może stać się nawet szybsze poprzez rozważanie wąskiego okna przeszukiwawczego bazowanego na doświadczeniu. To jest znane jako aspiration search. W przypadku ekstremalnym przeszukiwanie jest wykonywane z alfa równym beta techniką zwaną zero-window search, null-window search, lub scout search. Jest to użyteczne dla wygrywających/przegrywających przeszukiwań w pobliżu końca gry, gdzie najwęższe okno i proste rozwiązania przegrywające/wygrywające mogą prowadzić do zakończenia rozgrywki. Jeśli aspiration search się nie uda powinno się wykryć, czy nie udało się z powodu, że alfa była za duża/beta za mała. To da informację o tym czy wartości okna mogą być użyteczne w poszukiwaniu rozwiązania na nowo.


[edytuj] Inne algorytmy

Bardziej zaawansowane algorytmy są nawet szybsze w obliczaniu dokładnej wartości minimax są znane jako Negascout and MTD-f

Od kiedy minimax i jego warianty dziedziczą z depth-first, strategia taka jak iterative deepening jest zazwyczaj używana w parze z alfa-beta po to, aby dobry ruch został zwrócony nawet jak algorym zstał przerwany zanim zakończył swoje działanie. Inną przewagą używania metod przeszukiwania iteracyjnego jest to, że na niskich głębokościach dają wskazówki do porządkowania ruchów, które mogą być pomocne w odcinaniu gałęzi dla większych głębokości znacznie wcześniej niż było by to możliwe w innym przypadku.

Algorytmy takie jak SSS* z drugiej strony używają strategii best-first strategy.


Algorithms like , on the other hand, use the best-first strategy. This can potentially make them more time-efficient, but typically at a heavy cost in space-efficiency.

[edytuj] Pseudocode

Pseudocode metoda alfa-beta

function minimax(node, depth)
    return alphabeta(node, depth, -∞, +∞)

function alphabeta(node, depth, α, β)
    if node is a terminal node or depth = 0
        return the heuristic value of node
    if the adversary is to play at node
        foreach child of node
            β := min(β, alphabeta(child, depth-1, α, β))
            if α≥β
                return α
        return β
    else {we are to play at node}
        foreach child of node
            α := max(α, alphabeta(child, depth-1, α, β))
            if α≥β
                return β
        return α

[edytuj] Zobacz też

  • Pruning (Algorithm)
  • Branch and bound
  • Minimax
  • Combinatorial optimization
  • Negamax
  • Transposition table
  • MTD(f)
  • Killer heuristic

[edytuj] Przypisy

  1. S.J. Russell and P. Norvig (2003). Artificial Intelligence: A Modern Approach. Second Edition, Prentice Hall.

[edytuj] Linki zewnętrzne

W innych językach
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu