SCOUT
SCOUT jest algorytmem podejmowania decyzji w grach dwuosobowych[1].
Opis algorytmu edytuj
SCOUT opiera się na dwóch rekurencyjnych funkcjach: TEST oraz EVAL. Funkcja EVAL(S) zwraca wartość wierzchołka opisującego stan gry. TEST(S, v, r) sprawdza czy zachodzi relacja
Funkcja TEST przyjmuje trzy argumenty: wierzchołek wartość oraz relację Jeśli jest wierzchołkiem typu MAX funkcja zwraca true jeśli istnieje potomek który jest większy (większy lub równy) niż Jeśli jest wierzchołkiem MIN funkcja zwraca false jeśli istnieje potomek który jest mniejszy (mniejszy lub równy) niż
Niech będzie wierzchołkiem typu MAX opisującym stan gry, a to jego bezpośredni potomkowie. Funkcja EVAL zwraca wartość wierzchołka poprzez rekurencyjne wywołanie siebie dla pierwszego potomka a następnie sprawdzenie przy pomocy metody TEST czy dla każdego z pozostałych potomków zachodzi Jeśli dla wierzchołka nierówność nie zachodzi, poprzez wywołanie EVAL wyznaczana jest jego wartość i jest ona używana w miejsce do sprawdzenia czy powyższa nierówność zachodzi dla pozostałych potomków Gdy wszystkie wierzchołki zostaną sprawdzone funkcja EVAL zwraca jako ostatnią wartość
Funkcja EVAL wywołana dla wierzchołka typu MIN zachowuje się analogicznie, z tą różnicą, że zamiast nierówności ostrej sprawdzana jest nierówność nieostra.
Pseudokod edytuj
def scout(state):
eval(state)
def eval(state):
if state.is_terminal():
return state.value()
value = None
if state.is_max():
for child in state.children():
if value is None or test(child, value, >):
value = eval(child)
else: # state.is_min()
for child in state.children():
if value is None or not test(child, value, >=):
value = eval(child)
return value
def test(state, value, rel):
if state.is_terminal():
return rel(state.value(), value)
if state.is_max():
for child in state.children():
if test(child, value, rel):
return True
return False
else: # state.is_min()
for child in state.children():
if not test(child, value, rel):
return False
return True
Przypisy edytuj
- ↑ J. Pearl: Scout: A simple game-searching algorithm with proven optimal properties, 1980.