问题标签 [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 投票
1 回答
66 浏览

r - 如何在R中的一组非连续数字中获取最小数字和最大数字

我有一组数字:1,2,3,7,8,9,12,13,14...我想得到每个连续部分的最小值和最大值,所以结果应该是1-3,7-9,12-14.

我可以使用 for 循环来比较并获得最小值最大值,但如果我有超过 1000 万个数字,这种方式会花费我很长时间......

有人知道是否有更快的方法来获得我想要的东西吗?谢谢!

0 投票
1 回答
1770 浏览

python - PICOS 中的极小极大优化

我有一个关于如何使用 Python 中的 PICOS 包解决 Min-Max 类型的优化问题的一般问题。在搜索PICOS 文档和网络时,我在这方面的信息很少。

我可以想象以下形式的一个简单示例。

给定一个矩阵 M,求 x* = argmin_x [ max_y x^TM y ],其中 x > 0, y > 0, sum(x) = 1 和 sum(y) = 1。

我尝试了一些方法,从最直接的想法开始,即在 PICOS 问题类的目标函数中使用minimax关键字minmax。事实证明,这些关键字都不是有效的,请参阅目标函数的包文档。此外,具有嵌套的目标函数也被证明是无效的。

在我最后一次天真的尝试中,我有两个函数,Max() 和 Min(),它们都在解决线性优化问题。外部函数 Min() 应该最小化内部函数 Max()。因此,我在外部优化问题的目标函数中使用了 Max()。

当我运行上面的代码时,它给了我以下错误消息。

在这一点上,我被卡住了,无法解决这个问题。

只是 PICOS 本身不支持 min-max 问题,还是我对问题的编码方式不正确?

请注意:我坚持使用 PICOS 的原因是理想情况下,我想知道在解决最小-最大半定规划 (SDP) 的背景下我的问题的答案。但我认为添加半定约束并不难,一旦我能弄清楚如何使用 PICOS 解决一个简单的最小-最大问题。

0 投票
1 回答
107 浏览

java - 坚持使用 alpha beta 剪枝的 minmax 算法

我正在尝试在 java 的井字游戏中实现带有 alpha beta 修剪的 minmax 算法。当我完成编码时,我立即发现了一个异常,ArrayIndexOutOfBounds所以我尝试放置一些终端输出以自己查找错误,我发现它是由最终返回中的错误结果引起的:算法最终返回[-1][-1]分数-2147483646并且它当其余代码尝试进行移动并将坐标放在字段中时会导致异常。我做了一些计划来模拟一些动作和一些可能的树,但我找不到错误。

我在这个问题上被困了一个星期,我快疯了!在此先感谢并为糟糕的英语感到抱歉,但这不是我的主要语言,我正在慢慢尝试学习它

-------------------------------------------------- - - - - - - - -编辑 - - - - - - - - - - - - - - - - - --------------------------

根据要求添加检查功能:

0 投票
2 回答
237 浏览

c++ - 如何用 STL mimax 算法替换我的“for”循环以找到最小值/最大值

我必须从一个

这是我的代码:

...

这工作正常。我使用 mimmax STL 开发了一个版本:

这也可以正常工作并给出相同的结果。然而,由于算法 minmax 被调用两次,因此执行时间是两倍。是否可以通过调用 minmax 算法来优化这一点?

0 投票
1 回答
330 浏览

python - Minimax 实现 Planet Wars Python

我对人工智能非常陌生,并且大多在理论计算机科学/人工智能方面有经验。作为一个小项目,我试图在几年前的 Google AI 挑战的简化版本上实现极小极大算法。不幸的是,经过大量尝试和伪代码阅读,我还没有能够成功实现它。

星球大战是两个拥有自己星球的玩家之间的游戏。每回合玩家都可以决定从他自己的哪个星球,将一半的船只发送到中立或对手的星球。这样一来,就有可能接管对方的星球。当对手没有星球时,你赢了。

到目前为止,我已经写了这个:

但是当试图与另一个机器人比赛时,终端会给出这个回报:

我的机器人似乎因为速度不够快或没有做出决定而错过了转弯。

我将不胜感激任何输入或反馈!谢谢!

0 投票
0 回答
342 浏览

java - 最小最大井字游戏 Java

在过去的几天里,我一直在尝试使用 Java 在 tictactoe 中实现 minmax 算法。到目前为止,我的尝试取得了一些成功,但它并非无与伦比,并且在放置令牌时经常会犯错误。我希望就如何修复我的代码提供一些建议:

图中蓝色为玩家,红色为AI,蓝色先行。在这种情况下,红色应该将他们的令牌放在中间的正方形

在这里,红色不是阻止玩家,而是将他们的令牌放在右上角。

某些原因导致 AI 非常具有攻击性,并且总是在不考虑其他玩家在做什么的情况下走线,但我无法弄清楚是什么导致了这种情况,因为在某些情况下计算机会阻止玩家。

0 投票
1 回答
6648 浏览

c# - 实现和使用 MinMax 与四排 (connect4) 游戏

我正在尝试为连续四个(或 connect4 或连接四个)游戏实现 MinMax 算法。

我想我明白了,它应该建立一个有一定深度的可能板树,评估它们并返回它们的分数,然后我们只取这些分数的最大值。

因此,aiChooseCol()通过调用检查每个可能列的分数MinMax()并返回具有最高分数的列。

现在我不确定,这是正确的打电话方式MinMax()吗?

检查是否正确temp = Math.Max(temp, 1000);

我还没有制作启发式函数,但这至少应该识别一个获胜的列并选择它,但目前它只是选择左边的第一个空闲列......我不知道我做错了什么。

一些注意事项:

FillSignInBoardAccordingToCol()如果成功则返回布尔值。

board类型有一个char[,]包含实际棋盘和玩家标志的数组。

此代码在 AI Player 类中。

0 投票
0 回答
289 浏览

c - Minmax 算法为某些深度选择最差的移动

我必须为 Android 上的游戏 FloodWars 编写一个播放器。到目前为止,我成功地编写了一个 minmax 和一个材料评估器,这很简单。

我的问题是,在特定的桌子上,在大于 9 的奇数深度上,它给出了最坏的举动。这是表格:

颜色被替换为:'@', '#', '+', '.', '*'。这是指定深度的输出:

在小于 11 的所有深度上,它给出了预期的输出:

这是一些代码,重要的是:

  • lvl 是深度,board 是存储为 d[MAX_L][MAX_C] 的板 - 数据和 l(行数), c(列数) - 板的实际大小。
  • 函数floodfill_ch(...) 将棋盘上的一组颜色更改为另一种颜色,getMoves(...) 获取合法移动(所有移动-角),evalM(...) 获取a 的材料分数棋盘(以“我”为主的方格 - 以“他”为主的方格)。
  • g_me 和 g_he 是玩家的位置(行和列)。

我交换了evalM@WeatherVane 建议的参数,但什么也没发生。我在标准输出上打印了根的孩子的结果,结果(分数)不同,但程序选择了最差的一个。
这是已交换参数的程序的调试屏幕:

这是没有交换参数的输出:

分数是标记在根的孩子上的分数。

这是整个代码:

minmax 算法的调用是minmaxMin(10, &cpB);

0 投票
1 回答
483 浏览

algorithm - 关于带有 alpha beta pruning 的随机性和 minmax 算法

在 alpha beta 算法中随机选择一个节点的子节点会比按顺序选择它们更有可能被截断吗?

这是我的添加标记为 *** 的伪代码。

我在一个四人连接游戏中运行了一个小样本,它似乎运行得更快一些,但是当我实际计算有和没有随机性的截止时,有更多没有随机性的截止。这有点奇怪。

是否有可能证明它更快(或更慢)?

0 投票
3 回答
719 浏览

c++ - 将 std::minmax 与一对进行比较

标准算法minmax可以与单个值进行比较。但是,minmax算法返回值不能与一对值进行比较:

现场示例

原因是make_pair(2, 1)返回 apair<int, int>minmax(1, 2)返回 a pair<const int&, const int&>。没有参考混合operator==重载pair

然后解决方法是显式编写std::pair<const int&, const int&>(int, int)或将其包装在自制make_cref_pair函数中。

问题:有没有更简洁的方法来比较minmax返回值和一个pair值?我是否正确处理了我的引用make_cref_pair