当前位置:  开发笔记 > 程序员 > 正文

智能代码完成?AI是否通过学习编写代码?

如何解决《智能代码完成?AI是否通过学习编写代码?》经验,为你挑选了2个好方法。

我问这个问题,因为我知道这里有很多读得很好的CS类型可以给出一个明确的答案.

我想知道是否存在(或正在研究/开发)这样的AI,它通过生成和编译代码来编写程序,然后通过从以前的迭代中学习来进行.我正在谈论努力使我们,程序员,过时.我正在想象通过反复试验来学习编程语言中哪些有效和哪些无效的东西.

我知道这听起来像是在天空中,所以我要求找出已做过的事情,如果有的话.

当然,即使是人类程序员也需要输入和规范,因此这样的实验必须具有精心定义的参数.就像AI要探索不同的计时功能一样,必须明确定义这个方面.

但是,通过复杂的学习AI,我很想知道它可能会产生什么.

我知道计算机有很多人的品质无法像我们的判断,品味和偏见那样复制.但是我的想象力喜欢一个程序的想法,这个程序在经过一天的思考后会吐出一个网站,让我看看它是什么产生的,甚至我常常认为它是垃圾; 但也许每天一次我可能会给它反馈并帮助它学习.

这个想法的另一个途径是提供像"菜单网站"或"图像工具"这样的高级描述会很好,它会产生足够深度的代码,这对于我来说代码完成模块是很有用的.细节.但我想这可以设想为非智能静态分层代码完成方案.

这个怎么样?



1> Varkhan..:

存在这样的工具.它们是称为遗传编程的学科的主题.您如何评估他们的成功取决于他们的应用范围.

它们非常成功(数量级比人类更高),可以为工业过程,自动医疗诊断或集成电路设计的管理设计最佳程序.那些工艺是很好的约束,有一个明确的和不可改变的成功举措,以及"宇宙知识"量很大,这是对什么是有效的工作,节目一大套规则,哪些不是.

它们在尝试构建需要用户交互的主流程序时完全没用,因为学习需求的系统的主要项目是明确的" 适应性功能 ",或者对其提出的当前解决方案的质量进行评估.

在处理"程序学习"时可以看到的另一个领域是归纳逻辑编程,尽管它更习惯于提供自动演示或语言/分类学习.



2> MaD70..:

免责声明:我不是英语母语人士,也不是该领域的专家,我是业余爱好者 - 期待随后的不精确和/或错误.因此,本着stackoverflow的精神,不要害怕纠正和改进我的散文和/或我的内容.另请注意,这不是对自动编程技术的完整调查(来自模型驱动架构(MDA)的代码生成(CG)至少值得一提).

我想在Varkhan回答的内容中添加更多内容(这基本上是正确的).

自动编程的遗传编程(GP)方法与其适应度函数混淆了两个不同的问题("自编译"在概念上是一个明智的选择):

自我改进/适应 - 合成程序,如果需要的话,合成器本身; 和

程序综合.

WRT 自强不息/适应参考尤尔根·施米德赫伯的戈德尔机:自我指涉的普遍问题解决者作出可证明的最佳自我改进.(作为旁注:有趣的是他对人工好奇心的研究.)与此讨论相关的还有Autonomic Systems.

wrt 程序综合,我认为有可能对3个主要分支进行分类:随机(概率 - 如上面提到的GP),归纳演绎.

GP本质上是随机的,因为它产生了可能程序的空间,具有启发式,例如交叉,随机突变,基因复制,基因缺失等等(比测试具有适应度函数的程序并让适者生存和繁殖).

归纳程序合成通常称为归纳编程(IP),其中归纳逻辑编程(ILP)是子场.也就是说,通常该技术不限于逻辑程序合成或以逻辑编程语言编写的合成器(两者都不限于" 自动演示或语言/分类学习 ").

IP通常是确定性的(但也有例外):从不完整的规范(例如示例输入/输出对)开始,并使用它来约束满足此类规范的可能程序的搜索空间,然后对其进行测试(生成和测试)方法)或直接合成检测给定实例中的复发的程序,然后进行推广(数据驱动分析方法).整个过程基本上是统计归纳/推理 - 即考虑包含在不完整规范中的内容类似于随机抽样.

生成和测试以及数据驱动/分析 §方法可以非常快,因此两者都很有前途(即使到目前为止只公开演示了很少的合成程序),但生成和测试(如GP)令人尴尬地并行然后可以预期显着的改进(缩放到实际的程序大小).但请注意,增量归纳编程(IIP)§本质上是顺序的,已证明对非增量方法更有效.

§这些链接直接链接到PDF文件:抱歉,我无法找到摘要.

演示编程(PbD)和示例编程(PbE)是已知的实际利用归纳程序综合的最终用户开发技术.

演绎程序合成以(假定的)完整(正式)规范(逻辑条件)开始.其中一种技术利用自动化定理证明:合成一个程序,它构建了一个符合规范的对象存在的证明; 因此,通过 Curry-Howard-de Bruijn同构(证明 - 程序对应和公式 - 类型对应),它从证明中提取程序.其他变体包括使用约束求解和子程序库的演绎组合.

在我看来,归纳演绎综合在实践中是通过两个不同的角度来攻击同一个问题,因为构成完整规范的是有争议的(此外,今天的完整规范明天可能变得不完整 - 世界不是静态的).

当(如果)这些技术(自我改进/适应和程序综合)成熟时,它们承诺提高声明性编程所提供的自动化量(这种设置被认为是" 编程 " 有时会被争论):我们将集中精力更多关于领域工程和需求分析和工程,而不是软件手册设计和开发,手动调试,手动系统性能调整等(与现有手册相比,可能具有更少的意外复杂性,而不是自我改进/适应技术).这也将提高现有技术尚未证明的灵活性.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有