minmax本质上来讲是一种画回溯树暴力的算法。我们可以看作有两个人,其中一个人每次做决策都会根据另外一个人尽量使得分数最高,另外一个人每次做决策都会根据另一个人做决策尽量使得分数最低。
我们可以从伪代码理解:
now_score(level)
if is_draw :return 0
if current_player==x:
return MAXS-level
else
return level-MAXS //MAXS是最大的分数.
dfs(level){
xscore=[]
yscore=[]
if game_is_over: return now_score(level) //
if current_player==x:
for move in moves:
if move is movable:
xscore.push_back(dfs(level+1))
return find_max_score(xscore)
if current_player==y:
for move in moves:
if move is movable:
yscore.push_back(dfs(level+1)
return find_min_score(yscore)
}
main(){
ret= dfs(0);//make the move based on dfs(0) we make the move based on the score
// the higher the score we will more likely to make this move
}
github上有更详尽的代码。