我们如何为搜索任务找到一个好的启发式评估函数?这里基本上有两种方法。经典方式使用人类专家的知识。知识工程师通常需要以计算机程序的形式将专家的隐性知识形式化。我们现在想要展示如何在国际象棋程序示例中简化此过程。
在第一步中,专家们被问及选择行动中最重要的因素。然后尝试量化这些因素。我们获得了相关特征或属性的列表。然后将这些(在最简单的情况下)组合成
位置的线性评估函数B(s),可能看起来像:
B(s) = a 1 ・ 材料 + a 2 ・ pawn_ structure + a 3 ・ king_safety
+ a 4 ・ knight_in_center + a 5 ・ bishop_diagonal_coverage +・・・ ,(6.3)其中“材料”是迄今为止最重要的特征,并由
material = material(own_team)–材料(对手)
同
材料(团队)= num_pawns(团队)・ 100 + num_knights(团队)・ 300
+ num_bishops(团队) ・ 300 + num_rooks(团队) ・ 500
+ num_queens(团队) ・ 900
几乎所有国际象棋程序都对材料进行类似的评估。但是,所有其他功能都有很大差异,我们不会在这里讨论[Fra05,Lar00]。
在下一步中,必须确定所有特征的权重ai。这些是在与专家讨论后直观设置的,然后在每次游戏后根据积极和消极的经验进行更改。事实上,这种优化过程非常昂贵,而且特征的线性组合非常有限,这表明机器学习的使用。
6.5.1启发式学习
我们现在想要从(6. 3)自动优化评估函数B(s)的权重ai。在这种方法中,仅询问专家关于游戏状态的相关特征f 1 (s),…,fn(s)。然后使用机器学习过程,目的是找到尽可能接近最优的评估函数。我们从初始预设评估函数(由学习过程确定)开始,然后让国际象棋程序播放。在游戏结束时,评级来自结果(胜利,失败或平局)。基于该评级,评估功能被改变,目的是在下次减少错误。原则上,开发人员所做的同样的事情现在由学习过程自动处理。
听起来很简单,实际上很难。目前,基于赢或输的比赛提高排名等级的核心问题是信用分配问题。事实上我们确实在游戏结束时有一个评级,但没有对个人动作的评分。因此,代理执行许多操作,但直到最后才收到任何正面或负面反馈。那么它应该如何将这些反馈分配给过去采取的许多行动呢?在这种情况下,它应该如何改进其行动?激动人心的年轻强化学习领域关注这些问题(见第10节)。