`
xuby
  • 浏览: 1973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

让计算机自动为我们写程序吧

阅读更多
当你夜深加班,头昏脑胀,用发酸的手腕在键盘上敲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;
}

解决问题的思路是从大师的教导出发。大师教导我们:
     程序 = 数据结构 + 算法
很明显,这里我们的数据有两个,ab,记为:
     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啊。当然,我们目前暂时还不用太担心:产生那些成果用的都是一些昂贵的大型机,至少目前,这些大型机的价格还是比程序员贵很多。
分享到:
评论
5 楼 kj021320 2011-10-16  
门外汉谈AI
4 楼 xuby 2009-04-15  
night_stalker 写道
变异 + 遗传 + 选择

这个例子体现了哪一部分??

这个条件不简单。科学不是魔法,你得老老实实给一组测试,譬如:
assert(3, Sum(1, 2));
assert(78, Sum(34, 44));

一般来说越复杂的算法,筛选测试就得越复杂。

不过像投资什么的筛选基准就很简单:赚钱越多越优。所以也只有评价标准简单的事情适合用遗传算法解决。

大型机什么的就更扯了……

这个例子主要体现的是自动编程的可能性,就是通过数据和算法的排列组合来达到目的。这个是自动编程基本出发点。当然,一个稍微复杂的算法,以目前的计算机做穷举都是很困难的,这样才需要遗传算法,不求得到最优解,只求得到可接受的解。可以说遗传算法只是自动编程的一个手段。
选择条件是GP里面很关键的一点,很多需求没法自动编程就是因为没法找到一个能快速收敛的筛选条件,但我们这个例子太简单了,傻瓜看一眼都知道选择条件是什么。
大型机那个只是开个玩笑。
3 楼 night_stalker 2009-04-13  
变异 + 遗传 + 选择

这个例子体现了哪一部分??

这个条件不简单。科学不是魔法,你得老老实实给一组测试,譬如:
assert(3, Sum(1, 2));
assert(78, Sum(34, 44));

一般来说越复杂的算法,筛选测试就得越复杂。

不过像投资什么的筛选基准就很简单:赚钱越多越优。所以也只有评价标准简单的事情适合用遗传算法解决。

大型机什么的就更扯了……
2 楼 xuby 2009-04-12  
night_stalker 写道
不是什么新东西…… 满世界都在用遗传算法。譬如某些炒股软件。

而且这个例子有问题:你忽略了设置筛选条件这一步。

筛选条件已经隐含了。因为这个例子的筛选条件相当明确、简单,不像其他一般的算法,筛选条件处于关键地位。
1 楼 night_stalker 2009-04-11  
不是什么新东西…… 满世界都在用遗传算法。譬如某些炒股软件。

而且这个例子有问题:你忽略了设置筛选条件这一步。

相关推荐

    自动写卡程序

    【自动写卡程序】是一种高效便捷的工具,主要用于向存储设备,例如U盘或移动硬盘等,批量写入数据内容。这种程序极大地简化了当需要将相同内容复制到多个存储设备时的操作流程,大大提高了工作效率。 自动写卡程序...

    vb写的 自动关机程序

    标题中的“vb写的 自动关机程序”指的是使用Visual Basic(VB)编程语言编写的一种应用程序,它可以实现计算机的自动关机功能。Visual Basic是微软公司推出的一种面向对象的、事件驱动的编程工具,适合初学者和专业...

    WAP自动写诗程序 v1.0.rar

    标题中的"WAP自动写诗程序 v1.0"是一个基于WAP(无线应用协议)的自动诗歌创作软件的版本标识。这个程序允许用户输入汉字,然后根据输入的内容自动生成诗歌,提供了一种新颖且便捷的方式来体验诗歌创作。WAP技术主要...

    实验室计算机及计算机数据管理程序.doc

    实验室计算机及计算机数据管理程序是确保检测活动中计算机的正确运行和自动测量数据准确性的关键环节。这份程序文件详细规定了各个角色的职责、管理范围以及具体操作步骤。 1. **目的与范围**: - 目的是为了保障...

    事件自动处理程序安装程序

    事件自动处理程序是一种高效能的自动化工具,它主要用于模拟用户在计算机上的键盘和鼠标操作。这类程序在IT行业中被广泛应用于各种场景,例如自动化测试、数据录入、在线工作流程自动化等。下面将详细介绍事件自动...

    c语言写的自动关机小程序

    标题中的“C语言写的自动关机小程序”是一个简单的编程项目,旨在通过C语言实现计算机的自动关机功能。这个小程序可能会包含系统调用或者API接口,用于触发操作系统执行关机命令。对于初学者来说,这样的项目是理解...

    python写的开机自动执行程序

    标题中的“python写的开机自动执行程序”指的是使用Python编程语言编写的一种脚本,该脚本设计为在计算机启动时自动运行。Python是一种高级、通用的编程语言,因其简洁的语法和丰富的库支持而广受欢迎。在Windows...

    定时自动关机程序

    在日常使用电脑的过程中,有时我们需要让计算机在特定的时间自动执行关机、重启或注销等操作,这时就需要一个定时自动关机程序。本文将详细介绍一款由易语言编写的定时自动关机程序,它的特点在于简单易用,适合初级...

    计算机原理与汇编语言程序设计答案

    汇编语言程序设计是计算机科学的重要组成部分,研究如何使用汇编语言编写程序,实现计算机的自动控制和信息处理。 计算机原理主要包括计算机系统结构、计算机组成原理、计算机存储系统、计算机输入输出系统、计算机...

    全自动改计算机名ip程序

    "全自动改计算机名IP程序"是一个针对这两方面需求的工具,主要用于批量或自动修改计算机的主机名(计算机名)和IP地址,这对于多台设备的网络配置来说,能显著提高效率。下面我们将详细探讨这个程序的相关知识点。 ...

    自动修改计算机名

    标题所提到的"自动修改计算机名",是指使用特定的脚本或程序,根据设定的规则,自动为计算机设置一个独特的名称。在这个案例中,脚本会将计算机名设置为"PC"后跟一个5位的随机数。这种命名方式既简单又有效,能确保...

    整蛊-计算机自动重启的应用程序

    双击打开之后会出现一对话框,若不作任何处理5秒钟后计算机将自动重启。仅供大家娱乐之用!!!!对计算机无任何影响。

    计算机组成原理与汇编语言程序设计课后答案

    3. 计算机的主要特点:计算机的主要特点有五个:能在程序控制下自动连续地工作、运算速度快、运算精度高、具有强的信息存储能力、通用性强、应用领域广泛。 4. 衡量计算机性能的基本指标:衡量计算机性能的基本指标...

    桌面壁纸自动更换小程序

    "桌面壁纸自动更换小程序"是一款轻量级的应用程序,旨在为用户提供便捷的桌面壁纸自动更新功能。这款小程序体积小巧,不占用过多系统资源,且具备开机启动能力,使得用户每次打开电脑都能享受到全新的桌面背景,为...

    windows自动关机程序

    在Windows操作系统中,有时我们需要让计算机在特定时间自动关机,以便进行系统维护或节省电力。这个"windows自动关机程序"就是为了解决这样的需求而设计的。它允许用户预设一个时间,到了这个时间点,计算机就会自动...

    CAD自动编号程序

    标题中的“CAD自动编号程序”指的是在计算机辅助设计(CAD)软件中,通过特定的程序或插件实现图形元素的自动编号功能。这种程序通常能够极大地提高设计师的工作效率,尤其是在处理大量需要编号的图形对象时,例如在...

    计算机程序

    我们可以将一个计算机程序比喻为一份菜谱,其中编程语言就像是菜谱的语言(如汉语),而计算机的体系结构则像是懂得该语言和烹饪技术的大厨。这样的类比有助于我们更好地理解程序是如何被创建和执行的。 #### 脚本...

    实验室计算机及计算机数据管理程序

    实验室计算机及计算机数据管理程序是为了确保检测中所用计算机的正确运行和实现自动测量数据的准确性,特编制本程序。本程序文件包括以下工作:测量、采集、计算、保存数据用自动化设备的管理;计算机软件和网络文件...

    VB计算机自动出卷系统(开题报告+外文翻译+源程序+可执行程序+论文正文+答辩ppt).zip

    《VB计算机自动出卷系统》是一项利用Visual Basic (VB)编程语言开发的教育软件,旨在为教师提供便捷的自动生成试卷的功能。这个压缩包包含了该项目的完整资源,包括开题报告、外文文献翻译、源代码、可执行程序、...

Global site tag (gtag.js) - Google Analytics