在使用极小值和阿尔法-贝塔普鲁宁玩过基于回合的游戏后,如果满足某些条件,同一个玩家可以有多个连续移动,你将如何处理游戏?
你是说像跳棋?
极小极大树应该有所有可能的移动。如果满足一些条件,比i也必须像其他可能性一样被添加。所有中间状态都必须被忽略
将一个玩家的一系列动作视为游戏树中的一个动作难道不是最自然的吗?
考虑像中国跳棋这样的游戏。你不会认为每一次跳跃都是一个完整的动作。你会认为一个完整的动作是一颗珍珠从开始位置到结束位置的跳跃顺序。
如果玩家A
正在调用minimax,那么:
在PlayerA
的第一轮运行中:最大化
在玩家A
的第二轮跑步中:再次最大化。
这依赖于从A
的角度对董事会进行客观评估。因此,无论是谁打开一个状态,目标(状态)
都是指一个
从该状态获得的收益。
你需要一种方法来确定给定的状态X
,在父状态下是否有一个回合,使得玩家Z
的当前回合是连续第二个回合。不过,你也可以简单地评估轮到谁了,如果轮到A
,则正常执行最大化。
我想我终于对minimax和Alpha-beta修剪有所了解了,但实现它完全是另一回事! 根据我的理解,基础是:您为某些动作分配一个启发式函数分数(Gomoku为例)。 如果一行有5个,我们应该分配一个高值,比如9999,因为这是一个胜利的举动 当我们必须在Java中实现这一点时,我的问题来了! 我有一块彩色[][]板(8x8),其中黑色是播放器1,白色是播放器2,null表示空白,我不知道我们应
我到处寻找修复代码的答案,但在花了很长时间调试代码后,我发现自己陷入了绝望。问题是,我的minimax函数不会为可能的最佳移动返回正确的值,我甚至试图通过存储最佳的第一个移动(当深度=0时)来修复它,但如果解决方案不明显,那么该算法将严重失败。我还尝试修改基本案例的返回值,以便优先考虑早期的胜利,但这并没有解决问题。 目前我正在TictoE板上测试这个函数,助手类(如getMoves()或getW
极小极大算法的一个缺点是每个板状态必须被访问两次:一次查找其子级,第二次评估启发式值。 极小极大算法还有其他缺点或优点吗?对于像象棋这样的游戏,还有更好的选择吗?(当然是带有α-β修剪的极小极大算法,但还有其他吗?)
我在为游戏筷子做一个C程序。 这是一个非常简单的游戏,总共只有625个游戏状态(如果考虑到对称性和不可到达的状态,它甚至更低)。我读过minimax和alpha-beta算法,主要是针对tic-tac-toe的,但我遇到的问题是,在tic-tac-toe中,不可能循环回到以前的状态,而这在筷子中很容易发生。因此,当运行代码时,它将以堆栈溢出结束。 我通过添加以前访问过的州的标志来解决这个问题(我不
我正在尝试用Alpha-beta剪枝来实现Minimax,这是一款3D Tic-Tac-Toe游戏。然而,该算法似乎选择了次优路径。 例如,你可以通过直接跑过立方体的中间或穿过单板来赢得比赛。人工智能似乎选择了下一轮最佳的细胞,而不是当前一轮。 我尝试过重新创建并使用我返回的启发式算法,但没有取得多大进展。不管是哪一层,它似乎都有同样的问题。 代码在这里。 相关部分是和(以及'2'变体,这些只是我
我已经为游戏跳棋编写了一个带有alpha-beta修剪的minimax算法,现在我正尝试使用negamax方法重写它。我希望这两者是等价的,因为negamax只是一种编写minimax的技术。但由于某种原因,我的两种算法表现不同。当我在相同的输入上运行它们时,negamax版本似乎评估了更多的状态,所以我认为alpha-beta修剪一定有问题。 下面的代码显示了这两种算法(