Algorithm 博弈的最小-最大评价函数

Algorithm 博弈的最小-最大评价函数,algorithm,artificial-intelligence,evaluation,minmax,Algorithm,Artificial Intelligence,Evaluation,Minmax,我正在开发一款游戏(坦克游戏2D),(eg-)AI播放器。我的玩家将是其他5名玩家(AI)中的一名,他们为获得最大硬币而玩游戏时会随机出现在网格中的某个位置。(请看上面给出的图片)。玩家也可以互相射击。健康包也会随机出现在网格中的某个地方 因此,为了使用最小-最大树并找出最聪明的下一步,我必须构建一个评估函数。问题出现在这里,我以前没有使用这种评估功能的经验。我是否应该遵循任何指导原则,或者是否有一种通用的方法来执行它?我的意思是我脑子里有一些东西,我不确定它是否能起作用。你能告诉我应该研究哪个

我正在开发一款游戏(坦克游戏2D),(eg-)AI播放器。我的玩家将是其他5名玩家(AI)中的一名,他们为获得最大硬币而玩游戏时会随机出现在网格中的某个位置。(请看上面给出的图片)。玩家也可以互相射击。健康包也会随机出现在网格中的某个地方


因此,为了使用最小-最大树并找出最聪明的下一步,我必须构建一个评估函数。问题出现在这里,我以前没有使用这种评估功能的经验。我是否应该遵循任何指导原则,或者是否有一种通用的方法来执行它?我的意思是我脑子里有一些东西,我不确定它是否能起作用。你能告诉我应该研究哪个领域吗。我在谷歌上搜索了一下,发现了很多东西,但没有合适的教程或类似的东西。多谢各位

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

  • 玩游戏-试着看看你试图避免哪些情况,哪些是好的。试着把这些情况描述成一个总体评估
  • 研究-可能有人已经研究过这个或类似的问题,如果是的话-可能有一些文章或其他材料建议使用一些启发式函数
我要做的如下:

  • 创建一组启发式函数,每个函数描述游戏的一个方面(距离最近的敌人的距离、敌人的火力线、我的健康栏等等)。我会玩这个游戏来尽可能多地扩展这个列表,当然也会在网上寻找其他人可能为这个/类似游戏找到的想法
  • 从第一步开始,我们实际上得到了一组函数:
    h_1(board),h_2(board),…,h_n(board)
    ——但我们仍然不知道什么是启发式函数
  • 我试图找到一些参数
    a_1,a_2,…,a_n
    ,并创建我的启发式函数:
    h(board)=a_1*h_1(board)+a_2*h_2(board)+…+a_n*h_n(板

    现在的问题是——如何获得这些参数。请注意,现在我们有一个优化问题。
    这个特定问题的一个解决方案是蒙特卡罗学习
  • 蒙特卡洛学习:

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


    最后-蒙特卡罗学习过程应为您提供
    a_1,…,a_n
    -的良好值,这将为您提供一个良好的棋盘启发功能。

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

    • 玩游戏-试着看看你试图避免哪些情况,哪些是好的。试着将这些情况形成一个总体评估
    • 研究-可能有人已经研究过这个或类似的问题,如果是的话-可能有一些文章或其他材料建议使用一些启发式函数
    我要做的如下:

  • 创建一组启发式函数,每个函数描述游戏的一个方面(与最近的敌人的距离、敌人的火力线、我的健康栏等)。我会玩游戏以尽可能扩展此列表,当然,也会在线查找其他人可能为此/类似游戏找到的想法
  • 从第一步开始,我们实际上得到了一组函数:
    h_1(board),h_2(board),…,h_n(board)
    ——但我们仍然不知道什么是启发式函数
  • 我试图找到一些参数,并创建我的启发式函数:
    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
    值,然后重新运行比赛。(一种方法类似于“生成”步骤-交叉和突变,但也有其他方法)


    最后,蒙特卡罗学习过程应该为
    a_1,…,a_n
    提供良好的值,这将为棋盘提供一个良好的启发式函数。

    因此,问题是,如何编写评估函数?有很多这样的例子,但它们显然是专门针对其领域的。国际象棋棋盘评估函数ion在这里帮不了你太多。告诉我们你的想法。是的,国际象棋的评估功能帮不了你。我是这样想的。我必须优先考虑玩家的需要。最大的优先权是玩家不应该被杀,所以如果有其他玩家向我开枪,我应该立即离开子弹的轨道。收集硬币接下来是mes。像wise一样,我可以对需求进行优先级排序,并为每个需求分配一个常量值。评估过程如下,它将返回每个需求与相应常量值的乘积之和。最大优先级需求将得到一个更高的常量值。听起来是一个不错的开始。似乎您的优先级应该根据您的需求而有所不同健康。如果你的健康状况非常好,那么购买健康套餐的优先级应该很低。但是,如果你在死亡之门,那么购买健康套餐可能比一枚硬币更有价值。你能做什么