Java:Alpha Beta修剪

时间:2015-01-02 12:35:29

标签: java artificial-intelligence minimax alpha-beta-pruning

我正在尝试实施Mini Max& java中的Alpha Beta修剪算法,由于某种原因修剪算法不执行单个修剪,尽管算法访问24,911个节点。 对于MaxNodes,GameNode值启动为-99,对于MinNode,GameNode值启动为99,以及Alpha = -99 \ Beta = 99。 该游戏被称为“Nim”,其值为1或-1,输赢,无分数。 知道为什么修剪不会发生吗?

以下是修剪代码:

public static int Prune(GameNode n){




    if(n.getSuccessors()==null)
        return n.GetUtilityValue();

    else if(n.getPlayer().equals(GameNode.Player.MAX)) // A's move
    {
        int value;

        if(n.getFather()!=null){

            if(n.getFather().getAlpha()>n.getAlpha())
                n.setAlpha(n.getFather().getAlpha());//Pass down alpha value 

            if(n.getFather().getBeta()<n.getBeta())
                n.setBeta(n.getFather().getBeta());//Pass down beta value 

        }

        for(GameNode s : n.getSuccessors())
        {
            if(n.getValue() > n.getBeta()) // if Current value > Beta => then prune this node
            {
                GameNode.prune++;
                break;
            }


                if(s!=null){
                GameNode.counter++;
                value = MiniMax(s);

                if(value>n.getValue()){// Is leaf bigger then current value ? then set value and Alpha value

                    n.setValue(value);
                    if(value > n.getAlpha())
                        n.setAlpha(value);

                    }
                }

        }

    return n.getValue();

    }
    else // B's move
    {
        int value;

        if(n.getFather().getAlpha()>n.getAlpha())
            n.setAlpha(n.getFather().getAlpha());//Pass down alpha value 

        if(n.getFather().getBeta()<n.getBeta())
            n.setBeta(n.getFather().getBeta());//Pass down beta value 

        for(GameNode s : n.getSuccessors())
        {   
            if(n.getValue() < n.getAlpha())// if Current value < Alpha => then prune this node
            {
                GameNode.prune++;
                break;
            }


                if(s!=null) {
                GameNode.counter++;
                value = MiniMax(s);

                if(value<n.getValue()){// Is leaf smaller then current value ? then set value and Beta value

                    n.setValue(value);
                    if(value < n.getBeta())
                        n.setBeta(value);

                    }
                }

        }


    return n.getValue();

    }
}

0 个答案:

没有答案