2012-09-01 183 views
0

我目前工作的一个人工智能的纸牌游戏Wizard。 精灵是一款诡计多端的游戏,每位玩家在实际比赛开始前都会陈述他相信他会采取多少技巧。AI设计纸牌游戏

在阅读了一些论文和Artificial Intelligence: A Modern Approach的一些部分后,我决定首先用开放卡设计我的游戏算法,以便每个玩家都有完整的信息。 所以我刚刚开始并使用UCB选择策略实施了蒙特卡洛树搜索算法。我用java实现了所有的东西,它似乎运行的很好,但我的机器人还没有达到最佳状态。特别是预测你得到的技巧似乎是一项艰巨的任务,为此我使用了相同的MCTS。因此,基本上我的算法扩展了游戏的当前状态(例如,2个玩家放置了他们的出价),创建了一个新节点(例如3个玩家放置了他们的出价),然后随机播放,直到游戏结束。然后通过节点评估和备份分数。

我认为提高算法是,下一步启发式添加到树搜索,所以,这将很可能导致损失从一开始就被忽略分支。

我的问题是:你认为这是一个好办法?还有哪些其他方法会有希望,或者您还有其他方法吗?

+0

我知道这个游戏是“拧你的邻居”。我相信只要考虑有多少卡比你的卡高,你就可以拿出相当不错的玩法。假设一张牌是一张牌:如果你拥有王牌王牌,那么你的一次擒杀的可能性是100%,而如果你有任何非王牌王牌,你可以认为这是25%(或者如果你是50%预计领先,但要知道你可能会开始使用树搜索......还可以让你更准确地计算出百分比,通过知道当你打算玩特定卡牌时卡牌剩下的概率)。 – erisco

+0

如果您只想对算法提供反馈,而不是实际的编码/实现,您可能在计算机科学StackExchange站点获得更好的运气。 –

+0

我一直希望调查MCTS玩卡片游戏,因为它看起来非常合身。有趣的是,你没有看到很好的结果。你的想法在卡牌游戏中加入一些启发式似乎仍然符合MCTS的精神,并且人们会认为这会有所帮助。 –

回答

3

我不知道了比赛,但我可以给你的一般建议。蒙特卡罗方法是一个很好的解决方案,如果

  • 搜索空间是非常巨大的(即棋盘游戏)
  • 你不知道如何建立一个强大的启发式

有了这些条件,MCTS是你能做的最好的。

但是如果你能够建立一个强大的启发式功能比你必须直接使用“Min-Max/Alpha-Beta Pruning”算法(或类似算法)。一般来说,使用这些算法可以获得更强大的AI。

就是这个原因,因为与GO我们使用MCTS但与国际象棋我们还是用最小 - 最大。

但算法是AI的仅有10%。游戏-AI编程中最困难的部分就是利用游戏机制来修剪搜索空间并建立最强的启发式模式:)

例如,您可以从一个着名的纸牌游戏开始理解AI:扑克(http://webdocs.cs.ualberta.ca/~games/poker/)。然后你可以将这些技巧扩展到你的游戏。

+0

但是,你将如何处理不完美的信息?可能的交易空间是巨大的,我不再肯定,如果我首先尝试用完美的信息来处理问题,然后再添加蒙特卡洛采样,我会得到好的结果。我的第一个计划是使用Monte Carlo Sampling生成可能的交易,并使用MCTS解决每笔交易。然后可以通过对所有样本进行平均来计算最佳移动。但我不认为,这将在合理的时间内产生好的结果。 – ollinator

+0

好吧,也许你不必检查每一个可能的交易。例如在扑克AI中,由于游戏理论和其他统计方法,我们能够避免检查“每一个可能的交易”。这些优化严格取决于游戏。 –