1.3 推理
人工智能的第一个技术成果是逻辑结构的推理,基于规则的操作可以直观地促进这一过程。让我们继续做以下工作。通常情况下,不是根据状态进行显式推理,而是通过可以被定义为执行变量的特征来描述状态。代数变量表示在可能的世界中特征的符号。每个代数变量X都有一个相关的定义域,表示为dom(X)。
例:布尔变量的定义域为{true,false}。
给定一组变量,在一个函数中对一组变量的赋值是指从变量到定义域(变量的)的映射。总赋值是对所有变量的赋值。在一个总赋值上可以定义一个可能的世界。
例:变量ClassTimeMon表示周一一节课的开始时间。
dom(ClassTimeMon)={8,9:30,11,12:30,14,15:30,17}
例:假设两个变量A和B,且dom(A)={0,1,2},dom(B)={t,f}。则存在6种可能的世界。
w0={A=0,B=t}
w1={A=1,B=t}
w2={A=2,B=t}
w3={A=0,B=f}
w4={A=1,B=f}
w5={A=2,B=f}
在很多定义域中,并不是所有可能的变量赋值都是允许的。一个约束规定了对某些变量赋值的合法组合。一组变量可以看作一个作用域S。S上的关系是一个函数,定义从作用域S上赋值到{true,false},从而指定了每次赋值是不是允许的。约束c由作用域S和S上的关系组成。一个可能的世界w满足一组约束,而这个可能的世界是约束的一个模型。
例:在一个智能工厂里,一条自动化装配线上有三个机器人,一个机器人打孔,另一个机器人拧紧连接器,最后一个机器人检查连接。这些机器人装配一个产品的起始时间可以用变量D,S,I来表示,并且钻孔任务需要nD个时间单位,拧紧任务需要nS个时间单位。可以直接得到下列约束:
D<S<I
S=D+nD
I=S+nS
约束可以根据逻辑运算公式的扩展来进一步进行定义。
例:在前面关于周一课程开始时间的例子中,除了17:00开始的课是150分钟外,其余每节课的时间都是75分钟。教授p1的课分别从8:00和15:30开始;教授p2的课分别从11:00和15:30开始;教授p3的课从14:00开始;教授p4的课分别从8:00和17:00开始;教授p5的课分别从9:30和11:30开始。系主任想要组织一次2小时15分钟的会议,可能的时间段是8:30~10:45,10:00~12:15,12:00~14:15,14:30~16:45。我们怎样才能找到大多数教授,以及超过一半的教授能出席的尽可能合适的会议时间呢?当然,方法应该适合计算。
解:首先,我们定义变量A为8:00开始的课程,接下来各时间开始的课程分别定义为B,…,G。我们进一步定义ψi,i=1,…,5表示教授pi不可用的时间段。则有
ψ1=A∧F
ψ2=C∧F
ψ3=E
ψ4=A∧G
ψ5=B∧D
对于包括课时A∨B的时间段8:30~10:45(即T1),我们设定其指示函数为Ⅱi=[ψi∧(A∨B)],i=1,…,5,表示在这个时间段内教授pi是否可参加。然后,在时间段T1能出席会议的教授人数为
类似地,我们可以得到所有时间段的结果,并且确定只有T2 10:00~12:15是一个好选择,因为只有。因此,这个约束问题可以由逻辑运算来求解,它服务于最简单形式的人工智能问题。
上面的例子在我们的日常生活中很常见,但是如果探索计算复杂度,实际上比它看起来更复杂。解决上面例子的一个流行方法是为每个潜在的参与者设置一个调查问卷,就像网站doodle.com正在做的那样。主持人(即本例中的系主任)设置可能的时间段,并让每个参与者回答是否有空,然后计算机通过计算得出统计结果以得出结论。请注意,上述解决方案完全遵循这种方法,除了回复每个潜在参与者是否有空通常是由人类智能来完成的以外,这里上述求解是根据逻辑运算来执行的。