游戏的最小 - 最大评估功能

时间:2012-11-05 18:08:02

标签: algorithm artificial-intelligence evaluation minmax

我正在开发一款游戏(坦克游戏2D),(例如 - link)AI玩家。我的玩家将成为其他5个玩家中的一个(AI也是),他们在网格中的某个地方随机出现获取最大硬币。(看看上面给出的图片)。玩家也可以互相射击。并且健康包也随机出现在网格中的某个位置。

因此,为了使用min max tree并找出最聪明的下一步,我必须构建一个评估函数。问题出现在这里,我以前没有这种评估功能的经验。我应该遵循任何指导方针,还是有一种共同的方法来做到这一点我的意思是我有一些想法,我不确定它是否会这样做工作。你能建议我应该研究哪个区域。我用Google搜索并发现了许多东西,但没有适当的教程或类似的东西。谢谢。

1 个答案:

答案 0 :(得分:5)

基本上,评估游戏的最佳方法是:

  • 玩游戏 - 尝试查看您尝试避免的情况以及哪些情况良好。尝试将这些情况制定为一般评估。
  • 研究 - 有人可能已经研究过这个或类似的问题,如果是这样的话 - 也许有一些文章或其他材料暗示了一些启发式功能。

我要做的事情如下:

  1. 创建一组启发式函数,每个函数描述游戏的一个方面(距离最近的敌人,敌人的火线,我的健康栏......)。我会尽可能地玩这个游戏以扩展这个列表,当然也可以在线查看其他人可能已经为这个/类似游戏找到的想法。
  2. 从第一步开始,我们实际上得到了一组函数:h_1(board),h_2(board),...,h_n(board) - 但我们仍然不知道什么是启发式函数
  3. 我尝试找到一些参数a_1,a_2,...,a_n,并创建我的启发式功能:
    h(board) = a_1 * h_1(board) + a_2 * h_2(board) + ... + a_n * h_n(board
    现在的问题是 - 如何获得这些参数。请注意,现在我们有一个优化问题。
    针对这个特定问题的一个解决方案是蒙特卡洛学习。
  4. 蒙特卡洛学习:

    蒙特卡洛学习的想法是创建一个代理列表(AI),每个代理都用a_1,...,a_n的一些随机值初始化 - 并在它们之间进行比赛。
    比赛结束后,根据最佳表现的代理商更改每个座席的a_1,...,a_n值,然后重新开始比赛。 (实现它的一种方法类似于Genetic Algorithms中的“生成”步骤 - 交叉和突变,但还有其他方法)。

    最后 - 蒙特卡洛学习过程应该为a_1,...,a_n提供良好的价值 - 这将为您提供良好的启发式功能。