问题标签 [minmax]
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.
java - 帮助我的 MinMax 实施
我一直在尝试为一个简单的游戏实现一个 minMax 算法(稍后将尝试进行字母修剪)......我看过很多伪代码和教程,但我就是无法让它工作......
一点帮助将不胜感激:)
这是相关的类...(为清楚起见,删除了实现)
这是我的最小-最大实现......有人可以指出我做错了什么吗?谢谢你。
编辑:游戏的简要说明如下,你面前有一定数量的不同面额的硬币。您和另一名玩家轮流从任一侧(左侧或右侧)取出一枚硬币。硬币的面额表示您为该动作得分。某些硬币具有特殊含义,例如选择 X 表示您将跳过一个回合,或者 Y 表示您将再获得一个回合。你的目标是比你的对手得分更多。
java - 最小/最大井字游戏
我正在创建一个最小/最大的井字游戏,因此我可以将其扩展到 alpha-beta 修剪。因此,在我的最小/最大期间,我发现一条路径是否导致 +1(X 获胜)-1(O 获胜)或 0(平局)但是对于这样的板配置:
在 0 回合期间,它选择左下角,因为该动作导致其获胜。我是否应该检查每个表的块,然后它不会运行得那么快,我不认为应该如何实现 min/max。
有人可以解释为什么最小值/最大值不够聪明,无法检测到这一点。我认为它查看了左侧节点并返回 +1/-1/0。
algorithm - Prolog 中的 Tron lightcycles AI
我有问题将 AI 写入游戏(如 tron lightcycles)。我使用 ncurses 在 C 上编写所有图形和动作。现在我需要在序言上写下机器人的 ai。我正在使用 swi prolog。
我保存当前游戏场(所有矩阵)、当前人类位置和当前机器人位置(如矩阵单元 i、j)。它们像谓词一样保存在 c 的 .pl 文件中。
我的游戏字段是一个包含 1 和 0(1 - 已访问,0 - 未访问)的矩阵。像这样:
然后我需要分析这个矩阵,如:
所以 prolog 中的分析函数将返回一些方向(左、下、上或右)保存到文件中,我的 c 程序读取这个文件并移动机器人。
所以我有一个问题 - 我如何在 Prolog 中分析这个矩阵。我读了一些关于 min-max 算法的东西,但我无法在 Prolog 中意识到这一点。任何人都可以帮助或说明如何使用我的矩阵和 Prolog 中的当前位置来制作最小最大算法的工作吗?
artificial-intelligence - MinMax 树 - 当 Min 可以分两步获胜时
所以,我一直在玩最小最大树,在两人棋盘游戏中创建一个简单的电脑玩家。我了解算法的基础知识,但有一个案例让我的火鸡大脑无法理解……当 MIN 可以分两步获胜时会发生什么?
例如,假设一个四连棋/井字游戏,其中只有两个玩家中的一个可以拥有一个方格。我如何让 MAX 仅仅为了防止 MIN 获得广场而占据一个广场?
让我们尝试一个简化的示例(以漂亮的 ASCII 艺术显示),其中选项是左和右。假设他的树太大而无法一直遍历到终端状态,所以中间值是根据启发式函数计算的(下面用 * 标记)。-INF 是 MIN 获胜的最终状态。
MIN 将在状态 (b) 中选择动作 A,得分为 -INF
MIN 将在状态 (c) 中选择动作 B,得分为 +20
MAX 将在状态 (a) 中选择动作 B,获得 a +20 的分数
问题——当然——是如果 MAX 选择 B,那么 MIN 将执行动作 A(因为该方块仍然可用),因此 MIN 将获胜。我需要让 MAX 来实现在状态(a)中选择动作 A 的价值,以防止 MIN 在下一步中获得 -INF。
我会在代码中进行大量测试以检查 MIN 是否可以获胜,但在我看来,算法应该解决这个问题。我认为我在确定导致此问题的 MAX 值时遗漏了一部分。
(编辑澄清)
excel - 如何在 VB excel 2003 中遍历 MIN/MAX 函数中的单元格?
我是新手,并试图在 VB excel 中执行上面的下一个代码(问题以粗体显示):谢谢
algorithm - Negamax - 玩家移动两次
如果满足条件,同一玩家移动,您如何处理游戏?
我尝试过这样的事情,但我认为这不太对:
sql - 如何在最小值/最大值上进行自我加入
我是 sql 查询的新手。表定义为
我需要找到给定日期范围内的每个符号,max(high)
以及和min(low)
的相应日期。max(high)
min(low)
- 可以在给定表中获取第一个最大日期和最小日期。
- 在给定的日期范围内,某些日期可能会丢失。如果开始日期不存在,则应使用下一个日期,如果最后日期不存在,则应使用较早的可用日期
数据为一年和大约 5000 个符号。
我尝试过这样的事情
algorithm - 如何在井字游戏中设置表格的分数?
我有表格和一些函数,如 Generate_moves() 等,但要使 minmax 算法起作用,我需要为表格设置分数,以使计算机选择最佳表格。
MycanWin(string)
返回一个数字,告诉我在一条直线或一列中有多少个 X 或 Os,但我怀疑这是为表格设置分数的一个很好的原因。
如果我有桌子:
分数应该与
并且应该大于
而且我不知道如何让 Score 函数告诉我不同的分数。我怎样才能实现方法 Score 来告诉我这个?
编辑:
如果计算机首先是 X 而我是 O
现在我怎样才能让计算机选择下一个最佳选项
artificial-intelligence - How can i extract my best move from Min Max in TicTacToe?
The thing is that this little function tells me if the game is a win, a lose or a draw, but how can i get the move that will led me to a win? My Point class is a simple Class With 2 coordinates X, Y and i want to get the answer as a point so i can latter say something like game.Do_Move(myPoint)
.
In case some functions aren't obvious:
game.IsFinished()
- returns true if win/lose/draw else otherwise
game.Score(turn)
- returns -1/0/1 in case is a lose/draw/win for the player with the next move
game.Generate_Moves()
- returns a List with available moves
game.Do_Move()
- void that applies the move to game
game.Undo_Move()
- talks for itself
c++ - NegaMax 无法按预期工作
我在国际象棋程序中实现一个简单的 NegaMax 时遇到问题。
根据几个网站,negamax 在我的代码中应该如下所示:
但是有了这段代码,我得到了这个输出:
如果我从起始位置对 ply3 进行 negaMax,那是不对的。
如果我删除递归函数调用前面的减号,我会得到更好的结果。但在我看来这是不对的,因为在上面的代码中没有减号,我只会最大化一个玩家的分数,而不是两个玩家的分数。
我尝试实现不同版本的 MinMax、NegaMax 和 AlphaBeta。但我总是得到 0 分。我会非常感谢任何提示。