2012-11-05 90 views
1

我正在开发一款游戏(坦克游戏2D),(例如 - link)AI玩家。我的玩家将是另外5名玩家(AI也是),他们为获得最大的硬币而玩,随机出现在网格的某处(请看上面给出的图片)。玩家也可以互相射击。健康包也随机出现在网格中的某处。Min-Max游戏评估功能

因此,为了使用最小最大树,找出最聪明的下一步,我必须建立一个评估函数。问题出现在这里,我以前没有这种评估功能的经验。我是否应该遵循任何指导原则,或者有一个共同的方法来做到这一点我的意思是我有我的想法,我不知道它是否会做工作。你能告诉我哪个区域应该学习吗?我搜索了它,发现了很多东西,但没有适当的教程或类似的东西。谢谢。

+1

所以,问题是,你如何编写评估函数?有很多这样的例子,但他们显然专门针对他们的领域。国际象棋棋盘评估功能在这里无助于你。告诉我们你的想法。 –

+0

是的,国际象棋评估功能没有帮助。我想过这样的事情。我必须优先考虑球员的需求。最大优先级是玩家不应该被杀死,所以如果其他玩家向我射击,我应该立即从子弹的轨道上跳出来。接下来收集硬币。像智者一样,我可以优先考虑需求并为每个人分配一个固定值。评估如此发生,它会返回每个需求的乘积与相应的常数值的和。最大优先需求将获得更高的价值常数。 – Sudheera

+1

听起来像一个体面的开始。似乎你的优先事项应该根据你的健康情况而有所不同。如果你身体健康,追求健康包装应该是非常低的优先。但是,如果你在死亡的门口,那么追求健康包比硬币更有价值。 –

回答

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

蒙特卡洛学习:

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

最后 - 蒙特卡洛学习过程应该会给你很好的价值a_1,...,a_n - 这将给你一个很好的董事会启发式功能。

+0

与“蒙特卡罗学习”类似,训练神经网络例如通过[时间差异](http://www.research.ibm.com/massive/tdl.html)可以在某些领域非常成功。在西洋双陆棋中,从一张空白的石板开始,实际上产生了令人惊讶的更好的AI玩家。 –

+0

那么,我真的很感激你上面提到的,谢谢。 – Sudheera