algorithm - 游戏的最小-最大评估函数

标签 algorithm artificial-intelligence evaluation minmax

<分区>

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

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

最佳答案

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

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

我会做的如下:

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

蒙特卡洛学习:

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

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

关于algorithm - 游戏的最小-最大评估函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237837/

相关文章:

evaluation - 评估开发人员

algorithm - 打包算法

algorithm - 分析具有递归 T(n) = T(n - 1) + T(n - 2) + T(n -3) 的算法?

algorithm - 如何在二维数组中进行交叉——遗传算法

artificial-intelligence - Connect 4 应该使用什么机器学习算法?

lua - 在数学环境中评估 Lua 中的表达式

java - 为什么只有 Big Oh 的最高多项式次数?

algorithm - "Teach"一台电脑如何做加法?

java - Java 游戏的随机 Action AI Controller

kotlin - 如何在Kotlin中评估由String表示的 bool 表达式?