Algorithm 博弈的最小-最大评价函数
我正在开发一款游戏(坦克游戏2D),(eg-)AI播放器。我的玩家将是其他5名玩家(AI)中的一名,他们为获得最大硬币而玩游戏时会随机出现在网格中的某个位置。(请看上面给出的图片)。玩家也可以互相射击。健康包也会随机出现在网格中的某个地方Algorithm 博弈的最小-最大评价函数,algorithm,artificial-intelligence,evaluation,minmax,Algorithm,Artificial Intelligence,Evaluation,Minmax,我正在开发一款游戏(坦克游戏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(板
现在的问题是——如何获得这些参数。请注意,现在我们有一个优化问题。
这个特定问题的一个解决方案是蒙特卡罗学习
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
现在的问题是——如何获得这些参数。请注意,现在我们有一个优化问题。
这个特定问题的一个解决方案是蒙特卡罗学习
a_1,…,a_n
-的一些随机值初始化,并在它们之间进行比赛。
比赛结束后,根据表现最好的代理更改每个代理的
a_1,…,a_n
值,然后重新运行比赛。(一种方法类似于“生成”步骤-交叉和突变,但也有其他方法)
最后,蒙特卡罗学习过程应该为
a_1,…,a_n
提供良好的值,这将为棋盘提供一个良好的启发式函数。因此,问题是,如何编写评估函数?有很多这样的例子,但它们显然是专门针对其领域的。国际象棋棋盘评估函数ion在这里帮不了你太多。告诉我们你的想法。是的,国际象棋的评估功能帮不了你。我是这样想的。我必须优先考虑玩家的需要。最大的优先权是玩家不应该被杀,所以如果有其他玩家向我开枪,我应该立即离开子弹的轨道。收集硬币接下来是mes。像wise一样,我可以对需求进行优先级排序,并为每个需求分配一个常量值。评估过程如下,它将返回每个需求与相应常量值的乘积之和。最大优先级需求将得到一个更高的常量值。听起来是一个不错的开始。似乎您的优先级应该根据您的需求而有所不同健康。如果你的健康状况非常好,那么购买健康套餐的优先级应该很低。但是,如果你在死亡之门,那么购买健康套餐可能比一枚硬币更有价值。你能做什么