博弈论 以井字过三关为例 minmax

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上有更详尽的代码。

https://github.com/FrostMonarch95/tic-tac-toe

你可能感兴趣的:(博弈论)