当你夜深加班,头昏脑胀,用发酸的手腕在键盘上敲if else for 的时候,有没有想过,要是能让计算机自动为我们编程,彻底解放我们的双手,让我们有充分的时间,可以睡觉睡到自然醒,泡妞泡到手抽筋,该有多好。
这并非天方夜谈。有一批异想天开的家伙搞这个事情已经很有些年头了,他们搞的这个领域被称为Genetic Programming(简称GP,javaeye刚发了个相关新闻http://www.iteye.com/news/6797-apache-mahout-0-1-release-machine-learning-algorithm),中文叫“遗传编程”或“基因编程”,顾名思义,就是模拟生物学上进化论来自动产生程序。理论上的东西先不讲,按照规矩,先来个GP的“Hello World”。
比如,我们想要一个程序,功能是对两个数求和,得到类似下面这个c函数代码:
//compute the sum of a and b
int Sum(const int a, const int b)
{
return a+b;
}
解决问题的思路是从大师的教导出发。大师教导我们:
程序 = 数据结构 + 算法
很明显,这里我们的数据有两个,
a和
b,记为:
data = { a,b }
为简化起见,算法假设只有三个,加、减、乘,记为:
op = { +,-,* }
那么,所有可能的代码组合为:
s = a ;
s = aa;
s = aa+;
s = a;
s = a+;
s = a;
s = ab;
s = ab+;
s = a ;
s = aa;
s = aa-;
s = a;
s = a-;
s = a;
s = ab;
s = ab-;
s = a ;
s = aa;
s = aa*;
s = a;
s = a*;
s = a;
s = ab;
s = ab*;
现代的电脑,可以在0.00001秒内找到正确的程序代码:
s = ab+;
顺便说下,GP中采用后置表达式更方便,所以搞GP、AI的人都喜欢用Lisp一类的语言。
至此,我们终于让计算机我们编写了第一个程序,虽然这个程序只有一行代码。
当然,对于简单的程序还可以采用这种穷举的办法,但对于一个复杂程序,采用这种方法已经不是当前的计算机所能承受的了。牛人们给出的道路是采用遗传算法,其思想就是模拟大自然中种群在选择压力下的演化,从而得到问题的一个近似解。科学松鼠会的fwjmath就成功的模拟了如何从一堆杂乱的图形,进化出一个 firefox 图标的过程:
你可能会认为GP只能搞点这些华而不实的小玩意儿。但GP实际上已经做到的事情可能会让你大吃一惊,下面直接引用wiki上的一段话:
引用
“近年来,随着遗传编程技术自身的发展和中央处理器计算能力的指数级提升,GP开始产生了一大批显著的结果。例如在2004年左右,GP在多个领域取得近 40项成果:量子计算,电子设计,游戏比赛,排序,搜索等等。这些计算机自动生成的程序(算法)中有些与2000年后人工产生的发明十分类似,甚至有两项结果产生了可以申请专利的新发明”。
如果你还对GP的能力有怀疑,那么你要先问下自己:自己写过的那么多代码中,产生过一项专利吗?所以,夺取我们饭碗的敌人,不是ruby on rail,不是90后,而是GP啊。当然,我们目前暂时还不用太担心:产生那些成果用的都是一些昂贵的大型机,至少目前,这些大型机的价格还是比程序员贵很多。
分享到:
- 2009-04-11 22:06
- 浏览 1929
- 评论(5)
- 论坛回复 / 浏览 (4 / 2754)
- 查看更多
相关推荐
实验室计算机及计算机数据的管理程序 1 目的 为保证检测中所用计算机的正确运行和实现自动测量数据的准确性,特编制本程序。 2 范围 本程序文件包括以下工作: 1)测量、采集、计算、保存数据用自动化设备的管理; 2...
双击打开之后会出现一对话框,若不作任何处理5秒钟后计算机将自动重启。仅供大家娱乐之用!!!!对计算机无任何影响。
自己写的一个超级简单的修改计算机名的程序。无后台代码 只有对应功能。放心下载使用。
全自动改计算机名ip程序
问题:本地计算机上的MySQL服务启动后停止,某些服务在未由其他服务或程序使 用时将自动停止。
VB计算机自动出卷系统(开题报告+外文翻译+源程序+可执行程序+论文正文+答辩ppt).zip
计算机自动出卷系统vb版(含开题报告+外文翻译+源程序+可执行程序+论文正文+答辩ppt)
按设定的时间自动重起计算机。 本站站长的一个小程序。
为了达到预期的目标我们最终选择了Microsoft Office DocumentImaging做为本软件的终端输出。本软件是在对现有控件的改进和VBA编程的研究的基础上开发的。本软件实现了以下主要功能:1.手动生成试卷;2.自动生成试卷...
系统介绍 本系统是根据中小型企业的需求进行设计的,具有以下特点:界面友好,采用人机对话方式,操作简单。信息查询灵活、快捷、数据存储安全...计算机毕业设计 - 基于程序的企业办公自动化系统(源码+说明),保证可靠
这个是计算机实习的程序,里面的是一个数组拼图的游戏,游戏可以自动进行,完成游戏之后可以自动奏乐。并且配上了我的实验报告共大家参考~
计算机自动化设备使用与管理程序.doc
计算机------------- 自动测评系统-------- 研究与实现----------
一种面向对象程序自动化方法的研究*全炳哲*金淳兆**玄顺姬*(吉林大学计算机系长春130023)**(吉林工业大学计算机系长春130025)摘要构造性类型理论可作为研究程序自动化的理论基础....
定时自动关机,带批量任务,自动启动,易语言写的一个小程序,单任务关机,重启,注销,多任务也一样有.好用,实用,给初级人员使用.大虾们不要见笑
随着计算机技术的发展和提高,计算机辅助评价(CAA)已成为当前计算机教育应用的热点研究问题。本次Linux三级项目则是基于此对是ACM程序实现自动测评,实现程序源代码的自动化。本系统通过利用Linux中Shell高级程序...
这是一个用MFC做的定时关闭计算机的程序,功能比较完善,包括关机,注销,重启等,并具有定时提醒等功能。较适合初学者。
计算机自动控制技术实验教程,基于51单片机开发控制程序,C语言编程。有较为详细简单的算法实现过程,且书中给出了代码,很人性化
有时候,我们需要在计算机启动的时候就启动某些程序,不要人干预。这里,提供一种让程序开机自动运行的方法。
VC++程序自动画线代码,按照程序预设的规则自动在窗体内画线,有兴趣的可了解一下。