【问题标题】:Min-Max Evaluation function for a game [closed]游戏的最小-最大评估函数[关闭]
【发布时间】:2012-10-25 15:02:57
【问题描述】:

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

因此,为了使用最小最大树并找出最聪明的下一步,我必须构建一个评估函数。问题出现在这里,我以前没有使用过这种评估功能的经验。我应该遵循任何指导方针还是有一种通用的方法来做到这一点我的意思是我有一些想法,我不确定它是否会做工作。你能建议我应该研究哪个领域吗?我用谷歌搜索了很多东西,但没有合适的教程或类似的东西。谢谢。

【问题讨论】:

  • 那么,问题是,如何编写评估函数?有很多这样的例子,但它们显然是专门针对其领域的。棋盘评估功能在这里不会对您有太大帮助。告诉我们您的想法。
  • 是的,国际象棋评估功能无济于事。我想到了这样的事情。我必须优先考虑玩家的需求。最大的优先级是不应该杀死玩家,所以如果其他玩家向我开枪,我应该立即离开子弹的轨迹。接下来是收集硬币。同样,我可以优先考虑需求并为每个需求分配一个恒定值。评估是这样发生的,它将返回每个需要的乘积之和与相应的常数值。最大优先需求将获得更高价值的常数。
  • 听起来不错。似乎您的优先事项应该根据您的健康状况而有所不同。如果您的健康状况非常好,那么追求健康包应该是非常低的优先级。但是,如果你在死亡的门口,那么追求健康包可能比硬币更有价值。
  • 你可以做的是通过让 AI 自己玩很多很多次来试验不同的评估功能。最成功的代理人应该提升他们的评估功能。您可以通过扰乱成功的评估函数并将它们与原始函数进行对比来让 AI 进行自我训练。如果新功能胜过旧功能,则提升新功能并降低旧功能。

标签: algorithm artificial-intelligence evaluation minmax


【解决方案1】:

基本上,获得游戏评价的最佳做法是:

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

我会做如下:

  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
    现在的问题是 - 如何获取这些参数。请注意,现在我们有一个优化问题。
    此特定问题的一个解决方案是蒙特卡洛学习。

蒙特卡洛学习:

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

最后 - Monte-Carlo 学习过程应该为您提供 a_1,...,a_n 的良好值 - 这将为您提供一个很好的板启发函数。

【讨论】:

  • 类似于“蒙特卡洛学习”,训练神经网络,例如通过temporal differences 可以在某些领域非常成功。在西洋双陆棋中,白手起家实际上产生了令人惊讶的更好的 AI 玩家。
  • 嗯,我真的很感谢你上面提到的,谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 2014-01-19
  • 2017-01-31
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多