-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhw1.typ
80 lines (67 loc) · 3.68 KB
/
hw1.typ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
== HW 1
Due: 2024.03.17
#let ans(it) = [
#pad(1em)[
#text(fill: blue)[
#it
]
]
]
=== Question 3.7
3.7 给出下列问题的初始状态、目标测试、后继函数和耗散函数. 选择精确得足以实现的形式化.
+ 只用四种颜色对平面地图染色, 要求每两个相邻的地区不能染成相同的颜色.
+ 一间屋子里有一只 3 英尺高的猴子, 屋子的房顶上挂着一串香蕉, 离地面 8 英尺. 屋子里有两个可叠放起来、可移动、可攀登的 3 英尺高的箱子. 猴子很想得到香蕉.
+ 有一个程序, 当送入一个特定文件的输入记录时会输出“不合法的输入记录”. 已知每个记录的处理独立于其它记录. 要求找出哪个记录不合法.
+ 有三个水壶, 容量分别为 12 加仑、8 加仑和 3 加仑, 还有一个水龙头. 可以把壶装满或者倒空, 从一个壶倒进另一个壶或者倒在地上. 要求量出刚好 1 加仑水.
#ans[
+
- Initial State: 所有区域未染色
- Goal Test: 所有区域都染色
- Successor Function: 选择一个未染色的区域, 为其染上一种颜色
- Cost Function: 涂色的次数
+
- Initial State: 猴子在屋子的地面, 箱子在屋子的地面, 香蕉距离地面 8 英尺
- Goal Test: 猴子站在箱子上, 可以够到香蕉
- Successor Function: 猴子搬动、放下箱子、爬上箱子、爬下箱子、拿起香蕉
- Cost Function: 猴子总用时
+
- Initial State: 一个输入记录
- Goal Test: 输入记录合法
- Successor Function: 修改输入记录的某一部分
- Cost Function: 修改的次数
+
- Initial State: 三个水壶都是空的
- Goal Test: 一个水壶里有 1 加仑水
- Successor Function: 装满水壶、倒空水壶、从一个壶倒进另一个壶
- Cost Function: 倒水的次数
]
=== Question 3.9
3.9 传教士和野人问题通常描述如下:三个传教士和三个野人在河的一边, 还有一条能载一个人或者两个人的船. 找到一个办法让所有的人都渡到河的另一岸, 要求在任何地方野人数都不能多于传教士的人数 (可以只有野人没有传教士). 这个问题在 AI 领域中很著名, 因为它是第一篇从分析的观点探讨问题形式化的论文的主题(Amarel, 1968)
+ 精确地形式化该问题, 只描述确保该问题有解所必需的特性. 画出该问题的完全状态空间图.
+ 用一个合适的搜索算法实现和最优地求解该问题. 检查重复状态是个好主意吗?
+ 这个问题的状态空间如此简单, 你认为为什么人们求解它却很困难?
#ans[
+
- 状态:$(a,b,c)$, $a$:传教士在此岸的人数, $b$:野人在此岸的人数, $c$:船是否在此岸 (0/1)
- Initial State: $(3,3,1)$
- Goal Test: $(0,0,0)$
- Successor Function:
$
(x,y,1) -> cases((x-1,y,0), (x,y-1,0), (x-1,y-1,0), (x-2,y,0), (x,y-2,0))
\
(x,y,0) -> cases((x+1,y,1), (x,y+1,1), (x+1,y+1,1), (x+2,y,1), (x,y+2,1))
$
同时所有$(x,y,c),(x',y',z')$满足$0<=x<=3, 0<=y<=3$, 并且:
$
(x=0 or x>=y) and (x=3 or x<=y)
$
- Cost Function: 操作次数
+ 使用 BFS 对状态进行搜索, 维护一个 $3 times 1$ 的数组记录已经访问过的状态:
$
(3,3,1) -> (3,1,0) -> (3,2,1) -> (3,0,0) -> (3,1,1) -> (1,1,0)\ -> (2,2,1) -> (0,2,0) -> (0,3,1) -> (0,1,0) -> (
1,1,1
) -> (0,0,0)
$
问题中限制很多, 可以不考虑重复状态 (全部枚举即可). 如果问题中 $3 -> 100$, 检查重复状态是个好主意.
+ 虽然每一步的限制都足够多而且空间足够简单, 但图的深度很大, 每一步所需要做的判断过于复杂.
]