【问题标题】:Alpha-beta pruning consecutive moves for same playerAlpha-beta 修剪同一玩家的连续动作
【发布时间】:2012-11-28 15:59:08
【问题描述】:

我已经为 Checkers 实现了 alpha-beta 修剪,并认为我可以正常工作,但发现计算机不会连续进行多次跳转(当它必须时)。例如:

人工智能会:

O _ _ _ _      _ _ _ _ _

_ X _ X _  ->  _ _ _ X _  (misses a jump because it only does a single move)

_ _ _ _ _      _ _ O _ _

人工智能应该做:

O _ _ _ _      _ _ _ _ O
_ X _ X _  ->  _ _ _ _ _  (sees that it's current turn is not finished, continues)
_ _ _ _ _      _ _ _ _ _

我试图通过检查 MovePiece 的返回值来修复它,它返回玩家是否完成了他的回合,这取决于移动是否是跳跃以及是否还有进一步的跳跃。根据返回值,它会再次运行 MaxValue/MinValue(取决于它第一次看到需要进一步移动时所处的位置)或继续在树中运行并切换玩家。

相关代码(C#)如下(retVal是包含Value、Depth、Move to do的类型):

foreach(var m in moves)
{
    var resultingBoard = board.Clone();

    var moveResult = resultingBoard.MovePiece(m.TypeOfMove,
                                resultingBoard.GetPieceAtPosition(m.OriginalPieceLocation.X,
                                                                  m.OriginalPieceLocation.Y),
                                m.FinalPieceLocation.X, m.FinalPieceLocation.Y);

    var newDepth = currentDepth;

    if(moveResult == TurnResult.NotDone)
    {
        retVal = MaxValue(resultingBoard, ref alphaValue, ref betaValue, color, ref newDepth, ref maxDepth);
    }
    else if(moveResult == TurnResult.Finished)
    {
        newDepth++; 
        retVal = MinValue(resultingBoard, ref alphaValue, ref betaValue, color == PieceColor.Black ? PieceColor.Red : PieceColor.Black, ref newDepth, ref maxDepth);
    }
}

...

然而,这会产生一些......有趣的结果(第一步除了最小的修剪之外什么都不做),尽管我认为这将是正确的改变。

用新的动作让 MaxValue/MinValue 再次调用自己是正确的做法吗?

【问题讨论】:

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


    【解决方案1】:

    您的极小极大算法需要“生成”新动作smells(当您需要吃第二块时)。

    我会尝试重新设计它 - 你可以这样做扩展move(可迭代moves中的一个元素),使其包含移动的元组(或列表),并避免在 minimax 算法阶段使用TurnResule.NotDone

    使用这种方法 - 列表 moves 将预先扩展为除了单个移动之外还包含移动 (eat piece,eat piece)


    此解决方案将使算法更加健壮,并允许您在未来轻松修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多