如何为棋盘游戏编写一个好的评估函数?

人工智能 游戏-ai 进化算法 α-β-修剪 评价函数 棋盘游戏
2021-11-06 23:28:17

我目前正在为棋盘游戏编写Alpha-Beta 修剪算法。现在我需要想出一个好的评价函数。这个游戏有点像蛇和梯子(你必须先完成比赛),所以对于一个可能的功能列表,我想出了以下内容:

  • 字段索引应该很高
  • 在较低的领域,我的燃料应该很高,到最后它应该很低(进入目标最多需要'10')
  • 必须花费所有“能量提升”才能进入目标,因此优先考虑它们
  • 如果有可能进入目标(合法移动),那就去做吧!

对于一些特殊情况,可能还有更多。

我在某处读到将它们组合成线性函数是最好的(也是最简单的),例如:

0.75*一世-5*p-0.25*|(F-MAX_FIELD_INDEX/一世)|,

在哪里

  • 一世= 字段索引
  • p= 加电
  • F= 燃料

因为我不能问专家,而且我自己也不是专家,所以我没有人问这些参数是否好,我是否忘记了一些东西,或者我是否正确地组合了这些因素。

这些参数没什么大不了的,因为我可以使用遗传算法或其他方法来优化它们。

我的问题和问题是:我必须做什么才能找出如何以最佳方式组合我的功能(如何优化功能/参数安排本身)?

1个回答

根据您的描述,我会最大化以下条款:

  • i
  • -max(f - 10 - (MAX_FIELD_INDEX - i), 0)- 假设每个场地消耗一种燃料;当你有太多燃料时,这会变成负数
  • 的类似功能p,因为在接近目标时花费它们变得更加重要

由于一开始有燃料可能是一件好事,因此您可以使用类似f. 同样对于“电源包”(或者它们是“弱点包”?)。

我会像你一样使用线性函数组合这些术语并让它优化。您可能需要更多这样的条款。当你有足够的燃料时,也许更容易摆脱电源组?然后类似的东西-max(p-f, 0)可能会有所帮助。

您可以生成一些临时表达式或将您的术语的一些产品添加为新术语。您可能希望在简单项的系数已经优化后执行此操作(因此您可以通过良好的起点帮助更复杂的优化)。