最小最大深度优先搜索博弈树

发布于 2024-08-23 13:38:15 字数 143 浏览 6 评论 0原文

我想为九人莫里斯游戏建立一个游戏树。我想在树上应用极小极大算法来进行节点评估。 Minimax 使用 DFS 来评估节点。那么我应该首先将树构建到给定的深度,然后应用极小极大值,还是可以在递归极小极大 DFS 中同时进行构建树和评估的过程?

谢谢 阿尔温德

I want to build a game tree for nine men's morris game. I want to apply minimax algorithm on the tree for doing node evaluations. Minimax uses DFS to evaluate nodes. So should I build the tree first upto a given depth and then apply minimax or can the process of building the tree and evaluation occur together in recursive minimax DFS?

Thank you
Arvind

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

讽刺将军 2024-08-30 13:38:15

是的,您可以在递归极小极大中同时构建和评估。
这是一个很好的方法,因为它可以节省内存空间。

实际上,您甚至可以同时应用 alpha-beta 修剪

编辑:这是来自 wiki Minimax 的伪代码:

function integer minimax(node, depth)
    if node is a terminal node or depth == 0:
        return the heuristic value of node
    α = -∞
    for child in node: # evaluation is identical for both players 
        α = max(α, -minimax(child, depth-1))
    return α

因为我们(可能)在每个节点中存储游戏/棋盘状态,我们可以嵌入
创建游戏状态
在极小极大算法中,即

function integer play_minimax(node, depth)
    if node is a terminal node or depth == 0:
        return the heuristic value of node
    α = -∞
    LOOP: # try all possible movements for this node/game state
        player = depth mod 2
        move = make_game_move(node, player)
        break if not any move
        α = max(α, -play_minimax(move, depth-1))
    return α

Yes you can build and evaluate at the same time in a recursive minimax.
That is a good approach since it'll save memory space.

Actually, you can even apply alpha-beta pruning at the same time.

Edit: here is pseudocode from wiki Minimax:

function integer minimax(node, depth)
    if node is a terminal node or depth == 0:
        return the heuristic value of node
    α = -∞
    for child in node: # evaluation is identical for both players 
        α = max(α, -minimax(child, depth-1))
    return α

Since we (probably) store a game / board state in each node, we could embed the
creation of game states
in the minimax algorithm, ie

function integer play_minimax(node, depth)
    if node is a terminal node or depth == 0:
        return the heuristic value of node
    α = -∞
    LOOP: # try all possible movements for this node/game state
        player = depth mod 2
        move = make_game_move(node, player)
        break if not any move
        α = max(α, -play_minimax(move, depth-1))
    return α
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文