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

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