Minimax(node, depth, maximizingPlayer): ha depth == 0 vagy node végállapot: térj vissza node értéke ha maximizingPlayer: maxEval = -végtelen minden child in node gyerekek: eval = Minimax(child, depth - 1, hamis) maxEval = max(maxEval, eval) térj vissza maxEval különben: minEval = +végtelen minden child in node gyerekek: eval = Minimax(child, depth - 1, igaz) minEval = min(minEval, eval) térj vissza minEval
def minimax(position, depth, maximizingPlayer):
if depth == 0 or is_terminal(position):
return evaluate(position)
if maximizingPlayer:
maxEval = float('-inf')
for child in get_children(position):
eval = minimax(child, depth - 1, False)
maxEval = max(maxEval, eval)
return maxEval
else:
minEval = float('inf')
for child in get_children(position):
eval = minimax(child, depth - 1, True)
minEval = min(minEval, eval)
return minEval
def evaluate(position):
# Kiértékelés logikája
# Például +1 győzelemért, -1 vereségért, 0 döntetlenért
pass
def get_children(position):
# Minden lehetséges lépésből származó új játékállapot
pass
def is_terminal(position):
# Ellenőrzi, hogy az állapot végállapot-e
pass
#include <iostream>
#include <vector>
#include <limits>
using namespace std;
const int MAX = numeric_limits<int>::max();
const int MIN = numeric_limits<int>::min();
// Kiértékelő függvény (példa)
int evaluate(vector<vector<char>>& board) {
// Implementálj kiértékelést
return 0;
}
// Ellenőrizze, hogy végállapot-e
bool is_terminal(vector<vector<char>>& board) {
// Implementálj végállapot ellenőrzést
return false;
}
int minimax(vector<vector<char>>& board, int depth, bool maximizingPlayer) {
if (depth == 0 || is_terminal(board)) {
return evaluate(board);
}
if (maximizingPlayer) {
int maxEval = MIN;
// Generálj gyermekállapotokat (példa)
for (auto& child : get_children(board)) {
int eval = minimax(child, depth - 1, false);
maxEval = max(maxEval, eval);
}
return maxEval;
} else {
int minEval = MAX;
// Generálj gyermekállapotokat (példa)
for (auto& child : get_children(board)) {
int eval = minimax(child, depth - 1, true);
minEval = min(minEval, eval);
}
return minEval;
}
}
int main() {
vector<vector<char>> board = {
{'_', '_', '_'},
{'_', '_', '_'},
{'_', '_', '_'}
};
int bestValue = minimax(board, 3, true);
cout << "A legjobb lépés értéke: " << bestValue << endl;
return 0;
}
Az alfa-béta metszés csökkenti a játékfa ágainak számát, amelyeket ténylegesen ki kell értékelni. Ez jelentősen javítja a teljesítményt anélkül, hogy a végeredményt befolyásolná.
AlphaBeta(node, depth, alpha, beta, maximizingPlayer): ha depth == 0 vagy node végállapot: térj vissza node értéke ha maximizingPlayer: maxEval = -végtelen minden child in node gyerekek: eval = AlphaBeta(child, depth - 1, alpha, beta, hamis) maxEval = max(maxEval, eval) alpha = max(alpha, eval) ha beta <= alpha: törés térj vissza maxEval különben: minEval = +végtelen minden child in node gyerekek: eval = AlphaBeta(child, depth - 1, alpha, beta, igaz) minEval = min(minEval, eval) beta = min(beta, eval) ha beta <= alpha: törés térj vissza minEval
A Minimax algoritmus kiváló alapot nyújt mesterséges intelligenciák fejlesztéséhez, különösen játékokban, ahol a stratégia optimalizálása kulcsfontosságú.