这里讨论的是无信息的搜索算法的形式化定义。
它的前提是:
1.初始状态已知。
2.环境已知。
在1、2下可以推得:3.每一步行动之后的状态已知。
在这样的前提下,我们讨论问题的形式化定义。
一个问题可以用5个组成部分形式化描述:
1.初始状态: initialstate : state
2.行动:getaction(s) : state -> action set //给定状态得到该状态下可采取的行动
3.转移模型/行动的描述:result(s,a): state * action -> state //给定状态以及采取的行动,得到后继状态
4.目标测试:test(s): state -> bool //确定给定的状态是不是目标状态
5.路径耗散: cost(s,a,s'):state * action * state -> costvalue
以上5个部分组成一个数据结构,作为算法的输入,解是从初始状态到目标状态的一组行动序列。所有解中总耗散最小的为最优解。
algorithm(problem): problem->action seq
可以看出,如果把状态看作一个点、行为就是一条边。从而通过输入的问题我们就能建立出一张对应的图。那么求解问题的过程就是图的搜索过程。
搜索的步骤:
1.确定当前状态是否是目标状态
2.根据当前可采取的行动拓展状态得到新的状态集。
3.从中选择一个状态继续考虑。
不同搜索之间的差别在于如何选择一个状态--即搜索策略。