词条 | 遗传编程 |
释义 | § 简介 逻辑表达式:(x Ù true) ® (( x Ú y ) Ú (z « (x Ù y)))。可以由树表达为 遗传编程,或称基因编程/GP ,是一种从生物进化过程得到灵感的自动化生成和选择计算机程序来完成用户定义的任务的技术。从理论上讲,人类用遗传编程只需要告诉计算机"需要完成什么",而不用告诉它"如何去完成",最终可能实现真正意义上的人工智能:自动化的发明机器。 § 基木思想 1989年,美国Standford大学的Koza教授发展了遗传编程的概念,其基木思想是:采用树型结构表示计算机程序,运用遗传算法的思想,通过自动生成计算机程序来解决问题。虽然遗传编程的理论尚米成热,应用也有一此限制,但它已成功地应用于人工智能、机器学习等领域。目前公开的遗传编程实验系统有十多个。例如,Koza开发的ADF系统,While开发的GPELST系统等。[1] § 原理 遗传编程是一种特殊的利用进化算法的机器学习技术, 它开始于一群由随机生成的千百万个计算机程序组成的"人群",然后根据一个程序完成给定的任务的能力来确定某个程序的适合度,应用达尔文的自然选择(适者生存)确定胜出的程序,计算机程序间也模拟两性组合,变异,基因复制,基因删除等代代进化,直到达到预先确定的某个中止条件为止。 § 概述 编程模型 遗传编程(genetic programming)是利用生物进化思想来解决复杂问题的一种编程模型。在大量的程序中,最有效的程序是那些可以与其他程序竞争或兼容而生存下来,可以继续达到解决方案需求的程序。遗传编程对于解决那些有大量变动变量的问题(如与人工智能有关的问题)是最适合的方法。遗传编程模型一般与LISP和规划编程语言结合使用,而且它还可以与C语言以及其他语言结合使用。 遗传算法的一种扩展 遗传编程可以被视为遗传算法的一种扩展,遗传算法是一种从一系列的结果中测试并选择出最佳方案的模型。选择最成功的程序有两种方案,一个是兼容方案,一种是锦标赛法或者竞争方案。使用遗传编程的一个难点就是确定适应度函数,这是一个程序能够达到最终目标的度。一个简单的适于遗传编程的例子就是设计用于射击的程序。未击中目标的子弹距离靶心的距离将决定适应度函数。遗传编程是一个新的方法,程序员要掌握这种方法需要投入大量的时间来学习。[2] § 历史 遗传编程的首批试验由斯蒂芬.史密斯 (1980)和Nichael .克拉姆 (1985)发表。约翰.Koza(1992)也写了一本著名的书,《遗传编程:用自然选择让计算机编程》,来介绍遗传编程。 使用遗传编程的计算机程序可以用很多种编程语言来写成。早期(或者说传统)的GP实现中,程序的指令和数据的值使用树状结构的组织方式,所以那些本来就提供树状组织形式的编程语言最适合与GP,例如Koza使用的Lisp语言。其他形式的GP也被提倡和实现,例如相对简单的适合传统编程语言(例如Fortran, BASIC, and C)的线性遗传编程。有商业化的GP软件把线性遗传编程和汇编语言结合来获得更好的性能,也有的实现方法直接生成汇编程序。 遗传编程所需的计算量非常之大(处理大量候选的计算机程序),以至于在90年代的时候它只能用来解决一些简单的问题。近年来,随着遗传编程技术自身的发展和中央处理器计算能力的指数级提升,GP开始产生了一大批显著的结果。例如在2004年左右,GP在多个领域取得近40项成果:量子计算,电子设计,游戏比赛,排序,搜索等等。这些计算机自动生成的程序(算法)中有些与2000年后人工产生的发明十分类似,甚至有两项结果产生了可以申请专利的新发明。 在90年代,人们普遍认为为遗传编程发展一个理论十分困难,GP在各种搜索技术中也处于劣势。2000年后,GP的理论取得重大发展,建立确切的GP概率模型和 马尔可夫链模型已成为可能。遗传编程比遗传算法适用的范围更广(实际上包含了遗传算法)。除了生成计算机程序,遗传编程也被用与产生可发展的硬件。 Juergen Schmidhuber进一步提出了宏遗传编程,一种使用遗传编程来生成一个遗传编程系统的技术。一些评论认为宏遗传编程在理论上不可行,但是需要更多的研究再确认。 |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。