简介:人工智能经典习题集及各章总结是一份面向人工智能课程复习备考的配套资料,适合高校学生、考研复习者以及需要快速巩固基础的入门学习者。文档按章节梳理核心知识点,并配有经典习题及详细解答,覆盖绪论、知识与知识表示、推理、搜索、机器学习等常考内容,既帮助搭建理论框架,也训练实际解题能力。压缩包内为1个doc文档,整体大小约2.19MB,知识点与例题集中在同一文件中,便于打印或离线查阅,配合期末冲刺使用非常高效。资料中不仅归纳了人工智能的发展阶段、研究学派和研究领域,还包含如用产生式规则描述旅行路线、用归结演绎推理推断盗窃犯等典型题目的完整推导过程,有助于深入理解符号主义与逻辑推理方法。目前已有100人学习下载,内容密度高、针对性强,适合在考前短时间内系统过一遍重点并强化习题训练。
1. 人工智能期末复习的硬通货:这份习题集到底藏着什么
人工智能导论这门课的期末复习,最忌讳的就是抱着教材从头看到尾。你会发现概念全认识,合上书一道题都写不出来。这份习题集的价值恰好相反:它把每个章节先压缩成小结,再配大量经典习题——绪论的三大学派、知识表示的产生式规则、归结演绎推理、代价树搜索、α-β剪枝,全部覆盖。我从头到尾过了一遍,结论是:这其实是人工智能期末复习的硬通货,尤其适合考前一周用来筛考点。与其自己整理笔记,不如直接拿它当提纲,哪章小结看得懂,哪章习题能独立做出来,哪里就是你的薄弱点。本文按主题拆开讲用法和踩坑,方便你照着复现。
2. 绪论与知识表示:从三大学派到产生式规则的落地写法
绪论部分的考点非常固定,翻来覆去就那几个:发展阶段的划分、研究内容、研究学派、研究领域。这套习题集在这部分的编排是“小结在前、习题在后”,我建议先把小结当填空题背熟,再做习题验证。
2.1 先分清三个学派:符号主义、连接主义、行为主义的考点差异
人工智能发展过程中经历了五个阶段:神经元网络时代、通用方法时代、知识工程时代、新的神经元网络时代、海量信息处理与网络时代。这五个阶段是选择题和填空题的高频考点,尤其是“知识工程时代”对应专家系统的兴起,不要记混。研究内容那一节列出了搜索技术、知识表示、规划方法、机器学习、认知科学、自然语言理解与机器翻译、专家系统与知识工程、定理证明、博弈、机器人等方向,期末简答题经常直接问“人工智能研究的基本内容是什么”,把这串名词记住就能拿分。
三大学派是绪论里最容易出简答题的部分,必须分清来源和核心主张。
| 学派 | 产生途径 | 核心观点 | 典型技术 |
|---|---|---|---|
| 符号主义 | 心理学途径 | 智能的基本元素是符号,智能行为是符号运算的结果 | 专家系统、知识工程 |
| 连接主义 | 生理学途径 | 基本元素是神经元,智能产生于大量神经元的并行分布式联结 | 神经网络、深度学习 |
| 行为主义 | 生物演化途径 | 智能取决于感知和行为,取决于对外界复杂环境的适应 | 机器人、进化计算 |
注意连接主义又叫仿生学派,行为主义起源于控制论,这两条是题目里最常见的干扰项。习题集里还有一道“人工智能有哪些研究途径和方法”的简答,答案要点是:心理模拟对应符号推演,生理模拟对应神经计算,行为模拟对应控制进化,群体模拟对应仿生计算。这些途径各有所长,不能互相取代,是并存互补的关系。
2.2 四种知识表示怎么选:谓词、产生式、框架和语义网络
知识表示这一章,习题集明确把表示法分成四种:谓词表示法、产生式表示法、框架表示法、语义网络表示法。考试不会让你从零设计一种表示,而是给定一个场景,让你选合适的表示法并写出形式。
谓词表示法的套路是“先定义谓词,指出每个谓词的确切含义,再用连接词把谓词连成一个谓词公式”。比如“张某被盗”那道题,第一步就是定义 P(x) 表示 x 是作案者,然后把侦察员的话翻译成子句。产生式表示法是最常考的,它的核心是产生式系统,由规则库、综合数据库、控制系统三个基本部分组成。规则库放 IF-THEN 规则,综合数据库放当前事实,控制系统决定哪条规则被触发。
框架和语义网络选择的时候怎么判断?我一般这样记:框架适合描述“一个事物有哪些属性”,比如一台计算机有 CPU、内存、硬盘这些槽,每个槽又有若干侧面;语义网络适合描述“事物之间的关系”,节点表示物体、概念和状态,弧线表示关系,比如“神州大学和东方大学篮球队比赛,比分 85:89”这种题,用语义网络画两个节点加一条带比分属性的弧线就完事。
2.3 五城市旅行路线的产生式解法:这道题背下来直接拿分
知识表示章节里有一道特别典型的产生式应用题:五个城市 A、B、C、D、E 两两直达且距离已知,从 A 出发,去其他四个城市各参观一次后回到 A,找最短路线。这道题几乎是每届期末的保留题目,解法分四步:
第一步定义综合数据库 (x),x 可以是一个字母(当前城市),也可以是一个字符串(已走过的城市序列)。第二步定义初始状态 (A),第三步定义目标状态 (Ax1x2x3x4A),表示从 A 出发走完四个城市再回到 A。第四步写规则集:
r1: IF L(S)=5 THEN GOTO(A) r2: IF L(S)<5 THEN GOTO(B) r3: IF L(S)<5 THEN GOTO(C) r4: IF L(S)<5 THEN GOTO(D) r5: IF L(S)<5 THEN GOTO(E)L(S) 表示已经走过的城市数,GOTO(x) 表示下一步走向城市 x。这里有个容易被忽略的细节:r1 的条件是 L(S)=5,也就是说已经走过四个城市、即将走第五个城市时,只能回 A,否则就违反了“参观一次后回到 A”的约束。推理得到的搜索路径是 (A)→(AB)→(AC)→(AD)→(AE)→(ACB)→(ACD)→(ACE)→(ACDB)→(ACDE)→(ACDEB)→(ACDEBA),最短路线为 A→C→D→E→B→A,总距离 5+6+8+10+7=36。
这道题考察的不是路线本身,而是“把路线搜索翻译成 IF-THEN 规则”的能力。考试时只要规则集写对、路线算对,满分到手。
3. 归结演绎推理:把“谁是盗窃犯”归结出答案的完整步骤
推理章节是整个习题集里最硬核的部分,归结演绎推理的题目一旦考出来就是大题。这一章的核心是四个字:反证 + 归结。把结论的否定加进前提,推出空子句就说明矛盾,从而证明原结论成立。
3.1 归结四步法:先定谓词,再建子句集
归结演绎的标准四步,这套习题集里反复用,我拆成固定模板:
第一步,将已知条件用谓词公式表示出来,化成子句集。这里的关键是定义谓词语义要准确,比如设 P(x) 表示 x 是作案者。第二步,把待求解的问题表示成谓词公式。第三步,把目标公式否定,并与 ANSWER 谓词做析取,得到形如 ﹁P(y) ∨ ANSWER(y) 的子句。第四步,把前提子句集和目标子句集合并,反复归结。
为什么要加 ANSWER 谓词?这是归结演绎里最实用的小技巧。普通反证法归结到最后得到空子句,只证明了结论成立,但没告诉你答案是什么。加上 ANSWER(y) 之后,每当 P(y) 被归结消去,ANSWER(y) 就会保留下来,最后剩下的 ANSWER(某个具体值) 就是你要的答案。这个机制期末必考,很多同学忘了加 ANSWER 直接归结,最后推不出答案。
3.2 盗窃犯题目的完整归结链:换名与代换不能省
“张某被盗”那道题是归结演绎的经典例题。五位侦察员的话翻译成子句后,加上目标否定得到:
(1) P(zhao) ∨ P(qian) (2) P(qian) ∨ P(sun) (3) P(sun) ∨ P(li) (4) ﹁P(zhao) ∨ ﹁P(sun) (5) ﹁P(qian) ∨ ﹁P(li) (6) ﹁P(y) ∨ ANSWER(y)
接下来从 (1) 到 (6) 开始归结,我整理成表格,方便你对照检查自己的推导过程:
| 步骤 | 归结对 | 替换 | 归结结果 |
|---|---|---|---|
| (7) | (1) 与 (4) | 对 zhao 消解 | P(qian) ∨ ﹁P(sun) |
| (8) | (1) 与 (5) | 对 qian 消解 | P(zhao) ∨ ﹁P(li) |
| (9) | (2) 与 (4) | 对 sun 消解 | P(qian) ∨ ﹁P(zhao) |
| (10) | (2) 与 (5) | 对 qian 消解 | P(sun) ∨ ﹁P(li) |
| (11) | (3) 与 (4) | 对 sun 消解 | ﹁P(zhao) ∨ P(li) |
| (12) | (3) 与 (5) | 对 li 消解 | P(sun) ∨ ﹁P(qian) |
| (13) | (2) 与 (7) | 对 sun 消解 | P(qian) |
| (14) | (2) 与 (12) | 对 qian 消解 | P(sun) |
| (15) | (6) 与 (13) | σ={qian/y} | ANSWER(qian) |
| (16) | (6) 与 (14) | σ={sun/y} | ANSWER(sun) |
答案是钱和孙两个人。注意看 (13) 和 (14):它们分别从子句集里推出了 P(qian) 和 P(sun) 两个单文字子句,再分别与 (6) 归结合并 ANSWER。这说明归结演绎可以同时推出多个答案,而不是只能得到一个解。
3.3 兄弟父亲题:有函数符号的归结怎么避免丢分
“任何兄弟都有同一个父亲,John 和 Peter 是兄弟,John 的父亲是 David,问 Peter 的父亲是谁”这道题,比盗窃犯题多了一个难点:谓词带了两个参数,归结时需要做更复杂的变量代换。
核心子句集是:
(1) ﹁Brother(x,y) ∨ ﹁Father(z,x) ∨ Father(z,y) (2) Brother(John, Peter) (3) Father(David, John) (4) ﹁Father(u, Peter) ∨ ANSWER(u)归结过程只有三步:(1) 与 (3) 归结,替换 σ={David/z, John/x},得 ﹁Brother(John,y) ∨ Father(David,y);(5) 与 (4) 归结,替换 σ={David/u, Peter/y},得 ﹁Brother(John, Peter) ∨ ANSWER(David);(2) 与 (6) 归结,得 ANSWER(David)。
这个题目最容易翻车的点是代换时漏变量。(1) 中有 x、y、z 三个变量,和 (3) 归结时既要换 z 为 David,又要换 x 为 John,y 保持不变。漏掉任何一个替换,后续都没法收敛。我习惯在卷面上把 σ 替换显式写出来,一步一换,宁可慢不要跳。
如果你用的是 Prolog 做题,这道题的亲属关系可以直接写成程序跑:
domains name = symbol sex = symbol age = integer predicates person(name, sex, age) mother(name, name) father(name, name) brother(name, name) sister(name, name) grandfather(name, name) grandmother(name, name) clauses person(alan, m, 21). person(john, m, 22). person(marry, w, 23). person(ann, w, 24). mother(alice, alan). mother(alice, john). mother(marry, jane). father(alan, tom). father(tom, ben). brother(Name1, Name2) :- person(Name1, m, Age1), person(Name2, m, Age2), mother(Z, Name1), mother(Z, Name2), Age1 > Age2. grandfather(Name1, Name2) :- father(Name1, Y), father(Y, Name2).brother 的定义要求两个男性有同一个母亲,且 Age1 > Age2,也就是说这里表达的是“哥哥”而非广义兄弟。grandfather 是父亲链往上走两层。这个程序是教材级的简化模型,考试时写出类似定义就能拿分,不必追求覆盖全部亲属关系。
4. 搜索策略与代价树:广度优先和深度优先的收益差在哪
搜索策略是人工智能导论里计算量最大的一章,期末考试几乎必有一道大题:给定一个交通图,要求用某种搜索策略求最短路径。这章的核心是把图转成代价树,然后手算 open 表和 closed 表的变化过程。
4.1 把交通图变成代价树:代价递推的写法
代价树和普通搜索树的区别在于边上有代价。从初始节点 s0 到节点 x 的代价记为 g(x),从父节点 x1 到子节点 x2 的代价记为 c(x1,x2),递推公式是:
g(x2) = g(x1) + c(x1,x2)这个公式看着简单,但代价树的构建有一个隐含约束:子节点不能往回走,否则会在两个城市之间死循环。比如从 A 扩展出 B 和 C,那么 B 的子节点不能再有 A,只能继续向未访问的城市扩展。习题集里的五城市交通费用图,转成代价树之后,每条边都标上了 g(x) 的累计值,手算时务必把每个节点的 g 值标在节点旁边,否则下一步排序时很容易看错。
图转树还有一个细节:代价树里同一个城市可能出现多次。比如从 A 出发,经过 B 到 D,和经过 C 到 D,D 会出现两个副本。这两个 D 的 g 值不同,分别来自不同的路径。考试时不要把它们当成同一个节点合并,它们是代价树里两个独立的节点,各自参与后续扩展。
4.2 手算代价树搜索:open表和closed表的两种操作
“求 A 到 E 的最小费用交通路线”这道题,习题集给了两种方法,对比着看特别有意思。
代价树的广度优先搜索每次扩展节点 n 后,把它的子节点放入 open 表,计算各子节点代价,然后对 open 表全部节点按代价从小到大排序。注意是“全部节点排序”,不是只排新加入的节点。这样做保证了每次从 open 表取出的都是全局代价最小的节点,所以一定能找到最优解。
代价树的深度优先搜索则不同:扩展节点 n 后,把它的子节点按代价从小到大放入 open 表首部。这相当于一个栈,后进先出。也就是说,每次扩展都优先沿着当前节点代价最小的子节点一直往下走,走到底再回退。习题集里的结果是 A→C→D→E,碰巧和广度优先结果一致,但作者特意标注了一句:这只是巧合,一般情况下两种方法得到的结果不一定相同。
| 对比项 | 广度优先(代价树) | 深度优先(代价树) |
|---|---|---|
| open 表操作 | 全体节点按代价排序 | 新子节点按代价压入首部 |
| 搜索方向 | 逐层向外扩展 | 沿一条路径走到底 |
| 完备性 | 完备,一定能找到解 | 不完备,可能进入无穷分支 |
| 最优性 | 一定最优 | 不一定最优,可能得到次优解 |
习题集里另一道题更典型:代价树广度优先得到 A→C→E,代价 15;深度优先由于优先扩展了 D 分支,最后得到 A→B→D→E,代价 17,明显不是最优解。所以考试时如果题目要求“最短费用路径”,优先选广度优先策略;如果题目只说“用深度优先搜索”,你要心里有数,结果大概率不是最优的。
如果要把这个过程写成 Prolog,常见做法是定义 road 事实加一个递归的 path 谓词:
domains p = string d = integer pp = p* predicates road(p, p, d) path(p, p, pp, d) member(p, pp) clauses path(X, Y, L, D) :- road(X, Y, D), L = [X, Y]. path(X, Y, L, D) :- road(X, Z, D1), not(member(Z, L)), path(Z, Y, L2, D2), L = [X | L2], D = D1 + D2.这个程序是标准的深度优先搜索,用 not(member(Z, L)) 防止走回头路。要注意它返回的是第一条找到的路径,不保证代价最小。想求最优路径,得把它改成广度优先或引入迭代加深,否则在城市图比较复杂时会给出次优解。
4.3 三只开关的状态空间图:状态转换规则才是核心
搜索章节最后一道小题很有迷惑性:三只琴键开关一字排开,初始状态是“关、开、关”,每次必须按下一个开关且只能按一个,问连按三次后是否会出现“开、开、开”或“关、关、关”。
这类状态空间搜索题的关键是编码。设 0 表示关,1 表示开,初始状态是 (0,1,0)。每次必须按一个开关,等价于状态向量的某一位取反。连按三次,总共改变了三个位,也就是说最终状态和初始状态必须有奇数个位置不同。看两个目标:(0,0,0) 与 (0,1,0) 只有第二位不同,差了 1 位,奇数,可达;(1,1,1) 与 (0,1,0) 第一和第三位都不同,差了 2 位,偶数,不可达。所以答案是会出现“关、关、关”,不会出现“开、开、开”。
这道题考的不是画图能力,而是状态转换规则的理解。教材里还有一道农夫过河题也属于这一类:用四元组 (农夫, 狼, 羊, 菜) 表示状态,0 在左岸,1 在右岸。定义操作符 L(i) 和 R(i) 表示农夫带某样东西过河,再排除“狼吃羊、羊吃菜”的约束状态,就能推出一个合法过河序列:带羊过河→空手回→带狼过河→带羊回→带菜过河→空手回→带羊过河。这类题考试时建议先写编码规则,再写操作符,最后列状态序列,步骤清晰就能拿分。
5. 博弈与与或树:α-β剪枝和倒推值的计算套路
博弈这一章在考试里通常作为选做大题出现,难度不高,但概念容易混。核心是两个问题:极大极小分析法怎么算倒推值,α-β剪枝怎么判断剪哪个分支。
5.1 极大极小分析:或节点取最大、与节点取最小
博弈搜索树里,每一层代表一方走棋。自己走棋的节点是“或”节点,因为自己会选择对己方最有利的方案;对手走棋的节点是“与”节点,因为对手会选对己方最不利的方案。
倒推值的计算规则就两句:对“或”节点,取子节点中最大的得分作为父节点得分;对“与”节点,取子节点中最小的得分作为父节点得分。这个规则本身不难,难的是判断层与层之间的交替关系。我见过不少同学把两个规则记反,根节点算出来的值就完全错了。一个保险的判断技巧:先在图上标注这一层是谁在走棋,自己走就选最大,对手走就选最小。
端节点的值由评估函数给出,评估函数的值越大表示对我方越有利。从端节点一层一层往回推,直到根节点,根节点的倒推值就是我方在当前局面下的最佳收益。
5.2 α-β剪枝怎么判断:先标上下界,再决定要不要剪
α-β剪枝是极大极小分析的优化,目的就是少算一些子树。理解它的关键是把 α 和 β 记成两个边界:“或”节点的倒推值下界叫 α 值,“与”节点的倒推值上界叫 β 值。
剪枝的规律有两条:任何“或”节点 x 的 α 值如果不能降低其父节点的 β 值,则节点 x 以下的分支可以停止搜索,这叫 β 剪枝;任何“与”节点 x 的 β 值如果不能升高其父节点的 α 值,则节点 x 以下的分支可以停止搜索,这叫 α 剪枝。
光看定义有点绕,我一般这样理解:β 剪枝发生在“或”节点发现自己的值已经大不过父节点的上界,那这条分支再怎么搜都没意义;α 剪枝发生在“与”节点发现自己的值已经小不过父节点的下界,同样不必再搜。考试时先在树上标每个节点的 α/β 值,再逐层判断是否能剪,不要凭肉眼猜。
5.3 与或树的代价:和代价法与最大代价法的差别
与或树搜索里还有一道独立的计算题:给定一棵与或树,分别按和代价法和最大代价法求解树代价。和代价法把各子树的代价全部加起来,最大代价法只取子节点中最大的那个代价。
习题集给的例子是:和代价法 h(B)=7,h(C)=3,h(A)=7+3+5+6=21;最大代价法 h(B)=5,h(C)=2,h(A)=5+5=10。注意和代价法的公式里把两个端节点的代价也累加进去了,而最大代价法只取了 B 和 C 中较大的代价再加上端节点代价。这个差别就是两种方法的评分哲学:和代价法认为所有分支都要付出代价,最大代价法认为只考虑最坏分支的代价。
考试时如果给了具体的树,先看题目要哪种方法,然后标清楚每个节点的代价来源。和代价法要把所有叶子节点的值加起来,最大代价法要注意区分“与节点取最大还是或节点取最大”,别和 5.1 的极大极小规则混到一起去。
6. 避坑与验证:五个高发错误和一套自查流程
最后这一章,我把我自己刷这套习题时踩过的坑和后来总结的自查习惯整理出来。五条踩坑记录,每一条都是真实翻过车的,按“现象→原因→解决”写清楚。
6.1 五个最容易翻车的踩坑记录
坑一:归结演绎忘了把目标否定与 ANSWER 做析取。现象是归结推到最后得到空子句,却不知道答案是谁。原因是直接对 P(y) 做否定,没有把它和 ANSWER(y) 合成一个子句,导致答案信息在归结过程中丢失。解决:一上来就写 ﹁P(y) ∨ ANSWER(y),把这个子句放进子句集,最后留下的 ANSWER 文字就是答案。
坑二:极大极小分析里把“与节点”和“或节点”的取大取小搞反。现象是倒推值算出来和标准答案恰好相反。原因是没有判断当前节点是己方走棋还是对手走棋。解决:先在每个节点旁边标注走棋方,己方取最大、对手取最小,标完再算。
坑三:代价树深度优先搜索当成广度优先来排序。现象是 open 表变化过程写出来和标准答案不一致。原因是深度优先只把新子节点按代价压入栈顶,不重新排序全部节点。解决:手算时把 open 表写成一列,每扩展一个节点就在表头插入新子节点,不要把已经排好的老节点挪到后面。
坑四:状态空间题的编码设反。现象是三只开关题结论写成“会出现开开开”。原因是没有跟题干的“0 表示关,1 表示开”对齐。解决:动笔之前先写一行编码说明,再写初始状态和目标状态的二进制形式。
坑五:把“遍历所有城市回到起点”和“从起点到终点找最短路径”混为一谈。现象是五城市旅行路线题用了代价树搜索的解法,结果对不上号。原因是没看清目标状态。解决:做题第一步先写初始状态和目标状态,(Ax1x2x3x4A) 是遍历回起点,(E) 是到达终点,两种题型的目标状态不同,搜索策略的选择也随之不同。
6.2 期末答题自查流程:把习题集变成模板
刷完这套习题集,我建议你按“小结背考点、模板套大题、习题验手感”三轮走。第一轮只看各章小结,把学派的对应表、知识表示的四种方式、归结演绎的四步法、搜索策略的对比点全部过一遍,确保选择题和填空题不丢分。第二轮拿习题集的解答当模板,把盗窃犯归结、五城市旅行路线、代价树搜索这几道大题的书写格式抄一遍,形成肌肉记忆。第三轮合上答案,独立重做所有计算题,对不上的地方回去翻小结。
| 复习轮次 | 内容 | 目标 |
|---|---|---|
| 第一轮 | 各章小结 + 名词对照 | 搞定选择、填空、名词解释 |
| 第二轮 | 典型大题按模板重写 | 形成标准答题格式 |
| 第三轮 | 独立重做全部计算题 | 排查弱项,补漏 |
这套方法的逻辑是:期末考试的大题类型基本固定,归结推理、知识表示、代价树搜索、博弈剪枝,每年换汤不换药。把习题集里的标准解法练到条件反射,考场上的主要工作就是套模板。从那以后,我每次复习人工智能导论,都强制自己先背一遍小结,再独立做一遍习题,最后才看答案。这套流程帮我稳住了不少期末分数,希望帮到你。
本文还有配套的精品资源,点击获取