问题标签 [gkminmaxstrategist]

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 回答
684 浏览

swift - GKMinmaxStrategist 从哪里开始?

我想知道这里是否有人使用 GKMinmaxStrategist 运气好。这个类/功能在 WWDC 上被展示过,但大部分示例代码都是用 Objective-C 编写的,这令人失望。

GameplayKit 的 WWDC 视频展示了另一款游戏 Stone Flipper (Reversi/Othello),但他们尚未发布代码(还没有?)。

有没有人有这方面的运气?我希望只用一个简单的井字游戏来尝试这个,但我完全不知道如何开始。

0 投票
3 回答
407 浏览

swift - GKMinmaxStrategist 不返回任何动作

我的代码中有以下代码main.swift

...我的子类position的一个实例在哪里。运行此代码后,是. 也会导致(但会导致对象)。GKGameModelPositionmovenilbestMoveForPlayer(position.activePlayer!)nilposition.activePlayer!Player

然而,

导致可能移动的非空数组。来自 Apple 的文档(关于bestMoveForPlayer(_:)):

如果玩家无效、玩家不是游戏模型的一部分或玩家没有可用的有效动作,则返回 nil。

据我所知,情况并非如此,但函数仍然返回nil. 这里会发生什么?

如果有任何帮助,这是我对GKGameModel协议的实现:

如果我应该显示任何其他代码,请告诉我。

0 投票
0 回答
108 浏览

minimax - GKMinmaxStrategist 未探索所需职位

想象一个非常简单的游戏,在任何非最终位置,主动玩家都可以进行第 1 步或第 2 步。

假设玩家 1 从第 1 步开始,他立即赢得比赛。如果他从第 2 步开始,如果玩家 2 下第 1 步,他仍然可以赢,但如果玩家 2 下第 2 步,他就输了。

显然,第 1 步是最好的一步。不仅因为它立即赢得比赛,而且因为如果玩家 1 改为使用第 2 步,则不能保证获胜。

对于任何大于 1 的前瞻深度,GKMinmaxStrategist尽管想要玩移动 2。请注意,战略家似乎甚至没有探索玩家 1 输掉比赛的可能性,只探索了位置[1][2,1]。在我看来,这GKMinmaxStrategist是修剪太多职位。

我在这里错过了什么吗?

您可以在GitHub 上找到示例项目。

0 投票
1 回答
42 浏览

swift - Swift 4 - GKMinmaxStrategist 修改实际游戏模型

在我开始之前,这个问题已经被问过了一段时间,但我不相信答案是令人满意的(GKMinmaxStrategist 在返回最佳移动后修改模型

我正在尝试构建一个具有两种玩家类型(国王、敌人)的简单棋盘游戏。作为其中的一部分,我正在尝试实现 GKMinmaxStrategist,问题在于它不断修改实际的游戏模型,而不是在副本上模拟移动。

让我从显示一些代码开始:

正如上面的代码中提到的,copy结果self是单独的实例。我相当确定问题出在moveToken(move: move)应用于实际游戏板而不是副本的应用方法中,但我不明白为什么(确认我在进入后和退出功能之前打印了游戏板,并且印刷品不同,而我不希望每当调用此方法时主板会发生变化)。否则它似乎工作正常,它返回一个明智的举动。

任何帮助将非常感激!

0 投票
0 回答
57 浏览

swift - GKMinmaxStrategist - 不适用于开始移动(Swift 4)

我正在开发一个两人战略棋盘游戏,可以选择与 CPU 对战,我正在使用 GKMinmaxStrategist 为 CPU 玩家提供一些大脑。仅作为背景,游戏中有两个“派系”(国王,敌人) 玩国王的人总是开始。

现在,我已经设法实现了策略师,如果我与 CPU 对战 King 并迈出第一步,它就会起作用。但是,当我扮演 Enemy 并且 CPU 必须迈出第一步(扮演 King)时,它的工作方式并不奇怪。看起来,在调用了策略师的 bestMove 方法之后,它并没有调用任何底层的模拟方法,比如 isWin、apply、score 等。

我曾尝试更改规则,让敌人总是开始,但它再次不起作用,而当我扮演国王并迈出第一步时,它确实为敌人吐出动作(如上所述)。

此外,我没有使用策略师,而是简单地随机选择了移动(所有可能的移动),只是为了看看基于回合的逻辑是否有效,并且确实有效。对于这两个派系,它会在我期望的时间和方式移动。

所以这第一步,无论哪个派系似乎都是问题,我不知道为什么会这样。有没有人遇到过类似的问题,或者是否有人对为什么会出现这种情况有任何好主意?

任何帮助将非常感激。

这是游戏模型的扩展,包括战略家以及管理游戏玩法的 GameVC。

0 投票
1 回答
129 浏览

algorithm - 如果对手没有最佳发挥,对 MinMax 算法的影响

如果对手没有最佳或理性地玩,它如何影响通过 AI 算法(例如 Minmax 算法)赢得基于回合的零和游戏的机会?

是否有可能通过打出不像标准 Minmax 算法那样最优的动作来击败 Minmax 算法,因为它假设对手处于最优状态,从而根据上述假设做出决定?