问题标签 [minimax]
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.
artificial-intelligence - 调整评估函数的权重
我为connect-4编写了一些AI。我想调整某些评估函数的权重。我的时间和硬件有限,所以我的问题是:根据使用较低深度搜索获得的结果执行“训练”和调整权重,这对于评估质量是否非常糟糕,而不是在AI 必须在以后有更多时间的情况下发挥其最佳性能,从而可以在更深层次搜索游戏树?
algorithm - 如何模拟两个玩家之间的战斗?
我有两个玩家,我想模拟他们之间的游戏。两者都有一些属性(力量,智力......)和不同的行动。一些动作的结果是基于属性值和一些运气因素。
算法:
- 为双方玩家构建所有可能移动的游戏树
- 博弈树的深度可能有限
- 每个级别都属于不同的玩家
- 在叶节点上使用一些启发式方法来找出必须采取行动的玩家获胜的概率
- 向上传播概率(就像极小极大算法一样)
- 选择概率最高的走法
- 在这个算法的开始处继续
所以,基本上这是极小极大算法。我有几个问题:
- 如何考虑运气因素?
- 当我迈出一步时,我是否必须再次运行整个算法?(构建具有+1深度和新根节点的树,计算新概率......)
- 还有其他模拟战斗的想法吗?
谢谢。
java - Gomoku 中一个好的 Minimax 表示?
我正在尝试将 Java 中的 Gomoku(连续五个)游戏编写为一个单独的项目。对于 AI,我知道使用带有 Alpha-beta 修剪的 Minimax 函数是解决这个问题的好方法。但是,我很难想象这将如何工作。
我的问题是:对于极小极大树中的节点,什么是好的表示?
我认为我的评估函数将“加权”板上的所有空白空间。然后它将从该板上取最佳值作为 minmax 决策树的节点。我在正确的方向吗?
也欢迎任何其他提示!提前致谢!
minimax - Minimax / Alpha Beta Algorithm - 在五子棋中寻找 AI 的移动
我知道 Minimax 决策树是为棋盘游戏实现 AI 的好方法。目前,我正在尝试实现一个名为 Gomoku 的游戏(连续 5 个)。但是有一点我很困惑:
我环顾四周,似乎几乎所有 Minimax/AlphaBeta 算法都返回一个整数。特别是对我来说,eval(bestGomokuBoard) 的返回值。我应该如何找到获胜板的坐标?
这是我到目前为止所做的:我有一个 20x20 的整数数组,代表一个空白空间(0)、计算机(1)和播放器(2)。为了减少开销,Minimax Tree 中的每个节点都是较大数组(较小的参考框架)的 9x9 数组表示。我的 eval 函数返回一个 int,我的 minimax/alphabeta 算法返回一个 int。如何找到 AI 移动的坐标?
并提前感谢您!
java - 通过引用破坏一切:(
嘿,我的搜索树有这个结构
这是根节点定义
在最大值函数中的递归结束后,不应编辑 rootNode 中的数组,因为它是第一个状态,但是当我显示它时,我得到一个充满东西的数组,这意味着 rootNode.state 通过引用传递给最大值功能 :(
//我正在尝试实现 MiniMax 算法。
artificial-intelligence - 效用函数极小极大搜索
嗨,我很困惑如何使用 minimax 搜索来确定效用函数 用任何可以使用 minimax 搜索的游戏来解释它 基本上我在问你如何确定效用函数 Cheers
algorithm - 我对极小极大算法有什么不明白的地方
我对极小极大算法有疑问。
假设我有以下游戏树,并且我添加了一些随机启发式值。
正如我所理解的极小极大算法,它将选择绿色路径。但是,在这种情况下,这可能不是最好的选择。因为顶部节点的右子节点具有它可以获得的最高值,所以这不是最好的移动......
因为如果其他玩家采取其他行动,我的获胜机会就会少得多......
对不起,我很难表达我在这个问题上的意思。但是我在这里怎么想错了?
algorithm - negamax 算法的这种实现是否正确
我正在尝试实现 negamax 算法,这就是我认为应该的方式:
以及对应的negamax函数
是的,我知道它没有编译,但我只是想对其进行一些伪编码。
编辑
calculateBoardFunction(Board board) 将始终评估棋盘的最佳移动计算颜色。
另外,我试图让它通用,所以它对每场比赛(国际象棋,黑白棋,围棋)等都一样......(但这不是问题的一部分)
我还以维基百科的 negamax 伪代码为例。但是使用我>>认为<<我可以使用正确的启发式值很好地创建游戏树的代码。但我在getBestMove
函数中有代码的原因是要弄清楚什么动作实际上是最好的。
但我不确定我是否能做到这一点。
c++ - Tic Tac Toe C++算法调试帮助
请帮助我理解为什么这不起作用。我不知道我的代码中是否存在错误,或者我的算法是否存在根本的逻辑缺陷。
我的算法基于 minimax,但我放弃了启发式评估函数以获得更简单的技术。由于简单的 3x3 tic tac toe 简单,我只想计算每个潜在动作的所有可能游戏结果,并选择具有最高“分数”的一个。我创建了一个有效移动的“顶级”向量以及它们相应的“分数”的匹配大小的向量 - 即针对该移动之后的每个可能结果:++ 获胜和 - 失败。
然而,我的移动分数向量变得奇怪的非对称值。尽管即使代码有效,但从逻辑上讲,是否有可能计算出导致最多赢和最少输的移动,对诸如分叉之类的简单策略视而不见?我的直觉说是的,但我还没有详细计算出数学。
artificial-intelligence - minimax:如果 min 播放不是最优的会发生什么
极小极大算法的描述说,两个玩家都必须发挥最佳效果,因此算法是最佳的。直觉上是可以理解的。但是请任何人具体化,或者证明如果 min 播放不是最佳会发生什么?
谢谢