绪论
智能
- 智能是知识(一切智能行为的基础)和智力(是获取知识并运用知识求解问题的能力,是头脑中思维活动的具体体现)的总和
- 智能的特征:具有感知、记忆&思维(逻辑思维、形象思维、顿悟思维)、学习&自适应、行为能力
智能体
-
具有智能的实体,是驻留在某一环境下,能持续自主地发挥作用,具备驻留性、反应性、社会性、主动性等特征的计算实体。
-
任何独立的能够思想并可以同环境交互的实体都可以抽象为智能体。
-
五大特性
- 自治性(Autonomy):智能体能根据外界环境的变化,而自动地对自己的行为和状态进行调整,而不是仅仅被动地接受外界的刺激,具有自我管理自我调节的能力。
- 反应性(Reactive):能对外界的刺激作出反应的能力。
- 主动性(Proactive):对于外界环境的改变,智能体能主动采取活动的能力。
- 社会性(Social):智能体具有与其它智能体或人进行合作的能力,不同的智能体可根据各自的意图与其它智能体进行交互,以达到解决问题的目的。
- 进化性:智能体能积累或学习经验和知识,并修改自己的行为以适应新环境。
-
Agent通过传感器感知环境并通过执行器对所处环境产生影响。
机器人Agent可能用摄像头、红外测距仪作为传感器,各种马达作为执行器。软件Agent接受键盘敲击、文件内容和网络数据包作为传感器输入,并以屏幕显示、写文件和发送网络数据包为执行器来作用于环境。
知识表示
知识层次
知识
状态空间法
经典问题包括:八数码、最短路径、野人过河、n皇后、猴子香蕉。状态空间法描述问题三要素:
- 初始状态描述
- 操作符集合及其对描述状态的作用
- 目标状态描述的特性
传教士过河
-
问题描述:
有三个传教士M和三个野人C过河,只有一条能装下两个人的船,在河的一方或者船上,如果野人的人数大于传教士的人数,那么传教士就会有危险,能不能提出一种安全的渡河方法?
-
状态(State)-问题在某时刻的位置情况:(左岸传教士数, 左岸野人数, 船的位置)
初始状态:(3,3,1) 1:左岸 目标状态:(0,0,0) 0:右岸 -
算子(Operator, 算符,操作符):使状态发生改变的操作。
Move-1m1c-lr:将一个传教士(m)一个野人(c)从左岸(l)运到右岸(r) -
求解:转化为在状态空间图中搜索一条从初始节点到目标节点的路径问题
以传教士数=野人数=3,船上最多2人,初始在左岸为例:
-
初始状态: (左岸传教士数,左岸野人数,船在左岸)=(3,3,1)
-
目标状态: (左岸传教士数,左岸野人数,船在左岸)=(0,0,0)
-
操作算子: Move(m,c,d)共10种
- 船上人数组合(m,c)5种 :(1,0)/(1,1)/(2,0)/(0,1)/(0,2)
- 船移动方向d共2种:\(1:l\to r/0:r\to l\)
-
状态空间图:共有4组解
所有解序列表示:
Move((1,1,1)、(1,0,0)、(0,2,1)、(0,1,0)、(2,0,1)、(1,1,0)、(2,0,1)、(0,1,0)、(0,2,1)、(0,1,0)、(0,2,1)) Move((1,1,1)、(1,0,0)、(0,2,1)、(0,1,0)、(2,0,1)、(1,1,0)、(2,0,1)、(0,1,0)、(0,2,1)、(1,0,0)、(1,1,1)) Move((0,2,1)、(0,1,0)、(0,2,1)、(0,1,0)、(2,0,1)、(1,1,0)、(2,0,1)、(0,1,0)、(0,2,1)、(0,1,0)、(0,2,1)) Move((0,2,1)、(0,1,0)、(0,2,1)、(0,1,0)、(2,0,1)、(1,1,0)、(2,0,1)、(0,1,0)、(0,2,1)、(1,0,0)、(1,1,1))
猴子香蕉
-
问题描述
房间内有一只猴子、一个箱子和一束香蕉。香蕉挂在天花板下方,但猴子的高度不足以碰到它,那么只猴子怎样才能摘到香蕉呢?
-
状态:
-
算子:
-
求解:
-
解序列为: {Goto(b), Pushbox(c), Climbbox, Grasp}
问题归约法
思路
- 给定一个问题描述,将原始问题通过一系列转化操作转化为一些子问题的集合
- 最终把初始问题归约为一个平凡的本原问题(可直接求解的问题)集合
- 通过求解这些问题来求解原始问题
问题归约法是更通用的、更一般化的状态空间表示方法
描述:三元组(G,O,P)
- G:一个初始问题描述
- P:一套本原问题描述
- O:一套把问题通过AND或OR分解变换为子问题的操作符
汉诺塔问题
三元组\(a\)表示状态空间(第i大的盘处于第\(a[i]\)根柱子上),树的根节点为本原问题
谓词逻辑法(选择必考)
谓词公式的各种性质+某一句话的谓词表达
采用谓词公式和一阶谓词演算把要解决的问题变为一个有待证明的问题,然后采用消解定理和消解反演来证明一个新语句是从已知的正确语句导出的,从而证明这个新语句也是正确的。
置换与合一
- \((\forall (x)[W_1(x)\to W_2(x)]\)和\(W_1(A)\)生成合式公式\(W_2\left(A\right)\),即寻找A对x的置换。置换是可结合的\((Es1)s2=E(s1s2)\)但一般不可交换。
- 对表达式集\({E_1,E_2…E_n}\)存在一个置换\(s\)使\(E_1s=E_2s=E_ns\)则为合一者,最少的置换s则为最简单的合一者。
语义网络法
语义网络法(Semantic Network Method)是基于语义网络知识表示方式的一种形式化解析法,通过节点、关系链对人、物、动作、关系、属性等要素加以模型化,用以形式化表达物理量、心理量、条件、目标等要素的关系和逻辑表述。节点与关系链可以相互转化并具备多个信息槽;不受结构维度限制,可以是线型、平面的简单结构,也可以是立体型、多维嵌套型的复杂结构。
框架剧本过程
待补充
搜索求解
无信息搜索(盲目):宽度优先搜索、深度优先搜索、一致代价搜索
有信息搜索(启发式):贪婪算法、A算法、A*算法
图搜索的基本出发点:\(f(n)=g(n)+h(n)\)。详见链接:https://zhuanlan.zhihu.com/p/478858388
A*算法C++伪代码如下:
//step 1
创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
//step 2
遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,算X的估价值
//step 3
While(OPEN!=NULL)
{
从OPEN表中取估价值f最小的节点n;
if(n节点==目标节点) break;
else
{
if(X in OPEN)
比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值
if(X的估价值小于OPEN表的估价值)
更新OPEN表中的估价值; //取最小路径的估价值
if(X in CLOSE)
比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值
if(X的估价值小于CLOSE表的估价值)
更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值
if(X not in both)
求X的估价值;并将X插入OPEN表中; //还没有排序
}
将n节点插入CLOSE表中;按照估价值将OPEN表中的节点排序;
//(实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。)
}
推理决策
1.按推出结论的途径
- 演绎推理:全称判断推出特/单称判断
- 归纳推理:从足够多的示例中推出一般结论
- 默认(缺省)推理:知识不完全时假设条件具备,没有证据证明某事件不存在则存在
2.按所用知识的正确性
- 确定性推理:推理时所用知识都是精确的,推出的结论也是确定的(二值的)
- 不确定性推理:推理时所用的知识不都是确定的,推出的结论也不完全是肯定的。其真值不限于真和假,可能还有其他值。
3.按推理过程中推出的结论是否单调的增加(是否越来越接近最终目标)
- 单调推理
- 非单调推理
确定性推理
自然演绎推理
①P规则:在推理的任何步骤上均可以引入前提
②T规则:推理时如果前面步骤中有一个或多个公式永真蕴含\(S\)则可引入\(S\)
③全称指定规则:\((\forall x)P(x)\Rightarrow P(c)\)
④存在推广规则: \(P(c)\Rightarrow (\exists x)P(x)\)
⑤假言推理:\(P,P\to Q\Rightarrow Q\)
⑥拒取式推理:\(\neg Q,P\to Q\Rightarrow \neg P\)
消解(归结)原理
- 前束形范式:所有量词均非否定地出现在公式之首&辖域一直延伸到公式之末&公式中不出现连接词\(\to\)及\(\leftrightarrow\)。任意一个谓词公式,均和一个前束形范式等价。
- 斯克林范式:每个存在量词均出现在全称量词之前的前束形范式
- Skolem标准型:消去全部存在量词的前束形范式,一般形式如下,M合取范式为Skolem标准型母式。
\[(∀x_1)(∀x_2)…(∀x_n)M(x_1,x_2,…,x_n)\\ \]
- 求取子句集:任何一个谓词公式都可以通过等价关系及推理规则化成相应的子句集
- 消去蕴含符号:\(\neg A\lor B\)代替\(A→B\),\((A\land B)\lor (\neg A \land \neg B)\)代替\(A\leftrightarrow B\)
- 减小否定辖域:使否定符号最多只作用于一个谓词
- 变量标准化:重命名变元
- 消去存在量词:若存在量词不出现在全称量词的辖域内\(\to\)用一个新的个体常量替换该存在量词约束的变元消去存在量词;若存在量词位于一个或多个全称量词的辖域内,用一个Skolem函数替换存在量词而将其消去
- 全称量词提前:全称量词全移动至公式之首,使每个量词的辖域包括整个公式
- 化为合取范式:Skolem标准型
- 消去全称量词和合取符号:变为子句集
- 变量标准化:使不同子句中的变元不同名
例2:Everyone who loves all animals is loved by someone 可表示为:
消解原理:
-
已知两子句\(L_1∨α\)和\(\neg L_2∨β\),如果和\(L_1\)和\(L_2\)具有最一般合一者σ,则通过消解可以从这两个父辈子句推导出一个新子句\((α∨β)σ\),新子句为消解式。
-
链式三段论:\(P\lor Q,\neg Q\lor R\Rightarrow P\lor R\)
-
将消解推理规则推广至含变量的子句:必须找到一个作用于父辈子句的置换,使父辈子句含有互补文字。如下例中选取置换\(s = \{f(f(a))|x,f(y)|z\}:\)
\[P[x,f(y)]∨Q(x)∨R[f(a),y]\quad\quad~P[f(f(a)),z]∨R(z,w)\\ \]\[Q [f (f(a))] ∨R(f(a),y) ∨R(f(y),w)\\ \] -
消解反演证明:
给出公式集{S}和目标公式L
①否定L,得~L;
②把~L添加到S中去;
③把新产生的集合\(T =\{\sim L,S\}\)化成子句集;
④应用消解原理,力图推导出一个表示矛盾的空子句
-
消解原理求解:
①把已知前提条件用谓词公式表示出来,并化成相应的子句集,设该子句的名字为\(