Как узнать, когда я могу остановить увеличение глубины для алгоритма итерационного углубления с помощью таблиц обрезки и транспонирования альфа-бета с negamax? Следующий псевдокод взят со страницы вики:Когда прекратить итерационное углубление с помощью альфа-бета-обрезки и таблиц транспонирования?
function negamax(node, depth, α, β, color)
alphaOrig := α
// Transposition Table Lookup; node is the lookup key for ttEntry
ttEntry := TranspositionTableLookup(node)
if ttEntry is valid and ttEntry.depth ≥ depth
if ttEntry.Flag = EXACT
return ttEntry.Value
else if ttEntry.Flag = LOWERBOUND
α := max(α, ttEntry.Value)
else if ttEntry.Flag = UPPERBOUND
β := min(β, ttEntry.Value)
endif
if α ≥ β
return ttEntry.Value
endif
if depth = 0 or node is a terminal node
return color * the heuristic value of node
bestValue := -∞
childNodes := GenerateMoves(node)
childNodes := OrderMoves(childNodes)
foreach child in childNodes
val := -negamax(child, depth - 1, -β, -α, -color)
bestValue := max(bestValue, val)
α := max(α, val)
if α ≥ β
break
// Transposition Table Store; node is the lookup key for ttEntry
ttEntry.Value := bestValue
if bestValue ≤ alphaOrig
ttEntry.Flag := UPPERBOUND
else if bestValue ≥ β
ttEntry.Flag := LOWERBOUND
else
ttEntry.Flag := EXACT
endif
ttEntry.depth := depth
TranspositionTableStore(node, ttEntry)
return bestValue
И это итерационный Углубление вызов:
while(depth < ?)
{
depth++;
rootNegamaxValue := negamax(rootNode, depth, -∞, +∞, 1)
}
Конечно, когда я знаю, что общее количество ходов в игре я мог бы использовать depth < numberOfMovesLeft
как верхняя граница. Но если эта информация не указана, когда я знаю, что другой вызов negamax не дает лучшего результата, то предыдущий запуск? Что мне нужно изменить в алгоритме?
'return color * эвристическое значение узла', вероятно, то, что обычно описывается как« функция оценки »? – wildplasser
Да, точно! (в зависимости от игрока) – ZzetT
Моя гутфелинг заключается в том, что ограничения от предыдущих прогонов должны стать недействительными, когда вы увеличиваете глубину и переоцениваете дерево игры. это означает, что таблица транспозиций в принципе бесполезна (потому что она была основана на различных (неправильных) терминальных оценках (это называется «эффектом горизонта» функций оценки, IIRC). – wildplasser