博弈论 以井字过三关为例 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值