Z tego co rozumiem, Twój główny problem jest następujący: pokazałeś, jak używać minimax w sytuacji, gdy max/min idą w cyklu, a teraz masz grę, w której czasami jeden gracz może wykonywać wiele ruchów w wiersz.
Wyjaśnię ci ogólne podejście, które działa dla praktycznie każdej gry, a następnie dodam kilka rzeczy, które można zrobić inaczej dla mancala.
Tak ogólne podejście
Standardowy minimax idzie tak:
function minimax(node, depth, maximizingPlayer)
if depth = 0 or node is a terminal node
return the heuristic value of node
if maximizingPlayer
bestValue := -∞
for each child of node
val := minimax(child, depth - 1, FALSE)
bestValue := max(bestValue, val)
return bestValue
else
bestValue := +∞
for each child of node
val := minimax(child, depth - 1, TRUE)
bestValue := min(bestValue, val)
return bestValue
Gdzie zainicjować połączenie minimax z max/min, a potem ciągle się zmienia. W twoim przypadku wystarczy dodać tylko jeden drobny czek.
function minimax(node, depth, maximizingPlayer)
if depth = 0 or node is a terminal node
return the heuristic value of node
if maximizingPlayer
bestValue := -∞
for each child of node
# here is a small change
if freeTurn(child):
isMax := TRUE
else:
isMax := FALSE
val := minimax(child, depth - 1, isMax)
bestValue := max(bestValue, val)
return bestValue
else
bestValue := +∞
for each child of node
# here is a small change
if freeTurn(child):
isMax := FALSE
else:
isMax := TRUE
val := minimax(child, depth - 1, isMax)
bestValue := min(bestValue, val)
return bestValue
Jeżeli czynność freeTurn
powraca ty czy masz wolnego obrotu po aktualnym ruchu. Zauważ, że nie ma różnicy dla tego algorytmu, czy możesz wykonać tylko 2 ruchy w rzędzie lub 5 ruchów z rzędu.
chodzi mancala
Istnieje wiele odmian Mancala, ale rozgałęzienia czynnikiem w grze jest dość mała (w tym jeden, który znam jest < = 6). Teraz załóżmy, że masz trzy ruchy: A
, B
, C
, D
i przeniesienie C
pozwala ci grać jeszcze raz. Z pozycji C
można wykonywać ruchy: C1
, C2
. Możesz więc łączyć je (C + C1
, C + C2
) i traktować je jako jeden ruch (należy przeprowadzić małą księgowość, aby pamiętać, że są to właściwie dwa ruchy).Tak więc w tej chwili kończysz swoją min max iteracjami, w których nie masz 4, ale 5 ruchów: A
, B
, C + C1
, C + C2
, D
. W rzeczywistości nie ma nic złego w stosowaniu tego podejścia w grach o większym współczynniku rozgałęzienia.
OK, więc zachowa mini, max, min, max strukturę, czy umieszczę bezużyteczną min pomiędzy każdym maxem, który się powtarza? – Zapnologica
Tak, chyba że masz lepszy pomysł. –
Jak to wpłynie na możliwą głębokość warstwy? – Zapnologica