SCOUT

Z Wikipedii, wolnej encyklopedii

SCOUT jest algorytmem podejmowania decyzji w grach dwuosobowych[1].

Opis algorytmu[edytuj | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

  1. J. Pearl: Scout: A simple game-searching algorithm with proven optimal properties, 1980.