问题标签 [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.

0 投票
2 回答
1123 浏览

java - 帮助我的 MinMax 实施

我一直在尝试为一个简单的游戏实现一个 minMax 算法(稍后将尝试进行字母修剪)......我看过很多伪代码和教程,但我就是无法让它工作......

一点帮助将不胜感激:)

这是相关的类...(为清楚起见,删除了实现)

这是我的最小-最大实现......有人可以指出我做错了什么吗?谢谢你。

编辑:游戏的简要说明如下,你面前有一定数量的不同面额的硬币。您和另一名玩家轮流从任一侧(左侧或右侧)取出一枚硬币。硬币的面额表示您为该动作得分。某些硬币具有特殊含义,例如选择 X 表示您将跳过一个回合,或者 Y 表示您将再获得一个回合。你的目标是比你的对手得分更多。

0 投票
2 回答
2649 浏览

java - 最小/最大井字游戏

我正在创建一个最小/最大的井字游戏,因此我可以将其扩展到 alpha-beta 修剪。因此,在我的最小/最大期间,我发现一条路径是否导致 +1(X 获胜)-1(O 获胜)或 0(平局)但是对于这样的板配置:

在 0 回合期间,它选择左下角,因为该动作导致其获胜。我是否应该检查每个表的块,然后它不会运行得那么快,我不认为应该如何实现 min/max。

有人可以解释为什么最小值/最大值不够聪明,无法检测到这一点。我认为它查看了左侧节点并返回 +1/-1/0。

0 投票
1 回答
1619 浏览

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 中的当前位置来制作最小最大算法的工作吗?

0 投票
2 回答
626 浏览

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 值时遗漏了一部分。

(编辑澄清)

0 投票
1 回答
1509 浏览

excel - 如何在 VB excel 2003 中遍历 MIN/MAX 函数中的单元格?

我是新手,并试图在 VB excel 中执行上面的下一个代码(问题以粗体显示):谢谢

0 投票
3 回答
1204 浏览

algorithm - Negamax - 玩家移动两次

如果满足条件,同一玩家移动,您如何处理游戏?

我尝试过这样的事情,但我认为这不太对:

0 投票
1 回答
4246 浏览

sql - 如何在最小值/最大值上进行自我加入

我是 sql 查询的新手。表定义为

我需要找到给定日期范围内的每个符号,max(high)以及和min(low)的相应日期。max(high)min(low)

  • 可以在给定表中获取第一个最大日期和最小日期。
  • 在给定的日期范围内,某些日期可能会丢失。如果开始日期不存在,则应使用下一个日期,如果最后日期不存在,则应使用较早的可用日期

数据为一年和大约 5000 个符号。

我尝试过这样的事情

0 投票
5 回答
4361 浏览

algorithm - 如何在井字游戏中设置表格的分数?

我有表格和一些函数,如 Generate_moves() 等,但要使 minmax 算法起作用,我需要为表格设置分数,以使计算机选择最佳表格。

MycanWin(string)返回一个数字,告诉我在一条直线或一列中有多少个 X 或 Os,但我怀疑这是为表格设置分数的一个很好的原因。

如果我有桌子:

分数应该与

并且应该大于

而且我不知道如何让 Score 函数告诉我不同​​的分数。我怎样才能实现方法 Score 来告诉我这个?

编辑:

如果计算机首先是 X 而我是 O

现在我怎样才能让计算机选择下一个最佳选项

0 投票
2 回答
551 浏览

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

0 投票
1 回答
694 浏览

c++ - NegaMax 无法按预期工作

我在国际象棋程序中实现一个简单的 NegaMax 时遇到问题。

根据几个网站,negamax 在我的代码中应该如下所示:

但是有了这段代码,我得到了这个输出:

如果我从起始位置对 ply3 进行 negaMax,那是不对的。

如果我删除递归函数调用前面的减号,我会得到更好的结果。但在我看来这是不对的,因为在上面的代码中没有减号,我只会最大化一个玩家的分数,而不是两个玩家的分数。

我尝试实现不同版本的 MinMax、NegaMax 和 AlphaBeta。但我总是得到 0 分。我会非常感谢任何提示。