对计算机模拟中的逻辑、方法论的几点认识
- 格式:doc
- 大小:29.50 KB
- 文档页数:4
软件开发实习中的逻辑思维与问题解决软件开发实习是大学计算机科学专业学生在实践中提升自己技能的重要途径之一。
在这个实习过程中,逻辑思维和问题解决能力是非常关键的。
本文将探讨在软件开发实习中如何培养逻辑思维能力以及解决问题的方法和技巧。
一、逻辑思维在软件开发中的重要性逻辑思维是指用科学的方法进行思考和分析问题的能力,是软件开发过程中必不可少的思维方式。
在软件开发实习中,面对复杂的问题,拥有良好的逻辑思维能够帮助开发者更好地理解问题,并找到解决问题的最佳方案。
1. 问题分析能力:逻辑思维训练开发者针对问题进行深入剖析和分析的能力。
通过分析问题的关键点和核心需求,能够更好地理解问题的本质,并找到解决问题的思路和方法。
2. 逻辑推理能力:逻辑推理是基于前提条件推导出结论的过程。
在软件开发过程中,开发者需要根据已有的条件和规则,推导出符合逻辑的解决方案。
逻辑推理能力可以帮助开发者快速找到问题的解决方案,提高开发效率。
3. 问题解决能力:逻辑思维是解决问题的基础。
通过逻辑思维,开发者可以将问题分解成多个子问题,逐一解决。
这种分而治之的思维方式可以提高问题解决的效率和准确性。
二、培养逻辑思维能力的方法1. 学习逻辑学知识:逻辑学是研究思维规律和推理方法的学科。
通过学习逻辑学的知识,可以建立起科学的思维方式和分析问题的能力。
可以通过课程、书籍、网络等多种途径学习逻辑学相关知识。
2. 练习逻辑思考:通过日常生活中的思维训练,可以提高逻辑思维能力。
例如,读一些逻辑问题、谜题或是做一些逻辑思维游戏等,可以锻炼对问题的分析和解决能力。
3. 参与项目实践:在软件开发实习中,通过参与项目实践可以锻炼逻辑思维能力。
当遇到问题时,可以尝试将问题分解成多个子问题,并针对每个子问题制定解决方案,最后综合各个子问题的解决方案得到整体解决方案。
三、软件开发实习中的问题解决技巧1. 弄清问题需求:在解决问题之前,需要先弄清楚问题的具体需求。
学习计算机科学的思维方式与逻辑思维当今时代,计算机科学的发展日新月异,已经成为一门广受关注的学科。
无论是从事相关职业,还是作为一般公民,学习计算机科学的思维方式与逻辑思维都有着重要的意义。
本文将探讨学习计算机科学所需的思维方式和逻辑思维,并分析其对个人和社会的影响。
一、计算机科学的思维方式学习计算机科学需要培养一种特殊的思维方式,即“计算思维”。
计算思维是一种通过问题的分解和抽象,运用逻辑和数学工具进行推理和解决问题的思维方式。
它强调问题解决的过程,注重问题的分析和算法的设计。
1. 问题分解和抽象计算思维首先要求我们将复杂的问题分解为更小、更简单的子问题,抽象出问题的关键特征。
通过将整个问题拆解为小块,我们可以更好地理解问题的本质,减少认知负荷,提高解决问题的效率。
2. 逻辑推理学习计算机科学需要运用逻辑思维,这是因为计算机是按照特定的逻辑规则进行运算的。
通过学习逻辑思维,我们可以理清问题的因果关系,寻找合适的解决方案。
逻辑思维还能培养我们的分析能力和推理能力,使我们在解决问题时更加严谨和准确。
3.算法设计学习计算机科学的思维方式还涉及算法设计。
算法是一系列有序、可操作的指令,用于解决特定问题。
算法设计是计算机科学中的核心,它要求我们提出一种有效的解决方案,考虑问题的时间复杂度和空间复杂度。
通过学习算法设计,我们可以提高问题解决的效率和准确性。
二、逻辑思维对个人的影响逻辑思维是一种基本的思维方式,它不仅对学习计算机科学有重要影响,对个人的日常生活也有积极作用。
1. 提高问题解决能力逻辑思维培养了我们分析问题和推理问题的能力,这使得我们在面对困难和挑战时更加从容。
无论是在学习、工作还是生活中,我们都会遇到各种问题和难题,逻辑思维能帮助我们快速找到解决问题的方法,提高问题解决的能力。
2. 增强创造力逻辑思维追求合理和准确,但并不意味着创造力和想象力的削弱。
事实上,逻辑思维和创造力可以相得益彰。
逻辑思维使我们在创造时更加有条不紊,可以更好地组织思维,避免走入死胡同。
计算机科学的认知与思维方法特点计算机科学是研究计算机系统、算法及其在信息处理中的应用的学科。
计算机科学的认知和思维方法具有以下特点:1. 逻辑思维:计算机科学强调逻辑思维的重要性。
计算机科学家需要具备良好的逻辑推理能力,能够分析问题、设计算法和构建系统。
逻辑思维:计算机科学强调逻辑思维的重要性。
计算机科学家需要具备良好的逻辑推理能力,能够分析问题、设计算法和构建系统。
2. 抽象与模型化:计算机科学家经常使用抽象的方法来处理复杂的问题。
他们将问题简化为易于理解和求解的模型,并通过建立模型来推导出解决方案。
抽象与模型化:计算机科学家经常使用抽象的方法来处理复杂的问题。
他们将问题简化为易于理解和求解的模型,并通过建立模型来推导出解决方案。
3. 算法设计:算法是计算机科学的核心。
计算机科学家需要掌握各种算法设计技巧,能够有效地解决实际问题,并评估算法的效率和正确性。
算法设计:算法是计算机科学的核心。
计算机科学家需要掌握各种算法设计技巧,能够有效地解决实际问题,并评估算法的效率和正确性。
4. 问题解决能力:计算机科学强调解决问题的能力。
计算机科学家需要具备良好的问题分析和解决能力,能够快速发现问题的本质,并提出有效的解决方案。
问题解决能力:计算机科学强调解决问题的能力。
计算机科学家需要具备良好的问题分析和解决能力,能够快速发现问题的本质,并提出有效的解决方案。
5. 创新和创造力:计算机科学是一门创新性很强的学科。
计算机科学家需要具备创造性思维,能够提出新的理论和方法,推动科技的进步。
创新和创造力:计算机科学是一门创新性很强的学科。
计算机科学家需要具备创造性思维,能够提出新的理论和方法,推动科技的进步。
6. 团队合作:计算机科学常常需要团队合作才能完成复杂的任务。
计算机科学家需要具备团队合作和沟通能力,能够与他人合作解决问题。
团队合作:计算机科学常常需要团队合作才能完成复杂的任务。
计算机科学家需要具备团队合作和沟通能力,能够与他人合作解决问题。
逻辑学在计算机科学中的应用随着计算机技术的飞速发展,计算机科学已成为当今世界最重要、最具前景的学科之一。
而逻辑学作为一门研究思维规律和推理方法的学科,在计算机科学中也扮演着非常重要的角色。
本文将从逻辑学在计算机科学中的应用角度进行探讨。
一、逻辑学在计算机科学中的基础作用逻辑学是一门研究人类思维和推理方法的学科,它主要研究推理规律、判断方法和思维规律等方面的问题。
在计算机科学中,逻辑学起到了非常基础的作用。
首先,计算机程序的编写需要遵循一定的逻辑规律,只有按照逻辑规律编写程序,才能保证程序的正确性和稳定性。
其次,计算机科学中的很多问题都需要进行逻辑分析和推理,只有掌握了逻辑学的基本知识,才能更好地解决这些问题。
二、逻辑学在计算机科学中的具体应用1. 逻辑推理逻辑推理是计算机科学中最为常见的应用之一。
例如,在人工智能领域,逻辑推理被广泛应用于知识表示和推理、自然语言理解、智能搜索等方面。
在计算机程序的编写中,逻辑推理也是必不可少的,程序员需要根据逻辑规律来设计程序的流程和逻辑结构,从而保证程序的正确性和稳定性。
2. 数理逻辑数理逻辑是逻辑学的一个重要分支,它主要研究逻辑系统的形式化表达和证明方法。
在计算机科学中,数理逻辑被广泛应用于程序验证、形式化规约等方面。
例如,在程序验证中,数理逻辑可以帮助程序员证明程序的正确性,从而避免程序中的错误和漏洞。
3. 模型检测模型检测是一种基于形式化方法的自动化验证技术,它通过对系统模型进行分析和推理,来判断系统是否满足某些安全性质或性能要求。
在计算机科学中,模型检测被广泛应用于软件和硬件系统的验证、网络安全等方面。
例如,在软件开发中,模型检测可以帮助程序员发现程序中的漏洞和错误,从而提高程序的安全性和可靠性。
4. 形式化方法形式化方法是一种基于数学和逻辑的软件开发方法,它通过对软件系统进行形式化描述和分析,来保证软件系统的正确性和可靠性。
在计算机科学中,形式化方法被广泛应用于软件开发、系统设计、安全分析等方面。
计算机的逻辑计算机的逻辑是指计算机运算过程中所涉及到的各种算法、操作、规则以及相关知识体系。
在计算机科学领域中,逻辑是非常基础和重要的概念,它包括了计算机原理、计算机组成结构、计算机操作系统、程序设计、数据结构等多个方面。
下面,我们将从多个方面来分步骤阐述计算机的逻辑,让大家对这个概念有一个全面的了解:第一步:计算机的基本逻辑结构计算机的基本逻辑结构包括输入设备、输出设备、中央处理器、主存储器、辅助存储器等组成部分。
在这些组成部分中,中央处理器是计算机的核心,它包括了运算器、控制器、寄存器等多个部分。
第二步:计算机的运算逻辑计算机进行运算的过程是非常精密和复杂的,它需要遵循各种规则和操作。
运算逻辑包括了二进制算术运算、逻辑运算、条件分支、循环结构等多个方面。
第三步:计算机的程序逻辑在计算机程序设计中,程序逻辑是指计算机程序运行的主要流程,它的设计和实现对于程序的效率和可读性有着很大的影响。
程序逻辑包括了程序的设计思路、变量的定义和使用、函数的调用和返回等多个方面。
第四步:计算机的数据结构逻辑数据结构是计算机程序设计中非常重要的一部分,它的设计和实现对于程序的效率和可读性也有着非常重要的影响。
数据结构逻辑包括了数据类型的定义、线性表、树、图等多个方面。
第五步:计算机的操作系统逻辑操作系统是计算机的核心软件之一,它对计算机的管理和调度有着非常重要的作用。
操作系统逻辑包括了进程、线程、内存管理、文件管理、设备管理等多个方面。
综上所述,计算机的逻辑是计算机科学领域中非常基础和重要的概念,它涵盖了计算机的原理、组成结构、操作系统、程序设计、数据结构等多个方面。
通过深入了解计算机的逻辑,我们可以更好地理解计算机的工作原理,同时也可以更好地进行计算机程序的设计和实现。
模拟计算机研究的新思路与方法随着数字化、信息化和智能化的发展,计算机的应用领域越来越广泛,从最初的科学计算和数据处理应用,逐渐扩展到金融、交通、医疗、智能制造等众多领域。
而在计算机应用领域的发展过程中,模拟计算机也逐渐成为了研究和应用的热点领域。
传统的计算机是基于逻辑门实现运算的,运算速度较快,适用于数值计算和数据处理。
而模拟计算机是基于模拟电路实现运算的,适用于模拟和分析电气、电子、机械、化工等系统。
随着科技的不断发展,这两种计算机的应用场景也越来越重叠,如何更好地将它们结合起来成为了研究的重要课题。
在传统的模拟计算机研究中,通常采用手工搭建电路并通过模拟计算进行分析,这种方法虽然能够得出较为精确的结果,但是它的建模难度比较大,计算复杂度也比较高,很难完成复杂系统的分析建模工作。
而在当前,计算机技术的发展为模拟计算带来了新的思路和方法。
首先,随着计算机技术的发展,研究人员可以利用计算机模拟电路进行分析,开展电路研究工作。
在计算机上通过搭建电路模型,并进行电路模拟计算,可以帮助实现电路实验的自动化,节省了实验人员的大量时间和精力,提高了研究工作的效率。
同时,计算机模拟也可以通过分析电路模拟结果,提取电路的参数特性,快速获得电路的优化设计方案。
其次,基于计算机仿真的方法,研究人员可以开展多参数敏感性分析和优化设计。
通过在计算机上搭建电路模型,在不同的参数范围内实行电路仿真计算,可以探究不同电路参数对电路性能的影响,并得出最优的设计方案,从而实现电路设计的快速优化。
此外,在科技的发展过程中,深度学习技术在计算机科学领域也得到了广泛的应用,有效地推动了智能计算机的发展。
在模拟计算机研究中,可以利用深度学习技术,建立电路特征提取模型,探究不同参数下的电路特征,从而更好地理解电路或系统的运行原理,并优化电路或系统的性能。
综上所述,随着计算机技术的不断发展,模拟计算机研究也面临着新的思路和方法。
通过计算机模拟电路进行分析,可以实现电路实验的自动化,国防了实验人员的时间和精力,提高了研究工作的效率。
计算机逻辑基础知识点总结一、逻辑与计算机逻辑是计算机科学的基础原理之一,它是计算机系统的核心。
逻辑是一种思维方式,是一种思考问题的方法,是一种对事物关系的认识和分析方法。
计算机逻辑包括了命题逻辑、谓词逻辑等,是计算机科学中最基础的知识之一。
二、命题逻辑命题逻辑是研究命题之间的关系的学问,它是逻辑学中的一种基本形式。
命题是一个能够用真或假表示的简单的陈述句。
命题逻辑就是处理这些命题的逻辑。
1. 命题逻辑的概念(1)命题:一个陈述句,可以用真或假表示,并且具有明确的意义的不可分割的陈述。
(2)复合命题:由一个或多个命题通过逻辑连接词组成的复杂命题。
(3)逻辑连接词:与、或、非、蕴含和等价。
2. 命题逻辑的基本运算(1)合取:取多个真命题的逻辑与。
(2)析取:取多个真命题的逻辑或。
(3)非:对一个命题的否定。
(4)蕴含:p→q,如果p成立,则q一定成立。
(5)等价:p↔q,p和q具有相同的真假值。
(6)命题的推理:逻辑连接词的运用和命题之间的关系。
3. 命题逻辑的证明(1)直接证明法:可以用一个分析都可以推出结论。
(2)间接证明法:反证法,假设命题的逆否命题或者对偶命题成立。
三、谓词逻辑谓词逻辑(predicate logic)也叫一阶逻辑,是处理复杂命题的一种逻辑。
与命题逻辑只处理简单命题不同,谓词逻辑可以处理对象、性质、关系等更为复杂的断言。
1. 谓词逻辑的概念(1)类型:谓词表示对象性质、关系及否定。
(2)量词:全称量词(∀)和存在量词(∃)。
(3)联结词:与(∧)、或(∨)、非(¬)、蕴含(→)、等价(↔)。
2. 谓词逻辑的基本运算(1)命题:由谓词和主词组成的有意义的陈述。
(2)开放式公式:含有变元的谓词表达式。
(3)关系:包括真值表、联结词、优先级规则。
3. 谓词逻辑的应用(1)推理:利用推理规则和公式化知识得出结论。
(2)知识表示:用谓词逻辑可以清晰精确地表示知识。
(3)语义网络:用谓词逻辑可以描述复杂的语义结构。
计算机模拟的原理与方法第一节计算机系统模拟的原理一、系统模拟的概念系统模拟是指利用计算机来运行模拟模型,模仿实际系统的运行状态及随时间变化的过程,并通过对模拟运行过程的观察和统计,得到被模拟系统的输出参数和基本特性,以此来估计和推断实际系统的真实参数和真实性能,这个过程被称为系统模拟。
在实际工程中,系统分类的方法很多,其中最主要的一种分类方法是按系统中起主导作用的状态的变化是否连续分为连续系统和离散系统两种。
从系统模拟的角度考虑,不同类型的系统,其模拟的方法及特点也有所不同。
连续系统的模拟是指对那些系统随时间连续变化(包括由于数据采集在离散时间上进行的,因此数据是非连续的)的系统建立其数学模型,并将它放在计算机上进行试验。
这类系统的数学模型包括:连续模型(如微分方程等)、离散时间模型(如差分方程等)和连续—离散混合模型,其基本特点是能用一组方程来描述。
离散事件模拟是指对那些系统状态只在一些时间点上由于某种随机事件的驱动而发生变化的系统建立其数学模型。
模拟过程中,通常用某一时刻的系统状态表示在某一时段内的状态,系统状态的变化发生在离散时刻,呈状态突变。
因此在离散事件的模拟过程中,无须详细描述两个离散事件之间所发生的动态过程,只需抓住各事件发生的时间,并按时间发生的顺序记载各时间点上系统状态,即可掌握系统的动态变化过程。
这种系统的状态量是由于事件的驱动而发生变化的,在两个事件之间状态量保持不变也即是离散变化的,所以称之为离散系统。
这类系统的数学模型一般很难用数学方程来描述,通常使用流程图和网络图来描述。
在研究水利水电施工系统模拟时,所关心的是各施工对象在各时间点上的状态变化,如高程、机械、服务对象、累计完成方量等,而这些变量都可以被当作随时间呈非连续的跳跃式的变化,因此,水利水电施工系统的模拟,大都可看作离散事件的模拟。
二、离散系统模拟的基本概念1.实体与主导实体一个系统内部的对象称为实体,如坝块、浇筑机械等,某个实体状态的改变直接影响整个系统状态的改变,这样的实体称为主导实体,如卸料的重车运行的罐车。
计算机运算逻辑简介一、逻辑基础计算机运算逻辑是计算机科学的核心,它建立在逻辑学的基础之上。
逻辑学是研究推理和论证的科学,它提供了对真理和知识的理解和分析方法。
在计算机运算逻辑中,逻辑基础主要包括命题逻辑、谓词逻辑和模态逻辑等。
二、运算逻辑运算逻辑是计算机运算逻辑的重要组成部分,它涉及到计算机内部的基本运算操作。
运算逻辑包括算术运算、逻辑运算、位运算等,这些运算都是基于二进制数的。
在计算机内部,所有的数据都是以二进制形式存储和处理的,因此,运算逻辑在计算机科学中具有非常重要的地位。
三、逻辑设计逻辑设计是计算机科学中的一项重要技术,它涉及到如何将现实世界的问题转化为计算机内部可以理解和处理的形式。
逻辑设计的主要任务是设计出一种有效的算法,使得计算机能够按照一定的规则和顺序执行一系列的操作,从而解决特定的问题。
四、指令集与汇编语言指令集是计算机内部指令的集合,它是计算机硬件和软件之间的接口。
汇编语言是一种低级语言,它直接对应于计算机的指令集。
汇编语言由一系列的指令组成,每一条指令对应于计算机硬件执行的一个操作。
通过汇编语言,程序员可以直接控制计算机硬件,实现特定的功能。
五、高级逻辑设计高级逻辑设计是指使用高级语言(如C、Java等)进行逻辑设计的方法和技术。
高级语言提供了更丰富的数据类型、控制结构和函数库,使得程序员可以更加方便地进行逻辑设计。
高级逻辑设计的主要任务是将现实世界的问题转化为高级语言代码,并确保代码的正确性和高效性。
六、算法与数据结构算法是解决问题的方法和步骤,数据结构是数据的组织和存储方式。
在计算机科学中,算法和数据结构是非常重要的概念。
许多经典算法(如排序、搜索、图论等)都是基于特定的数据结构实现的。
通过学习和掌握各种算法和数据结构,程序员可以更加高效地解决各种问题。
七、程序优化与性能分析程序优化是指对程序进行修改和调整,以提高程序的性能和效率。
性能分析是指对程序的运行过程进行跟踪和分析,找出程序中的瓶颈和问题。
计算机科学中的现代逻辑学在计算机科学的世界里,逻辑学可真是个关键角色,简直像是舞台上的主角。
说到逻辑,大家可能会想起那些复杂的公式、繁琐的定理。
但实际上,逻辑学跟我们的生活有着密不可分的联系,像是无处不在的空气。
想想看,当你在选择今天吃什么时,其实也是在进行一场逻辑推理。
比如,今天想吃披萨,那就要考虑有没有时间去点外卖,钱包里还有多少钱,甚至还得考虑有没有足够的胃口。
每一步都在潜意识中运用了逻辑。
是不是很有趣?说到计算机,逻辑就更是其中的灵魂。
程序员们就像是在编织一张复杂的网,他们需要用到各种逻辑运算,把零和一变成能让计算机理解的指令。
想象一下,程序员就像是在教计算机说话,教它如何听懂我们的命令。
这样一来,计算机就可以根据我们输入的信息做出反应,真是一个神奇的过程。
就好像我们在跟朋友聊天,朋友听懂了我们的意思,立刻给出反馈。
这一切的背后,都是逻辑在默默地发挥作用。
现代逻辑学不仅限于计算机,它的影响力更是延伸到人工智能、数据分析等多个领域。
比如,在人工智能的训练中,逻辑学帮助机器学习模型理解数据的规律,找出其中的联系。
可以说,逻辑学让这些“智能”变得更加聪明,仿佛赋予了它们一些“思考”的能力。
虽然机器不是真的有思维,但它们能通过逻辑进行判断,这可不是一件简单的事情。
就像是在玩拼图游戏,逻辑让机器能够找到每一块拼图的位置,最终拼出完整的图案。
再说到数据分析,逻辑同样发挥着重要的作用。
数据分析师每天都在面对海量的数据,如何从中提取出有用的信息,靠的就是逻辑推理。
比方说,有个商家想知道,为什么某个产品的销量突然下滑。
他们会运用逻辑分析各种因素,比如市场趋势、消费者偏好、甚至是竞争对手的动态。
通过这些逻辑推理,商家就能找出问题的根源,然后调整策略。
逻辑在这里就像一把钥匙,帮助人们打开理解数据的大门。
逻辑学的魅力还不止于此。
它的严谨和系统性,给了我们一种看待世界的方式。
我们在学习逻辑时,不只是学会了如何推理,更是培养了一种思维方式。
对计算机模拟中的逻辑、方法论的几点认识随着计算机科学技术的发展,用计算机模拟人类实际科学推理的思维过程成为可能。
于是,在计算机人工智能与认知心理学研究的交叉点上形成了“人类问题求解”理论。
同时,又在计算机人工智能与逻辑研究的交叉点形成了适用于计算机的新颖逻辑理论及算法。
计算机人工智能(AI)研究虽化分为两派,但无论哪一派,在对于思维的计算机模拟研究,包括机器学习和机器实现方面的研究,都为逻辑和科学方法论带来革命性变化和新的启示。
标签:启发式搜索;机器学习;Prolog系统;逻辑;方法论随着计算机科学技术的发展,用计算机模拟人类实际科学推理的思维过程成为可能。
于是,在计算机人工智能与认知心理学研究的交又点上形成了“人类问题求解”理论。
同时,又在计算机人工智能与逻辑研究的交叉点形成了适用于计算机的新颖逻辑理论及算法。
计算机人工智能(AI)研究者分裂为两大派:AI认知心理学派与AI逻辑学派。
H.西蒙为认知心理学派提出了研究纲领:“让人工智能借用心理学,又让心理学借用人工智能成果。
”认知心理学派把思维看作有选择地搜索迷宫的心理过程,而逻辑学派则把思维看作一个由前提进行推理的逻辑过程。
这两派中无论哪一派,对于思维的计算机模拟研究,包括机器学习和机器发现方面的研究,都为逻辑和科学方法论带来革命性变化和新的启示。
一在本文第一部分,笔者先谈谈AI认知学派的启发式搜索法的方法论启示。
认知心理学派在对一系列科学发现的案例进行细致分析并进行计算机模拟研究之后断言,人类的科学推理过程的实质就是启发式搜索的过程。
换句话说,人类进行问题求解时所用的启发式搜索法就是科学探索和科学发现的逻辑与方法。
这就是他们的问题求解理论的基本内核。
如果说,按照人工智能(AI)的认知心理学的观点,科学探索的计算研究或“机器发现”研究的主要目标就是为人类推理的思维过程建立一些认知模型,那么,与此相对照,人工智能逻辑学派或图灵传统的“机器发现”研究的主要目标则是编制某种严格可操作的算法或自动程序,让它最大限度自主地作出某些新发现,在有限步骤内求得问题的解。
西蒙更偏爱启发式方法,因为这类方法常常能利用人类已有的一些经验规则或知识作提示,在寻求问题的解决方案过程中可以大大缩小可能性空间,减少盲目性,极大地提高搜索效率。
启发式方法并不提供严格的算法与直接的答案,却是指示了一步一步接近解决问题的正确方向。
最著名的机器发现程序是BACON1-6程序,这是H.西蒙与P.兰利等人所设计的旨在用计算机完成重大科学定律的再发现的一组程序。
这一组程序之所以用“培根”来命名,是因为它们结合并运用了培根的归纳推理方法,体现了培根的“归纳机器”的理想。
概括地说,BACON1—6程序有共同的发现方法和共同的数据与定律的表征形式,其间的差别仅在于从数据中搜索科学定律的启发法有所不同。
BACON1是其中最简单、最基本的一个发现程序,后面的程序一个比一个更复杂,保留一些又增添一些启发式方法。
让我们以BACON1发现玻义耳定律与开普勒第三定律作为案例。
(一)玻义耳定律:PV=C(即一定量的气体,压力P与体积V之间存在反比关系)试问,能否给机械编个程序,让它来胜任玻义耳的发现呢?兰利说,BACONI 能做到。
它期待从P与V的某种简单的函数关系中产生常量,基本的策略是一次试验一个可能的函数,按+、-、×、÷顺序,从最简单的开始。
这里假定了8个可能的简单函数:P,V,(P+V),(P-V),(V-P),PV,P/V,V/P。
看起来这种做法是符合培根的科学哲学精神的,因为培根的排除性归纳法要求首先列出各种可供选择的可能原因,然后根据限制条件一个一个地排除其中的不可能者,直至最终确定真正的原因为止。
BACON1程序根据所输入的P和V的18行数据,通过快速运算依次一个个地试测不同的可能函数,试到第6个函数PV时,终于在所允许的误差范围内得到了常量。
至此,兰利就宣称AI用这种方式重新发现了玻义耳定律。
(二)开普勒行星第三定律D3/T2=C的再发现这个定律是说某个行星与太阳之间的平均距离D的立方除以行星运行周期T的平方等于一个常数。
BACON1被提供6个行星(金星、木星、水星、火星、土星加上地球)的D与T的一个个数据。
然后,像上一个例子一样,AI试图发现常数的存在。
这一回试测的可能函数是DT、D/T、T/D、D2/T、T/D2、T2/D、D/T2、D2/T2、T2/D2、D3/T、T/D3、T3/D、D/T3、D3/T2等等。
实际上,在牛顿力学中广泛存在着正比、反比、平方正比、平方反比等关系,因此看起来这样的试测仍是合乎情理的。
如果按BACON1程序来操作,只须经过13次试验就可以得到开普勒第三定律。
尝试13个函数对电脑来说算不了什么。
孔宪中先生在《人工智能与科学哲学》中对BACON程序进行了简化解释,这种解释初看起来似乎非常好,画龙点睛,说明实质,笔者起先也相信是这样。
后来再仔细一分析,却发现这种简化解释恰恰在很大程度上把启发式方法的活的灵魂丢失掉了。
对于较复杂的开普勒定律尤其是这样。
实质上,对于BACON1程序来说,关键之处正在于将观测数据引导到经验定律的那三条启发式原则:(1)如果某一项的值为常数,则可推得这一项始终为常数(常数的出现正是科学定律的标志);(2)如果两个被比较的数值项的值一齐增加,则考虑它们的比值,为的是寻求并得到常数和定律(笔者想应当补充说,被比较的数值项的选择原则是按差距的从大到小的顺序来比较);(3)如果两项数值一增一减,则考虑它们的乘积,为的是得到常数和定律(笔者想应当补充说,被比较的数值项的选择原则是按差距的从小到大的顺序来比较)。
若按照这三条启发法对开普勒第三定律的机器发现作重新解释,应当是这样(见表1所示假想数据):表1表中先给出一组三个行星A、B、c的离太阳平均距离及公转周期的假想数据。
由于D与T一齐增大,按启发法二,则考虑其比值D/T,看看是否得到常数;结果不是常数,就再将第一比值与D比较,结果发现是一增一减,则按启发法三相乘,可得第二比值,仍然未得到常数;再将第二比值与T比过证伪而排除),由此覆盖面最广的那个相对最小普遍化得以扩展,于是普遍化将覆盖尽可能多的例子。
在这里,我们再次看到GOLEM中培根式的机械归纳是与证伪模式互补地起作用的。
三笔者在本文第三部分将要讨论一下Prolog的非单调推理性质及其对逻辑方法论的启示。
每个从事计算机科学的研究者都知道Prolog,这是一种逻辑程序设计语言,它诞生于1972年。
按照王元元在《计算机科学中的逻辑学》一书中的描述,Prolog语言有四大特点:(1)Prolog既是一种程序设计语言,又是一个逻辑系统;(2)它是一种面向问题的语言,能给出问题的形式描述;(3)它的求解过程是一个寻求否证的归纳过程;(4)它除了逻辑成分,还有控制成分。
对于逻辑与科学方法论学者来说,他们特别关心的是Prolog语言所包含的非经典逻辑特性,尤其是非单调推理的特性。
经典演绎逻辑的推理都是单调的,也就是说在引进新前提后,不必改变原有效推理的结论。
若在引进新前提后,将改变原有效推理的结论,则这种推理称作非单调的。
由于人类实际推理都是动态的,不断引进新前提,不断修正原有结论,因此计算机逻辑中的非单调推理比经典逻辑更切近实际。
让我们通过实例来考察Prolog逻辑系统在实际运行过程中表现出怎样的非单调推理的特征的吧:假定从桂林到柳州每天有4班快巴,发车时间分别为7:00,9:00,11:00以及14:00,然后我们给出一个定义P(x)=1班在x时间从桂林去柳州的快巴。
这样,上述4种快巴时刻信息就可以编入Prolog逻辑系统:P(7:00)P(9:00)P(11:00)P(14:00)现在如果有人向这种Prolog系统进行咨询:?—P(13:00),即“是否有1班下午1点从桂林去柳州的快巴”,结果显示的是“否”。
由于现有数据库并没有“n ot P(13:00)”这样的否定句,因而如果单纯靠经典逻辑和经典否定,则既推不出“not P(13:00)”这样的否定句,也推不出“P(13:00)”那样的肯定句,也就是说给不出明确答案。
然而,Prolog所使用的是新颖的非经典否定词“失败一否定”,它的含义是指:对肯定句进行确认的尝试失败,就等同于对相应否定句的确认。
在本案例中,Prolog系统通过把咨询句“?—P(13:00)”与数据库已有句子逐一相匹配,就都会失败,最后得到否定的结果“not P(13:00)”。
事实上,正是这个非经典否定词(失败一否定)使Prolog系统获得了“非单调”推理的特性。
因为如果将P(13:00)这样的新前提补充到数据库中去,那么再也推不出原先的结论“not P(13:00)”,而将推出新结论“P(13:00)”。
可见基于扩大的数据库的Prolog系统,对从先前的前提中推出的结论也要作相应的调整与修改,这正是典型的非单调特性。
Prolog系统对“失败一否定”的运用还可以推广到较复杂的情况。
例如在时刻表上加一条细则说明,即“如果没有1班12:00从桂林去柳州的快巴,那么将有1班13:00的”。
在Prolog系统中可表示为“P(13:00):not P(12:00)”,读作“P(13:00),如果没有P(12:00)”。
不难证明,这个系统最后将推出肯定句P(13:00)。
通过以上的论述,不难看出Prolog系统的“失败—否定”推理是以这样一种假设为基础的,即“如果不能从背景知识中确认P,那么就将非P加入背景知识”。
换言之,如果不能确认“P”,那么“非P”就能得到确认。
显然,其中包含一个预设,即数据库中已穷尽所论问题的世界的全部背景知识。
或者说,在Prolog系统数据库中明确表示的肯定性事实例如P(7:00)等等与隐含地表示的否定性事实例如not P(12:00)描述了该世界全部相关的背景知识。
这样一种假设被称作“封闭世界(即全域)假设”。
笔者发现,“失败一否定”推理具有非常辩证的性质。
由于全域假设只要求Prolog系统的数据库出现肯定事实,而许多未出现或未明确表示的事实则属于隐含的否定事实。
因此,在数据库中的某些否定事实如not P(12:00)与潜在的肯定事实最终转化为明确的肯定事实,如P(13:00)的中间过程中,Prolog系统中某些匹配如?—P(13:00)分别与P(7:00),P(9:00),P(11:00),P(14:00)匹配的失败,尤其是它与not P(12:00)中的P(12:00)匹配的失败,包含着转化为下一步匹配即?—P(13:00)与P(13:00)匹配成功的契机。
在这个推理过程中,非经典否定词“失败一否定”对于数据中隐含的否定事实向明确表示的肯定事实的辩证转化,对于匹配失败向匹配成功的辩证转化,起了明显的促进作用。