如何从mini max算法获取实际移动而不是移动值

罗汉

我目前正在为Chess编写带有alpha beta修剪的minimax算法。

从我所看到的所有示例中,minimax算法将返回一个int值,该值表示最佳移动所产生的最佳得分或棋盘状态。

我的问题是我们如何才能返回与得分返回值相关的最佳移动?

例如,下面的伪代码中的我的Alphabeta()...

public int alphabeta(int depth, Board b, int alpha, int beta, boolean maxPlayer) {
    if(depth == 0)
        return evaluateBoard(b);
    if(maxPlayer) {
        for(each of max player's moves) {
            // make move on a tempBoard
            int eval = alphabeta(depth - 1, tempBoard, alpha, beta, false);
            alpha = Math.max(alpha, eval);
            if(beta <= alpha) 
                break;
        }
        return alpha;
    }
    else {
        for(each of min's moves) {
            // make move on a tempBoard
            int eval = alphabeta(depth - 1, tempBoard, alpha, beta, true);
            beta = Math.min(beta, eval);
            if(beta <= alpha)
                break; 
        }
        return beta;
    }
}

在我的minimax / Alphabeta的实现中,我有一个Board对象代表棋盘,棋子可以在上面移动以表示不同的棋盘纹理/游戏状态。

我的函数evaluateBoard(Board b)接收一个Board并计算参数Board的Board状态的值。

本质上,evaluateBoard()为我提供了最佳移动值的最终int结果值Alphabeta()。但是我没有办法让evaluateBoard()返回导致最终得分的举动。即使我要返回一些保存分数值和碎片信息的对象,我也不确定如何在树的顶部获得碎片信息,从而获得最终的最佳分数。

有谁知道我如何获得/返回给出最佳得分值的最佳动作的信息?我是否错过了mini max算法中的关键要素和/或是否必须以不同的方式实现Alphabeta()?

编辑:

例如,假设minimax从以下移动中返回最佳分数:e4,e5,nf3,nc6。我所拥有的将返回董事会情况的数值。如何返回“ e4”?E4是产生最高价值的举动。

谢谢。

阿扎尼

即使没有显式使用树,minimax算法也可以通过探索可能移动的树来工作。因此,您的函数所需要的只是返回其值以外的最佳移动。

您可以执行以下操作:

ScoredMove alphabeta(Board board, String player, Move move) {
  board.applyMove(move);
  if (board.gameOver())
  {
    score = board.scoreForPlayer(player);
    return ScoredMove(score, move);
  }

  if (player == "player1") {
    next_player = "player2";
  } else {
    next_player = "player1";
  }

  ScoredMove best_move = null;
  for (next_move in board.movesForPlayer(next_player)) {
    ScoredMove scored = alphabeta(board, next_player, next_move)
    if (best_move == null || best_move.score < scored.score) {
      best_move = scored;
    }
  }
  board.removeMove(move);
  return best_move;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从mini max算法获得实际移动而不是移动值

来自分类Dev

如何获取`mov rdx,symbol`来移动符号值而不是clang intel语法中符号的地址?

来自分类Dev

如何在移动视图上隐藏 Material-Ui Mini 变体抽屉

来自分类Dev

如何防止值被移动?

来自分类Dev

当鼠标实际在元素上移动时如何获取MouseMove事件

来自分类Dev

当鼠标实际在元素上移动时如何获取MouseMove事件

来自分类Dev

如何获取移动UIImageView的位置

来自分类Dev

如何移动低值图像?

来自分类Dev

如何强制将值从内部范围移动到外部范围而不是借用?

来自分类Dev

如何移动世界视图而不是相机视图

来自分类Dev

如何只移动字母而不是符号/空格?

来自分类Dev

SSRS 2012:如何获取“全选”,而不是从多选参数返回所有值的实际列表而返回NULL?

来自分类Dev

如何在Typescript Angular中获取鼠标移动上xy坐标的十进制值?

来自分类Dev

如何使用Dart获取GPS位置?(移动)

来自分类Dev

如何从Azure移动服务获取数据

来自分类Dev

如何使用Dart获取GPS位置?(移动的)

来自分类Dev

如何获取移动的图像细节作为警报

来自分类Dev

光标锁定时如何获取鼠标移动?

来自分类Dev

如何在bash中移动数组值

来自分类Dev

如何一一移动清单中的值?

来自分类Dev

如何从视图中的HttpResponse获取实际值?

来自分类Dev

如何使按钮的大小向上移动(通过垂直向上移动),而不是总大小?

来自分类Dev

如何使移动文本彼此反弹而不是在JS中重叠?

来自分类Dev

如何在PyCharm中移动文件类型而不是特定文件?

来自分类Dev

如何在Webview中加载桌面视图而不是移动视图

来自分类Dev

如何根据我将trackBar1值移动到的位置获取正确的文件名编号?

来自分类Dev

如何卸载mini conda?Python

来自分类Dev

如何获取Mac操作系统的实际名称而不是版本?

来自分类Dev

如何在 CSV 中移动列值并添加新值

Related 相关文章

  1. 1

    如何从mini max算法获得实际移动而不是移动值

  2. 2

    如何获取`mov rdx,symbol`来移动符号值而不是clang intel语法中符号的地址?

  3. 3

    如何在移动视图上隐藏 Material-Ui Mini 变体抽屉

  4. 4

    如何防止值被移动?

  5. 5

    当鼠标实际在元素上移动时如何获取MouseMove事件

  6. 6

    当鼠标实际在元素上移动时如何获取MouseMove事件

  7. 7

    如何获取移动UIImageView的位置

  8. 8

    如何移动低值图像?

  9. 9

    如何强制将值从内部范围移动到外部范围而不是借用?

  10. 10

    如何移动世界视图而不是相机视图

  11. 11

    如何只移动字母而不是符号/空格?

  12. 12

    SSRS 2012:如何获取“全选”,而不是从多选参数返回所有值的实际列表而返回NULL?

  13. 13

    如何在Typescript Angular中获取鼠标移动上xy坐标的十进制值?

  14. 14

    如何使用Dart获取GPS位置?(移动)

  15. 15

    如何从Azure移动服务获取数据

  16. 16

    如何使用Dart获取GPS位置?(移动的)

  17. 17

    如何获取移动的图像细节作为警报

  18. 18

    光标锁定时如何获取鼠标移动?

  19. 19

    如何在bash中移动数组值

  20. 20

    如何一一移动清单中的值?

  21. 21

    如何从视图中的HttpResponse获取实际值?

  22. 22

    如何使按钮的大小向上移动(通过垂直向上移动),而不是总大小?

  23. 23

    如何使移动文本彼此反弹而不是在JS中重叠?

  24. 24

    如何在PyCharm中移动文件类型而不是特定文件?

  25. 25

    如何在Webview中加载桌面视图而不是移动视图

  26. 26

    如何根据我将trackBar1值移动到的位置获取正确的文件名编号?

  27. 27

    如何卸载mini conda?Python

  28. 28

    如何获取Mac操作系统的实际名称而不是版本?

  29. 29

    如何在 CSV 中移动列值并添加新值

热门标签

归档