本文隶属于专栏《人工智能》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见人工智能
人工智能的多个研究领域从求解现实问题的过程来看,都可抽象为一个“问题求解”过程,问题求解过程实际上就是一个搜索过程。
在搜索过程开始之前,必须先用某种方法或某几种方法的混和来表示问题。
问题求解技术主要涉及两个方面:
状态空间表示法就是用来表示问题及其搜索过程的一种方法。
状态空间方法:基于解答空间的问题表示和求解方法,它是以状态和算符为基础来表示和求解问题的。
主要包括:
典型的例子:下棋、迷宫、各种游戏等。
状态是问题求解过程中每一步问题状况的数据结构,一般用一组数据表示:

式中每个元素为集合的分量,称为状态变量。
当对一个问题状态使用某个可用操作时,它将引起该状态中某些分量值的变化,从而使问题从一个具体状态变为另一个具体状态。
用来描述一个问题的全部状态以及这些状态之间的相互关系。
状态空间常用一个三元组表示:
( S, F, G )

状态空间可用有向图来描述,图的节点表示问题的状态,图的弧表示状态之间的关系。
初始状态对应于实际问题的已知信息,是图中的根结点。
在问题的状态空间描述中,寻找从一种状态转换为另一种状态的某个操作算子序列等价于在一个图中寻找某一路径。
如下图所示为用有向图描述的状态空间。
该图表示对状态 S0 允许使用算符 O1 , O2 及 O3 ,分别使 S0 转换为 S1 , S2 及 S3 。
这样一步步利用操作算子转换下去,如 S10 ∈ G ,则 O2 , O6 , O10 就是一个解。

在 3 × 3 的棋盘,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字。 棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。

如何将棋盘从某一初始状态变成最后的目标状态?
| X1 | X2 | X3 |
|---|---|---|
| X8 | X0 | X4 |
| X7 | X6 | X5 |
用向量 S =( X0, X1, X2, X3, X4, X5, X6, X7, X8 ) 表示状态 Xi 为变量, Xi 的值就是方格 Xi 内的数字,取值为{ 0, 1, 2 … 8 },其中 0 表示空格。
于是,向量 S 就是该问题的状态表达式。
则上图中的状态变化为:
制定操作算符集:
比如我们从下面这个初始棋局开始:

绘制的八数码问题的状态空间图(部分)如下所示:
