当前位置: 首页 > 知识库问答 >
问题:

在极简期间,我们实际上在哪里分配最好的移动?

淳于星宇
2023-03-14

我非常了解minimax和alpha-beta修剪在返回“最佳值”方面的工作原理。然而,我不确定“最佳行动”应该分配到哪里。

我知道最好的动作需要来自传入的原始棋盘,因为我正在寻找一个最大值,所以它必须在最大化玩家下分配。然而,使用我当前的代码会导致最佳动作被一次又一次地重新分配。
例如,如果原始棋盘是O-\n---\n---,那么最佳动作就变成了
OX-\n---\n---,然后重新分配给O-X\n---\n---等等。

public int minimax(Board board, int depth, boolean maximizing,int alpha,int beta) {
    int bestValue;
    if (board.isTerminal()) {
        bestValue = board.calculateValue();
    } else if (maximizing) {
        bestValue = alpha;
        for (Action action : board.makePossibleActions()) {
            int childValue = minimax(board.makeCopy().takeAction(action),depth+1,false,bestValue,beta);
            if (bestValue <= childValue) {
                bestValue = childValue;
                if (board.equals(originalBoard)) {
                    bestAction = action;
                }
            }
            bestValue = Math.max(bestValue,childValue);
            if (beta <= bestValue) {
                break;
            }
        }
    } else {
        bestValue = beta;
        for (Action action : board.makePossibleActions()) {
            int childValue = minimax(board.makeCopy().takeAction(action),depth+1,true,alpha,bestValue);
            bestValue = Math.min(bestValue,childValue);
            if (bestValue <= alpha) {
                break;
            }
        }
    }
    return bestValue;
}

共有2个答案

施靖
2023-03-14

根据游戏的复杂性,一个实用的极大极小算法的实现需要一些这些特性。

1) 董事会的低级别实施,允许快速分析职位并生成有效的行动。

2)一个哈希表,用于输入评估分数并为每个哈希键移动,这也将在强制移动期间提供帮助。

3) 一个移动表,用相应的哈希键输入所有之前的移动,以帮助避免重复移动,并帮助撤消和重做移动。

4) 由于需要响应的GUI用户界面,因此可以在后台实现minimax算法,最好在另一个线程上实现。

5) 由于玩家可能喜欢使用强制移动或改变游戏级别,实际上需要迭代深化搜索。

因此,在评估了最佳移动之后,我更愿意将结果传递给主调用线程。

颛孙成益
2023-03-14
  1. 你知道根是一个最大的球员

因此,如果max player要播放,则您位于树的根,并且max move的值被更新,然后还将move存储在类变量中以返回。(不是取最大值,而是测试该值是否更大,然后一起更新最大值和最佳移动。)

 类似资料:
  • 在C 03中,我们有模板显式实例化定义(

  • 我在Spring重新认识了豆子的不同范围。 每次我在xml中创建bean时,我都从未使用scope属性,这意味着它是单例的。" 对于原型,我读到“有状态bean首选原型范围” 有状态bean是什么意思?谁能给我一个实时的例子,我们在哪里有原型范围?

  • 我正在尝试模拟测试中的系统使用的外部(REST)服务器。我选择MockServer(http://www.mock-server.com/)来模拟外部REST服务器。 萨克斯, R

  • 问题内容: 我对这个问题进行了一些搜索,但发现了非常模糊的答案。在redux中,我们知道状态存储为对象。但是这种状态实际上存储在哪里?它是否以某种方式保存为文件,以后我们可以访问?我所知道的是,它不会以Cookie格式或浏览器的本地存储方式存储它。 问题答案: Redux中的状态存储在Redux存储中的内存中。 这意味着,如果刷新页面,该状态将消失。 您可以想象该商店看起来像这样: redux中的

  • 本文向大家介绍我们在jQuery的哪里使用$ .extend()方法?,包括了我们在jQuery的哪里使用$ .extend()方法?的使用技巧和注意事项,需要的朋友参考一下 jQuery.extend()方法用于将两个或更多对象的内容合并在一起。该对象将合并到第一个对象中。  您可以尝试运行以下代码以了解如何使用方法- 示例

  • 在Android 4 . 4 . 2 < code > environment . getexternalstoratedirectory()上。getPath()返回< code>/storage/emulated/0但是这个路径在我的Nexus5 Android 4.4.2上不存在。< code > environment . getexternalstoratedirectory()。get