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

0 投票
5 回答
1072 浏览

c - 五子棋:搜索时间有限

我正在创建一个 C 程序来玩Gomoku。它使用Minimax搜索来决定最佳移动。但是,它只能搜索 10 秒的最佳着法。如何确定我的搜索功能何时搜索了 10 秒。如果您能给我提供一个示例或文档链接,将不胜感激。

0 投票
2 回答
9454 浏览

algorithm - 如何在 Tictactoe 中实现 minimax

我读了这个答案,这让我很困惑:TicTacToe AI Making Incorrect Decisions

有人可以帮助我了解如何将其应用于 Tictactoe 吗?

  1. 我将如何“从树上爬上去?
  2. 我什至如何创建移动树?

注意:我目前有一个 Board 类,它存储有关游戏的状态(例如,游戏是否包含当前的动作?,是否有赢家?等)当前棋盘上的每个动作都存储为 1 - 9(左上角)右下角成行)。我可以轻松地复制当前的棋盘状态。我可以返回“X”和“O”的当前移动列表,以及板上的可用移动。

0 投票
3 回答
27065 浏览

python - Minimax 为白痴解释

我浪费了一整天的时间来尝试使用 minimax 算法来制作无与伦比的 tictactoe AI。我一路上错过了一些东西(脑筋急转弯)。

我不是在这里寻找代码,只是更好地解释我哪里出错了。

这是我当前的代码(由于某种原因,minimax 方法总是返回 0):

0 投票
1 回答
1592 浏览

search - 游戏搜索树,我必须先构建树吗?

在博弈搜索树中,有很多算法可以得到最优解,比如极小极大算法。我开始学习如何用极小极大算法解决这个问题,算法清晰。但是我对树本身感到困惑,在像井字游戏这样的游戏中节点的数量不是很大,但在像国际象棋这样的其他游戏中却有很多节点。我认为这需要很大的内存空间。那么是否有任何算法可以同时评估和构建树?

0 投票
6 回答
4285 浏览

c - 井字游戏:如何填充决策树?

我正在制作井字游戏程序。我计划使用极小极大。我为所有可能的游戏序列制作了一个带有空间的树,我正在寻找一种填充它的方法。我目前有这种类型:

我正在寻找一种填充网格的方法,就像这里显示的那样。我将如何填充网格以确保所有可能的组合都存在?我的计划是让游戏识别玩家可以采取的每一个动作,然后决定采取哪些步骤才能获胜(我仍然需要弄清楚决策部分,但我一直坚持到我可以填满树中的网格) .

0 投票
2 回答
1608 浏览

algorithm - 带/不带 Alpha-Beta 修剪的 Minimax 算法

使用 alpha-beta 剪枝的 minimax 算法能否产生与没有剪枝的 minimax 不同的答案?

0 投票
1 回答
633 浏览

artificial-intelligence - 抽象策略博弈的评价函数

我正在用 C# & XNA 编写一个抽象的策略游戏。至于AI,我目前用的是Negascout,深度为5。以下是游戏介绍:

游戏由一个 6x7 六边形位置的棋盘、42 个六边形图块和每个玩家(最多 2 个玩家)的 6 个棋子(1 个国王和 5 个棋子)组成。

在游戏的第一阶段,玩家交替在棋盘的空白位置上随机放置一块瓷砖。每个图块最多可以有 6 个指向边缘的箭头。有些箭头可以是双指向的。箭头表示从该图块移动的方向。如果有有效位置,双箭头使棋子移动/跳跃 2 个位置。如果棋盘上仍有空位,则不允许玩家将棋子放置在对手的行中。

一旦这个阶段完成,下一位玩家轮流将他的国王放在离他最近的行的 6 个瓷砖中的任何一个上。接下来,棋子开始移动。棋子根据瓷砖上的箭头移动。通过捕获或阻止国王来赢得比赛。

好的,现在开始我的移动生成功能。

  1. 瓷砖放置阶段 a) 将瓷砖放置在最近的行上。旋转瓦片以找到最佳旋转。b) 一旦最近的一排已满,将一块瓷砖放置在四周被位置包围的空位置上(即没有棋盘边缘)。旋转图块以找到最佳旋转。c) 如果没有找到位置,则添加所有剩余的空位置,尝试找到最佳旋转。

  2. 国王放置阶段 a) 找到最好的瓷砖位置并将国王放置在那里。b) 将剩余的棋子放在行中剩余的空位置上。

  3. 运动阶段 a) 如果王被攻击,如果攻击的棋子没有被防御,则尝试攻击攻击棋子。b) 为所有被攻击的玩家棋子添加移动。c) 添加玩家可以攻击的所有对手棋子。d) 添加玩家可以移动到的所有位置。

现在到评估函数。

  1. 棋子放置阶段得分 = 当前玩家迄今为止放置的棋子数量 + 当前玩家最近行上的棋子 - 没有。到目前为止对手放置的瓷砖 - 最远行(离对手最近)的对手的瓷砖。

  2. 王牌放置阶段得分 = 当前玩家最近行的牌 - 最远行的对手牌(离对手最近)。

  3. 移动阶段得分 = 当前玩家的棋子值 - 对手的棋子值。

对于箭头指向的每个有效位置,图块的权重为 100。件的重量如下:

棋子值 = 棋子类型(国王 = 10000,兵 = 1000)+ 机动性 + 防御 - 攻击 - 企业 - 阻止

其中:流动性=没有。节点可以移动到的位置数(自由或被对手占领)* 1000 防御 = 否。可以实际移动到该位置的围绕该棋子的当前玩家棋子数 * 1000 被攻击 = 否。该棋子周围实际上可以移动到该位置的对手棋子数 * 1000 被阻止 = (king = -10000, pawn = -1000) 棋子无法移动,因为所有箭头都指向无效位置,并且棋子在此游戏中没有机会再次移动.

很长,但我的问题来了:

  1. 放置图块时,AI 有时会使用错误的旋转来放置图块(即,将图块放置在箭头指向无效位置的位置)。有时这发生在他的“家”行。

  2. 移动棋子时,AI 忽略了国王的安全。主要移动国王,并在大约 4-6 步中被捕获。

任何人,尤其是具有国际象棋人工智能经验的人,对如何改进我的人工智能,特别是我的移动生成和评估功能有想法和建议?

谢谢伊万

顺便说一句...如果有人有兴趣试用邮件,请告诉我,我会在我的网站上上传设置。

0 投票
2 回答
2672 浏览

c# - 如何实现 Pentago AI 算法

我正在尝试Pentago用c#开发-game。

现在我有 2 人模式,工作得很好。

问题是,我想要一个玩家模式(针对计算机),但不幸的是,minimax / negamax 的所有实现都是为每个“移动”(放置大理石,移动游戏块)计算的一件事。

butin Pentago,每个玩家需要做件事(放置大理石,并旋转其中一个内板)

我不知道如何实现旋转部分和放置大理石,我希望有人能指导我。

如果你不熟悉游戏,这里有一个游戏链接

如果有人想要,我可以在相关的地方上传我的代码。

非常感谢你

0 投票
3 回答
3084 浏览

c - NegaMax 算法和井字游戏……怎么了?

我是游戏树算法的新手,我尝试实现一个简单的 tictactoe 游戏,它利用 NegaMax 算法来评估计算机 AI 玩家的瓷砖分数。然而,人工智能的行为并不聪明(我可以一直赢,因为人工智能不会阻止我的动作),我认为我错误地实现了 NegaMax 算法。

如果有人可以帮助我使用以下代码,那就太好了。我花了很长时间尝试不同的东西,但我从来没有成功过。

0 投票
1 回答
2744 浏览

list - Scheme / Racket / Lisp中嵌套列表的Minimax操作?

我正在尝试编写一个函数来分析游戏树。树由嵌套列表表示,其中每个子列表代表一个分支。基本上,我想弄清楚两件事:

  1. 嵌套列表的最小值是多少?
  2. 该值的索引是什么?

我以为我已经基本解决了第一个问题,但是我的代码一直返回错误的值——我已经检查了所有内容,但看不到我做错了什么。

任何帮助将不胜感激,谢谢!