问题标签 [game-theory]

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 投票
0 回答
358 浏览

game-engine - 什么是纳什积?

我试图查看“纳什产品”的概念,但没有找到任何有关纳什产品的目的和工作的相关且有用的文献。如果有人指出文献或解释它会很好(意味着它是什么,何时以及如何使用或计算?)

0 投票
2 回答
40 浏览

python - 实例变量被自动修改

我创建了一个新类,它代表井字游戏中的一个位置。基本上我要做的是制作一个包含所有可能的游戏位置的树,其中每个节点都是一个Position对象,并使用极小极大算法为玩家找到最佳移动。minimax 算法未在下面显示,因为 Position 类未按要求工作。

该类Position有一个generate_children方法可以列出Position可以从当前位置到达的对象。执行程序,我们得到输出,每次迭代后pos_matrix,当前Position对象的值都在变化,这是不希望的。我没有触及pos_matrix循环中当前位置对象的 ,并play_move制作了矩阵的副本以避免弄乱它。仍然在pos_matrix改变每次迭代。

怎么了?我该如何调试它?

试过:搬出play_move课堂,没用。

注意0pos_matrix中的A代表空方格,1代表“X”,-1代表“O”。
kiska_chance意味着“谁的机会”。:P

0 投票
5 回答
8839 浏览

algorithm - 石头游戏 - 2 名玩家完美游戏

最近我了解到了 nim 游戏和 grundy number 我被困在一个问题上。请给我一些想法

问题: A和B用一堆石头玩游戏。A开始比赛,他们交替移动。在每一步中,玩家必须从堆中移除至少一个且不超过 sqrt 的数字石头。因此,例如,如果一堆包含 10 块石头,那么玩家可以从这堆中取出 1、2、3 块石头。A和B都玩得很完美。无法进行有效移动的玩家输了。现在你得到了石头的数量,你必须找到如果双方都打得最好的将获胜的球员。例子

n=3 一场胜利,

n=5 B 赢

n<=10^12

我可以通过使用 Grundy 数https://www.topcoder.com/community/data-science/data-science-tutorials/algorithm-games/用少量石头解决这个问题?

grundy 函数是 g(x),其中 x 是剩余的石头。调用 F(s) 是我们可以从 x 石头中获得的剩余石头数量的集合。如果 s 是终端位置,则 g(s)=0

如果 s 不是终端位置,令 X = {g(t)| t 在 F(s)} 中。那么,grundy number of s 是 X 中不存在的大于等于 0 的最小整数。

例如 x=10 所以 F(x)={9,8,7} 取 1,2 或 3 个石头。(sqrt(10)<=3)

如果 g(n)>0 => 第一个玩家获胜

g(0)=0

g(1)=1

g(2)=0

g(3)=1

g(4)=2 ....

但是这个算法很慢。

提前致谢。

0 投票
2 回答
1023 浏览

game-theory - Manasa 和 Prime 游戏 (Hackerrank)

我需要帮助来解决这个问题 -

Manasa 喜欢 NIM 游戏,但在同一个游戏中玩了很多次,有一天她觉得无聊。所以她想改变游戏规则。由于她喜欢素数,她制定了一条新规则:任何玩家只能从桶中取出素数的球。但是有无限的素数。所以为了保持游戏简单,玩家只能从一个桶中取出 x 个球,其中 x 属于集合 S。 S={2,3,5,7,11,13} 现在整个游戏可以描述为如下:给定 N 个桶和第 k 个桶有 Ak 数量的球,玩家可以选择一个桶并从该桶中取出 x 个球,其中 x 属于 S。 Manasa 对桑迪采取第一步。如果他们两个都发挥最佳,谁会赢?

0 投票
1 回答
33 浏览

algorithm - 我怎么知道什么时候没有解决方案?算法任务

简而言之,鉴于这样的问题:

我们加载玩家数量,

每个玩家的钱,

我们加载一个由 L i W 组成的字符串

例如:

4 -> 玩家的

2、3、2、1

2是第一个玩家的钱,3是第二个玩家,等等。

我们加载循环

例如:

WLL -> W == 赢 = 现金 + 1,L == 输 = 现金 -1;

如果其中一名玩家的钱用完,则中断游戏,并给出所有玩家的游戏数量。

所以:

循环不断重复,所以,我们有 WLLWLL ... WLL

2、3、2、1

[WLL - 第一个周期] [WLL - 下一个周期]

所以,我们有:

3,2,1,2

下一个:

2,1,2,1

最后:

1,2,1,0

我们计算游戏的数量 - 12

玩家永远不会输的情况也是如此,然后你写-1

所以,

我的问题是:我如何编写一个可以有效计算它的程序,如果游戏永远不会结束写-1?

我有类似的东西:

0 投票
1 回答
2188 浏览

javafx - 优化极小极大算法

我用 JavaFX 制作了井字游戏和九人莫里斯游戏,并为它们实现了 AI。对于九人莫里斯,我还没有实施删除磨机,所以它现在更像是复杂的井字游戏。我使用了带有 alpha-beta 修剪的 minimax 算法,虽然 AI 的动作相当不错,但计算九人莫里斯的动作却非常缓慢。如果我让 AI 玩整个游戏,需要几分钟。

对于评估函数,我一直在使用评估船上每一行的函数,其中行值为:

100 为 3 合一,

10 个 2 合一,

1 代表 1 列,

对手单元格为负 (-100, -10, -1),

否则为 0。

Minimax 算法或多或少是相同的,但对于九人莫里斯,有 16 行要评估,而井字游戏中有 8 行,但对于九人莫里斯,人工智能要慢得多。

如何进一步提高 AI 的性能?

我一直在研究这个问题,我发现了使用神经网络来关注极小极大搜索用神经网络替换评估函数的想法。这些解决方案能否提高我的 AI 性能?

0 投票
1 回答
104 浏览

sml - 使用相互递归解决组合博弈

这是一个典型的公平游戏。两名玩家轮流挑选标有从 1 到 n 的棍子,只要 1 号棍子被选中,游戏就结束。规则很简单:玩家A倒数到5并选择对应的棒子;PlayerA数到2并选择对应的棒。该程序试图找到一个初始点,以便最后选择 1 号棒。

我尝试遍历列表并找到哪个初始位置会给出令人满意的结果,但似乎返回值不正确。代码有什么问题??

0 投票
2 回答
156 浏览

algorithm - 卡片算法游戏

我正在解决以下问题并采用蛮力方法,但无法提出一个好的解决方案。问题如下:

有2*N张卡。您和您的对手将它们分开(给您 N 张牌,给他们 N 张牌)。您确切地知道他们有什么牌以及他们将按什么顺序打牌。

游戏规则如下:在前 N/2 轮中,拥有最高牌的人获胜,在最后 N/2 轮中,拥有最低牌的人获胜。

鉴于这些规则和你的对手在那里打牌的顺序,你可以获得的最大胜利数量是多少。

例子:

你有牌:2、5、6、7。你的对手有牌:1、8、4、3,并按顺序打出。

你可以得到的最高分是 2,因为你打 7 对 1,输掉第 2 和第 3 轮,然后在最后一轮打 2 赢。

我的想法:把你的牌分成两堆,你的大号和小号。然后找出最佳匹配。

伪代码/算法的想法将不胜感激。

编辑:总共有 N 轮。前 N/2 轮:较高的牌获胜。最后 N/2 轮:较低的牌获胜。N 必须是偶数。

0 投票
1 回答
113 浏览

java - 从 GAMUT 生成 Polymatrix 游戏

我正在尝试从GAMUT java 库生成 Polymatrix Games。

我收到以下错误:

致命错误:无法生成多矩阵游戏(子游戏鸡)

java.lang.NullPointerException

我一直在挖掘源代码,但找不到错误的根源。错误消息本身也不是很有用。

最终,我试图生成一个随机的 Polymatrix 游戏,其中包含给定数量的玩家和给定数量的每个玩家的动作。

0 投票
1 回答
53 浏览

r - 将数据转换为数据框

我是 R 和一般编程的新手。我有这个数据:截图 在此处输入图像描述

我有 12 个“ID”(研究对象),编号为 1-12。“类型”列告诉每个 ID 的“类型”。例如,“类型”栏的前5个数字是指前5个ID的“类型”,即前5个ID的“类型”分别为3、3、2、1、1。

“pairs”列描述了 ID 如何配对在一起。例如 6 与 9 配对;4与7配对;1 与 11 配对,依此类推。

所以我需要帮助的是我想使用这些数据创建三列。

第一列:列出 ID (1-12)
第二列:返回配对的 ID 就像 1 与 11 配对,所以第二列应该说 11 表示 ID 1)
第三列:告诉配对的“类型”(所以 11 的“类型”是 3。第三列应该显示。

这是所需输出格式的可视化:输出格式 在此处输入图像描述

任何帮助将非常感激。提前致谢!