【问题标题】:A better way to implement a "MiniMax" recursion [closed]实现“MiniMax”递归的更好方法[关闭]
【发布时间】:2014-02-25 07:48:53
【问题描述】:

我在游戏中使用了 MinMax 算法,由于有很多可能性,MinMax 递归花费的时间太长,即使是“alpha-beta pruning”

我的代码看起来像这样:

min(state,depth,alpha,beta):
    if stopingCond: 
        return value

    for moves in allmoves:
        state.do(move)
        beta = min(beta, max(state,depth,alpha,beta) )
        if alpha >= beta: return beta
    return beta

max(state,depth,alpha,beta):
    if stopingCond: 
        return value

    for moves in allmoves:
        state.do(move)
        alpha = max(beta, min(state,depth,alpha,beta) )
        if alpha >= beta: return alpha
    return beta

我知道有时您可以使用for 循环而不是递归 但我找不到转换它的方法。

如果有人有好主意,我会很高兴听到它!

谢谢,

【问题讨论】:

  • 哪个游戏(要知道分支因子)哪个深度?
  • 嗯。对我来说,这看起来很简单。 :(
  • 该游戏是扑克的变体,每轮可以有 1 到 5 步,最大深度为 40(5 O-Poker)
  • stopingCond 是什么?
  • 这个问题似乎是题外话,因为它属于codereview.stackexchange.com

标签: python recursion minimax game-theory


【解决方案1】:

通常 minmax 中的递归不能被等效的迭代算法代替,这就是为什么有优化方法,如 beta 剪枝,试图通过尽快停止递归树的某些分支来提高性能。

对于您的游戏,可能完全不需要 minmax(或通常是递归算法),并且可能有其他方法可以使用其他技术找到最佳解决方案,但如果没有一组精确的规则是不可能的告诉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2016-04-22
    • 2021-09-06
    • 2018-08-05
    相关资源
    最近更新 更多