《复杂性中的思维》

下载本书

添加书签

复杂性中的思维- 第24部分


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
  如果人的思维可以用递归函数来表示,那么按照丘奇公设,它就可用图林程序来表示,而图林程序可以用图林机计算。因此,人的思维也就可以用通用计算机来加以模拟,在此意义上,对于图林提出的问题也就必定要回答“是”。人的思维是可以编码、可用递归程序来表示的,这一前提当然是可疑的。甚至数学思维的过程也可以远比递归函数更为复杂。按照丘奇的公设,递归性或图林可计算性仅仅是可计算性的一种理论限度。 
  下面我们希望考虑在这种限度之下和之上的复杂性程度问题。在这种限度之下,有许多涉及到一定限度的实际问题,其限度涉及到如何增加算法的速度。特别是在数学问题中,有一些种类的问题,它们的算法求解本来要比解决其他一些问题困难得多。因此,图林机有不同程度的可计算性,计算机科学中的复杂性理论使之精确化。 
  问题(或相应的函数)的复杂性分类可以由复杂性程度来标志,这给出了函数的阶,函数描述了依赖于其输入长度的算法(或计算程序)的计算时间(或基本计算步骤的数目)。输入的长度可以用十进制的数目来度量。按照计算机的机器语言,可以方便地将十进制数字编码成仅仅用0和1的二进制码,并用二进制字符来定义其长度。例如,3的二进制码是11,其长度为2。函数f具有线性的计算时间,如果f的计算时间不大于c·n,其中n是输入长度,c是常数。 
  两个(二进制)数的加法显然只具有线性计算时间,例如,对于3+7=10中应的二进制计算 
       0  1  1 
    1  1  1 
    __________________ 
      1 0  1  1 
  其中需要5个基本计算步骤把两个二进制数加和(包括运算)。我们提醒读者,加和二进制数字相加的基本步骤是0+0=0,0+1=1,1+1=10,以及运算。可以方便地假定,两个将要相加的数具有同等长度。否则,我们简单地把较短的数加上一系列的零,例如,111和011而不是和11。一般地,如果将要相加的特定的数对的长度为n,则一个数的长度为n/2,因此,我们需要不大于n/2+n/2=n个基本计算步骤,其中包括了运算。 
  函数f具有二次计算时间,如果对于所有的长度为n的输入和常数c,f的计算时间不大于c·n2。 
  一个简单的二次计算时间的例子是两(二)数相乘。例如,对于7·3二21,相应的二进制计算: 
    1 1 1·0 1 1 
    ___________________ 
        0 0 0 
          1 1 1 
       1 1 1 
    —————————— 
         1 0 1 0 1 
  按照前面的约定,我们有n=6。基本二进制乘法的步数是n/2·n/2=n'2'/4。包括进运算,基本二进制相加的步数是n/2·n/2-n/2=n2/4-n/2。总起来,我们得到n2/4+n2/4-n/2=n2/2-n/2,它小于n2/2。 
  函数f具有多项式计算时间,如果f的计算时间不大于c·nk,假定它是多项式P(n)的首项。函数f具有指数计算时间,如果f的计算时间不大于c·2P(n)。许多实际的和理论的问题都属于这种P复杂性,所有P类函数都是可以用确定论的图林机在多项式时间中加以计算。 
  数学史上有一些优美的图论问题可以说明复杂性理论的基本概念。1736年,著名的数学家利昂纳德·欧拉(1707-1783)解决了图论中的第一个问题。在东普鲁士的首都柯尼斯堡,所谓的老普里戈尔河和新普里戈尔河在普里戈尔河连接起来了。在18世纪,河上建造了7座桥,把南面s、北面n、东面e与小岛i联系起来(图5.3)。是否有这样一条路线,即每座桥只走一次而可以返回到最初的起点? 
   
  欧拉把问题归结为图论。区域n,s,i,e用图的顶点来代替了,在两个区域之间的桥用相应顶点之间的边来代替(图5.3b)。 
  在图论的语言中,欧拉的问题就成为,对于每一顶点,是否存在一条线路,它仅仅通过每一条边一次而最终返回到起点(“欧拉环”)。对于任意的图形,欧拉证明:欧拉环存在,当且仅当每一顶点都具有偶数条边(“欧拉条件”)。对于图5.3a,它并不满足这种条件,因此在这里欧拉问题不可能有解。一般地,存在用欧拉条件来检验任意的图的算法,如果它是欧拉环。算法的输入包括所有顶点1,…,n的集合V,所有边的集合E,它是所有顶点对的集合的子集。这种算法的计算时间线性地依赖于图的大小,它由定点数和边数之和来定义。 
  1859年,数学家威廉姆·哈密顿(1805-1865)引入了一个颇为类似的问题,但比欧拉的问题更复杂。哈密顿考虑的是任意的图,它仅仅意味着有限的顶点的集合,通过边联系起来的一定数目的顶点对。哈密顿问题是:是否有一个通过每一顶点(而不是欧拉问题中的通过每一边)的封闭环(“哈密顿环”)。图5。3c示意了有一个哈密顿环的图,其中按照数字顺序通过每一顶点。 
   
  不过,与欧拉问题的情形不同,我们并不知道这样的条件:它精确地表明一个图中是否包含哈密顿环。我们仅仅能够定义一种算法,来检验任意的图是否包含有哈密顿环。该算法检验所有的顶点的排列,以确定它们是否形成了一个哈密顿环。由于n个顶点有n!种不同的排列,该算法找到某个解的步骤不大于c·n!,其中c是常数。容易证明,n!阶相应于n'n'阶。结果是,对于哈密顿问题,一个算法需要指数的计算时间,而欧拉问题的算法求解需要的是线性计算时间。因此,哈密顿问题实际上是计算机无法解决的,甚至对于小的数目n也如此。 
  大的计算时间的主要原因在于,确定论的计算机只能一步步地对于其中巨大数量的一个个情形进行检验。更方便的是运用非确定论的计算机,它允许在有限的可能数目中随机地选择计算程序,而不是以系列的方式一步步地进行。让我们再一次考虑哈密顿问题。假定一个输人图具有n个顶点u1,…,un。一个非确定论的算法以非确定论的、随机的方式选择了一定的顶点顺序Vi1,…,Vin。然后,该算法进行检验:这种顺序是否形成了一个哈密顿环。问题也就是,对于所有的数字j(j=1,…,n-1),相继的顶点Vij和Vij+1以及起初的开始顶点Vin和Vi1是否是由边联系起来的。这种非确定论算法的计算时间线性地依赖于图的大小。 
  一般地说,NP意味着这样类型的函数的复杂性,它们用非确定论图林机进行计算时需要多项式时间。哈密顿问题是一个NP问题的例子。另一个NP问题是“旅行推销员问题”,除了种种边都有一定的数目规定以外,它与哈密顿问题非常相似。人们要解决的是:对于这一问题的哈密顿环,找出其数字的和的极小值,或更直觉地说,找出其旅行的距离的极小值。 
  所有的P问题由定义,都是NP问题。但是,复杂性理论的关键性问题在于是否有P=NP,或换言之,由非确定论计算机以多项式时间解决的问题,是否也可以由确定论计算机以多项式时间来加以解决。 
  哈密顿问题和旅行推销员问题,是所谓的NP完全问题的例子。这意味着,任何其他的NP问题都能够以多项式时间转化成它。结果是,如果一个NP完全问题实际上被证明是P问题(例如能够构造以多项式时间来解决哈密顿问题的一个确定论算法),那么接着还有是否所有的NP问题实际上都是P问题。否则,如果P≠NP,那么NP完全问题就不可能用确定论算法以多项式时间来解决。 
  显然,复杂性理论表达了图林机或图林类型机的算法能力的程度。它在科学应用和工业应用中具有实际的后果。但是,它是否意味着人的思维的极限呢?复杂性理论的基本问题(例如N=NP或N≠NP)涉及到算法的速度、计算时间、存贮能力等等的度量。另一个问题是,人们如何开始发现复杂性程度不同的算法。这是计算机科学家的创造性工作,是算法的复杂性理论中不考虑的。 
  另一方面,哥德尔的著名定理常常被认为限制了计算机和人的思维的数学能力。他的不完全性定理说,对于形式数论的每一协调的公理化扩展,就有一个(封闭的)不确定的表达式。实际上,他的定理陈述了,在整数的真陈述在其逻辑内不可能得到证明的意义上,任何合理的协调的算术逻辑都是不完整的。甚至如果我们用不可确定的表达式来扩展我们的公理化,那么也会有另一表达式在扩展的形式化中是不可确定的。哥德尔的结果表明,在莱布尼茨和希尔伯特传统中对于完整协调的算术逻辑的形式化追求,是注定要失败的。 
  而且,哥德尔证明,算术逻辑——它可能是不完整的——使用可以在其逻辑内表示的方法来使之协调,也是不可能的。在哥德尔的著名结果提出来若干年以后,金藤(1909-1945)证明了初等数论的协调性,他运用了所谓的EO归纳法,该方法是通常的归纳法对自然数的无限扩展。但是,金藤的扩展的证明法的协调性却还是有疑问的,有待证明。换言之,证明方法的复杂性并不低于被证系统的复杂性。因此,只可能有相对协调的证明,所用证明方法必须得到证明,所用来进行证明的方法又需要得到证明,如此等等。对于人的思维,不存在绝对的可以由形式算法提供的协调性基础。 
  但是,哥德尔定理对人的思维的限制是有某些基本假设条件的:我们必须把定理的证明作为人的智能的关键。公理仅仅适用于这样的精神模型:它是由其中所有知识都仔细形式化了的机器构成的。而且,哥德尔定理仅仅是对协调机的限制,而模糊性、不协调性和迷惑性都是人的决策的典型特征。如果我们在作出是否要行动的决定之前先要作出长时间的仔细的定理证明,那么我们就不可能有长期的生存。还应该考虑到,图林机具有固定的数据结构,而人的精神则是对新奇经验开放的,并能够从错误中进行学习。因此,哥德尔定理对于机器的限制,就如同对于人的大脑封锁新信息的进入一样。 
  1936年,丘奇和图林证明了根本没有一种算法能决定一个一阶预测逻辑的表达式是否是同义反复的真理。随之即有,为找到某种数学证明,我们必须具有某些启发性思想。 
  所以,AI的第一阶段(1957…1962)是受启发性编程问题支配的,这意味着在可能的分支树中自动地寻求人的问题求解,其间借助启发性来控制和评价。一个例子是纽厄尔、肖和西蒙的“逻辑理论家”(1957),它首次对罗素和怀特海的《数学原理》中前面的38条定理提供了证明。他的启发性来自一些人在心理学测验中使用的约略估量法。 
  1962年,这些模拟程序被推广和扩展到所谓的“一般问题求解者”(GPS),它被假定为人的问题求解的启发性框架。但是GPS只可能解决形式化微观世界中的一些无意义的问题。另一个启发性编程的例子是,在博奕(下棋、将军)中寻求取胜策略。最初的模式识别程序(例如词语和符号的词汇表和句法表)都是以统计方法为基础的。但是从长远的观点看,这些早期的任何程序,都没有证明一般认知模拟程序中的欣快信念。至少,它的形而上学鼓舞了麦卡锡发明编程语言LISP,它是作为一种功能的编程语言引入的,用于处理可怕的符号表,成为今天基于知识的系统的一种最强大的编程语言。 
  在一般方法失败以后,AI研究者们传播了一种预设的“语法信息处理”程序。AI的第二阶段(1963-1967)以专业程序的发展为特点。这样的专业程序,例如有求解简单代数问题的STUDENT,进行类似物体的模式识别的ANALOGY,等等。麻省理工学院的马尔文·闵斯基是这个时期的头面人物,他放弃了进行心理学模拟的主张:“目前的探索,其特点是聪明地选取问题从而得到复杂智能活动的幻象来进行的预设求解。成功的实用编程方法依赖于专业知识,这个思想首次被加以强调,成为后来基于知识的系统的中心概念。 
  对于问题求解的一般原理的追求,在理论计算机科学中仍在继续:J.A.罗宾逊引入了所谓的以预测逻辑演算和赫布兰德的完全性定理为基础的求解原理,允许用逻辑反驳程序去发现证明。 
  在AI中推动实用和专业编程方法,在第三个阶段(1967-1972)得到了加速发展。其标志是构造出专业系统、知识表示方法和对于自然语言的兴趣。发明了在数学应用中取得成功的MACSYMA程序的J.摩西描述了AI中范式的变化:“事实上,1967年是我的精神的转折点,那时候我充分地感受到一般原理的旧思想必须放弃……并抓住了我称作专业技能至上的证据。” 
  这一时期的另一个著名例子是DENDRAL程序,它运用了质谱学中化学家的专业知识,以发现分子的结构式。这个阶段中的一个范式的例子变成了机器人的SHRDLU程序,机器人可以操纵不同组件组成的小世界。这种系统可以用英语理解和回答关于这个组件世界的问题,执行操作这个组件世界的指令,并把次序划分为一系列操作,理解干了什么并为什么这样干,并用英语描述它的行动。 
  在第四阶段(1972-1977),知识的描述、组织和处理成为了把工程学和AI哲学结合起来的中心范式。米彻尔·费根鲍姆引入了“知识工程”这一术语,用于所谓专家系统的发展。一个例子是用于医学诊断的MYCIN程序,它模拟了一个具有细菌感染专业医学知识的内科医生。 
  一种新的知识表示方法是马尔文·闵斯基提出的框架概念。一种用于符号性知识处理的新的编程语言是PROLOG(“逻辑编程”),它可以与LISP相比拟。 
  AI的第五阶段(1977-1986)被说成是托马斯·库恩的意义上的“常规”阶段,指的是专家系统
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架