【问题标题】:Minimax algorithm is the tree implemented as it should be?Minimax 算法是按应有的方式实现的树吗?
【发布时间】:2020-11-22 14:15:39
【问题描述】:

我想创建一个深度为 3 的 minimax 搜索,每个节点将有两个子节点,代码是否正确表示,这是正确的实现,还是我做错了什么?

    static int miniMaxAlgorithm(int node, int depth, bool maxPlayer)
    {
        int eval;
        int maxEval;
        int minEval;

        if (depth == 0)
        {            
             return node; // static evaluation to be returned          
        }

        if (maxPlayer)
        {

            maxEval = int.MaxValue;

            for (int i = 0; i < 2; i++)
            {
                eval = miniMaxAlgorithm(i, depth - 1, maxPlayer = false);
                maxEval = Math.Max(maxEval, eval);
                Console.WriteLine(maxEval);
                Console.WriteLine("{0}", depth);
            }
         
            return maxEval;
        }

        else
        {
            minEval = int.MinValue;

            for (int i = 0; i < 2; i++)
            {
                eval = miniMaxAlgorithm(i, depth - 1, maxPlayer = true);
                minEval = Math.Min(minEval, eval);
                Console.WriteLine(minEval);
                Console.WriteLine("{0}", depth);
            }
            return minEval;
        }

    }

【问题讨论】:

  • 运行时会发生什么?
  • 14 Console.Writelines 将出现在终端中(大概是除根以外的所有节点)。我正在尝试确定树的结构是否符合预期,并且它们是否不是其他顺序。

标签: c# artificial-intelligence minimax


【解决方案1】:

它看起来不错,但对我来说还没有完成。你打算用它做什么?例如,如果您正在玩游戏,那么您希望在

eval = miniMaxAlgorithm(i, depth - 1, maxPlayer = false);

然后在此之后立即撤消移动。

如果您想返回最好的移动,您还需要进行一些调整。但是根据发现的 Minimax 伪代码here,您的实现基础看起来是正确的。

但是,为了更易于阅读,我会考虑使用 Negamax 函数,这也可能使事情变得更容易。这取决于您打算如何处理。

【讨论】:

  • 谢谢伊莱!我正在开发一些作弊刽子手游戏(计算机可以访问属于单词家族的单词列表)。当玩家进行猜测时,理想情况下,我希望计算机向前看一两步,并考虑是否选择最大可能的词族,并根据一些评估做出决定,什么是最有希望的。跨度>
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多