问题标签 [alpha-beta-pruning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3127 浏览

artificial-intelligence - “蒙特卡洛树搜索”可以应用于像 Stratego 这样的“信息不完全的两人游戏”吗?

我想开发一个信息不完全的两人游戏——“Stratego”。

这场比赛“有点”像国际象棋,但最初我们对对手棋子的排名一无所知。当一个棋子攻击或被某个对手的棋子攻击时,他们的等级被揭示并且更高等级的棋子杀死/捕获更低等级的棋子。可以在此处找到有关游戏的更多详细信息。

我做了一点研究。我读了 JA Stankiewicz 的“Stratego 中的对手建模”。但是我找不到有关如何开发游戏的完整教程。我曾成功开发过一款两人游戏——“黑白棋”,又名黑白棋,我熟悉 MINIMAX 算法和 alpha-beta 修剪。

我在某处发现蒙特卡洛树搜索也用于开发零和二人游戏。它可以用于像战略这样的游戏吗?我可以获得相同的完整教程吗?

任何其他不涉及蒙特卡洛树搜索的教程也很有用:)

0 投票
1 回答
5075 浏览

algorithm - 了解 alpha-beta 剪枝算法中的截止条件

我无法理解我在维基百科上找到的用于 alpha beta 修剪的伪代码:

令我困惑的是 ifPlayer = MaxPlayer条件。我理解整个递归调用函数not(Player)以获取最小值,然后递归调用函数Player,重复直到达到深度限制或找到目标状态。但是,我不明白

陈述。我的理解是,找到比上一次调用()中找到的最小值高的第二个值β,即使用的值。但是由于这是函数的 MAX 部分,我们不想要 HIGHEST 值,而不仅仅是大于 beta 的任何值吗?

0 投票
1 回答
309 浏览

c++ - 符号引用错误

我正在写一个关于 alpha-beta 修剪的项目。当我在 xcode 中运行它时,我得到符号引用错误:

我的一些代码:

0 投票
2 回答
702 浏览

java - Minimax 算法中的 alpha/beta 值是多少?

0 投票
1 回答
617 浏览

algorithm - Alpha-beta 修剪同一玩家的连续动作

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

人工智能会:

人工智能应该这样做:

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

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

...

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

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

0 投票
1 回答
2123 浏览

artificial-intelligence - Alpha beta剪枝的评价函数设计

我正在设计一个国际象棋游戏,它背后的人工智能实现了一个带有 alpha-beta 修剪的搜索树。我在设计游戏的评估函数时遇到了困难。

如何为任何类型的游戏设计评估函数?

0 投票
1 回答
402 浏览

c++ - 井字游戏的 MinMax 简单演示

我一直在努力弄清楚 MinMax 算法是如何工作的,希望 alpha-beta 修剪算法能够工作。我对发生的递归感到困惑。

  • 首先,每个中间板都得分吗?或仅终端游戏板。
  • 其次,返回的究竟是什么?程序如何知道下一步该放在哪里?我看到我应该返回棋盘分数(在tictactoe中,-1,0,1)但是程序如何知道接下来应该播放哪个动作。

我曾尝试找到一个简单的 C 或 C++ 程序来证明这一点,但我运气不佳。我正在尝试学习这个算法,我可以为我的计算机编程课的其余部分创建一个演示文稿。

非常感谢!五

0 投票
1 回答
2462 浏览

algorithm - 黑白棋/黑白棋游戏的 Alpha-Beta 修剪算法中的启发式函数

我正在实现一个 Alpha-Beta 修剪算法,该算法将用于在奥赛罗游戏中获得最佳移动。当算法到达叶节点(即没有有效移动或达到最大深度)时,我基于此计算该节点的启发式值:

最大化玩家(运行算法并将使用算法返回的移动的玩家)在该节点的棋盘上有多少砖?(每块砖+1)

最大化玩家在这个节点有多少有效移动?(每步+10)

最大化玩家有多少个角砖?(每个角砖+100)

问题是:如果不是最大化玩家在叶子节点上交,我该怎么办?然后不可能计算他的有效动作,因为轮不到他。我可能误解了整个 alpha-beta 修剪算法,或者至少误解了启发式函数应该如何工作。有人可以给我一个提示吗?

谢谢

0 投票
1 回答
203 浏览

java - minimax 代码总是返回 0

我从维基百科写了一个 Alpha-Beta 修剪。我正在尝试编写一个四连接 AI。该函数应该返回列号,然后我的主函数会移动。

0 投票
0 回答
453 浏览

c# - C# alpha-beta 修剪参考

所以这就是问题所在。我正在为基于 AI 的游戏开发战斗模拟器。当敌人对每一个动作都做出最佳动作时,人工智能应该为他计算出最佳动作。

我的团队有 X 个单位,有 5 个可能的移动,我的对手有 Y 个单位,有 5 个可能的移动。X 和 Y > 0 使用 alpha-beta 剪枝,我们希望生成每个可能的结果并最终取出最好的结果。问题是我们将每个结果保存到一个情境中,这种情境存储列表,但列表包含对所存储对象的引用,这使得它们将它们的移动保存到相同的情境中(1 个单元的所有 5 个移动)

想象一下我们的 2 个单位和他们的一个单位。我们创建一个情境并添加一个具有 5 个方向中的 1 个的单元。然后为我们的第二个单位添加一个方向,然后为敌方单位添加一个方向。现在我们得到了我们想要保存的最终情况。然后根据我们第二个单位的情况(所以没有敌方单位),我们想为敌人添加一个不同的动作到情况中,如果它更好的话,保存新的情况。但是由于 C# 使用列表的引用,这种情况也包括其他敌人移动的情况。

代码有点大,但我真的被困在这里,所以我希望如果有人有空闲时间来帮助我解决这个问题。

亲切的问候,我