【问题标题】:Warlight Game AI - MiniMax ApproachWarlight Game AI - MiniMax 方法
【发布时间】:2016-02-22 21:18:21
【问题描述】:

我想为Warlight Game 编码一个AI。我读到了关于井字游戏的MiniMax algorithm,但我想这种情况有所不同。

对于井字游戏,我们在节点中有状态。但我无法想象如何在节点中存储 Warlight 游戏的状态。我已经预先计算了通过使用这里的理论创建的概率值。 https://stats.stackexchange.com/questions/91814/probability-enemy-territory-captured-in-x-turns

你能帮我理解在 Warlight AI 游戏中使用 MiniMax 搜索最合理的方式是什么吗?

注意事项: 我使用的是 Java 代码库,但它与实际的 Warlight AI 竞赛不同。这不是为了竞争。

这并不完整,但这里是一个预先计算概率的示例用法,只是为了给出一个想法;

aRes = FightAttackersResults.loadFromFile(new File("FightSimulation-Attackers-A200-D200.obj"));
dRes = FightDefendersResults.loadFromFile(new File("FightSimulation-Defenders-A200-D200.obj"));

for (int a = defenders; a <= attackers; ++a) {
            double chance = aRes.getAttackersWinChance(a, defenders);
            if (chance >= winProbability) {
                return a;
            }
        }

【问题讨论】:

  • 链接不正确

标签: java artificial-intelligence minimax


【解决方案1】:

此游戏有机会节点(攻击涉及由游戏控制器而非 AI 决定的随机结果),因此您需要从名为 ExpectiMax 的极小极大变体开始。它们之间的主要区别在于,expect max 为结果的每个节点分配一个可能性,并且该节点的值是结束于该分支之外的任何可能状态的加权组合。

在真实的游戏中,所有玩家同时移动,而看起来只是一个接一个地进行比赛。无论如何,您必须能够计算所有可能的移动,这是一项艰巨的任务(所有可能的攻击组合)。由于游戏如此庞大,因此难以处理,因此,您必须找到一种方法来在到达叶节点之前切断搜索。在您切断搜索的地方,您将运行一个评估功能,这是您必须手工制作的东西。您可能会发疯,但一个简单的示例可能是计算您在下一回合可以占领邻近领土的领土百分比减去下一回合可以占领的领土数量。您的游戏质量几乎完全取决于此评估功能,因为您可能不会在预期的最高评估中获得超过 4 或 5 个级别。

对于游戏的第一阶段,我不会担心尝试使用任何类型的极小极大,只需预先指定静态策略,除非您事先了解有关您将要对抗的玩家的一些信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多