一般计划的合成已成为遗传编程(GP)和人工智能的重要应用领域。代码构建遗传编程(CBGP)是最近引入的一般程序合成的GP方法,它利用反射和一级规格支持可能使用任意数据类型,多态性和从现有代码库中汲取的功能的程序的演变。但是,尚未报告正式描述和CBGP的彻底基准测试。在这项工作中,我们使用类型理论的算法对CBGP的方法进行形式化。特别是,我们表明,功能性编程语言和Hindley-Milner类型系统可用于使用原始CBGP纸中抽象描述的过程来发展类型安全程序。此外,与其他当代GP程序合成方法相比,我们对CBGP的该功能变体的搜索性能进行了全面分析。
translated by 谷歌翻译
源代码的最先进的神经模型倾向于在代码的生成时进行评估,并且通常在长地平任务中的产生,例如整个方法体的产生。我们建议使用静态程序分析仪的弱监督来解决这一缺陷。我们的神经统计方法允许深入的生成模型来象征地计算它已经生成的代码中的静态分析工具,长距离语义关系。在培训期间,该模型观察这些关系,并学习生成条件上的程序。考虑到包含该方法的类的剩余部分,我们将我们的方法应用于生成整个Java方法的问题。我们的实验表明,该方法显着地优于最先进的变换器和模型,明确试图在制作程序中没有基本语义错误的程序以及在句法匹配地面真理方面来学习此任务的模型。
translated by 谷歌翻译
GitHub Copilot,由大规模语言模型Codex提供支持的Visual Studio代码开发环境的扩展,为软件开发人员提供自动程序合成。该模型在深度学习领域中已经广泛研究,然而,与遗传编程的比较尚未以自动编程合成的性能所知。在本文中,我们在标准程序综合基准问题上评估GitHub CopIlot,并将与遗传编程文献中的结果进行比较。此外,我们讨论了两种方法的性能。我们发现,在基准问题上的两种方法的性能非常相似,但与GitHub Copilot相比,基于遗传编程的程序合成方法尚未成熟,以支持实际软件开发中的程序员。遗传编程通常需要大量昂贵的手工标记训练箱,并且需要太多时间来产生解决方案。此外,由遗传编程方法产生的源代码通常是膨胀和难以理解的。对于未来的遗传编程综合的工作,我们建议研究人员,专注于提高执行时间,可读性和可用性。
translated by 谷歌翻译
组合演变 - 通过现有物品的组合创建新事物 - 可以是发展而不是设计电子电路等技术对象的强大方法。有趣的是,这似乎是一个持续的,因此开放的过程,创造了越来越复杂性的新奇。在这里,我们采用了软件开发的组合演变。虽然遗传编程等当前方法在解决特殊问题方面是有效的,但它们都会趋向于解决方案,并且之后不再创建任何新的东西。多种式语言和技术等复杂系统的组合演变被认为是开放式的。因此,通过组合演化可能可以进行开放式自动编程。我们实现了一种计算机程序,模拟存储在数据库中的代码块的组合演进,以使它们可用于组合。通过评估正则表达式来实现基于算法的码代生成感的自动编程。我们发现编程语言的保留关键字适用于在仿真开始时定义基本代码块。我们还发现占位符可用于组合代码块,并且可以根据对编程语言的重要性来描述代码复杂性。与电子电路的先前组合演进仿真一样,复杂性从简单的关键字和特殊字符增加到更复杂的变量声明,类定义,方法和包含方法和变量声明的类。因此,组合演化似乎是开放式自动编程的有希望的方法。
translated by 谷歌翻译
我们介绍了一种称为编程拼图的新型编程挑战,作为方案合成的客观和全面评估,并释放Python编程拼图的开源数据集(P3)。每个拼图由短Python程序$ F $定义,目标是找到一个使$ F $返回true的输入。谜题是目的,因为每个人都由其验证者$ F $的源代码完全指定,因此评估为测试候选解决方案所需的$ F $。它们不需要答案密钥或输入/输出示例,也不依赖于自然语言理解。该数据集是全面的,因为它跨越一系列困难和域的问题,从琐碎的字符串操纵问题,经典编程谜题(例如,河内塔),用于采访/竞争编程问题(例如,动态编程),在算法和数学中的长期开放问题(例如,因子)。我们开发基准枚举程序合成,GPT-3和能够解决难题的食盒求解器 - 即使没有访问任何参考解决方案 - 通过从他们自己的过去的解决方案中学习。 Codex表现最佳,解决高达18%的397个测试问题的测试问题,每次尝试和80%的问题占1,000个问题。在一个小的用户学习中,我们发现拼图解决性能和编码体验之间的正相关性,以及人类和AI求解器的难题难度之间。因此,P3的进一步改进可能对许多程序合成区域产生重大影响。
translated by 谷歌翻译
General mathematical reasoning is computationally undecidable, but humans routinely solve new problems. Moreover, discoveries developed over centuries are taught to subsequent generations quickly. What structure enables this, and how might that inform automated mathematical reasoning? We posit that central to both puzzles is the structure of procedural abstractions underlying mathematics. We explore this idea in a case study on 5 sections of beginning algebra on the Khan Academy platform. To define a computational foundation, we introduce Peano, a theorem-proving environment where the set of valid actions at any point is finite. We use Peano to formalize introductory algebra problems and axioms, obtaining well-defined search problems. We observe existing reinforcement learning methods for symbolic reasoning to be insufficient to solve harder problems. Adding the ability to induce reusable abstractions ("tactics") from its own solutions allows an agent to make steady progress, solving all problems. Furthermore, these abstractions induce an order to the problems, seen at random during training. The recovered order has significant agreement with the expert-designed Khan Academy curriculum, and second-generation agents trained on the recovered curriculum learn significantly faster. These results illustrate the synergistic role of abstractions and curricula in the cultural transmission of mathematics.
translated by 谷歌翻译
We present several new techniques for evolving code through sequences of mutations. Among these are (1) a method of local scoring assigning a score to each expression in a program, allowing us to more precisely identify buggy code, (2) suppose-expressions which act as an intermediate step to evolving if-conditionals, and (3) cyclic evolution in which we evolve programs through phases of expansion and reduction. To demonstrate their merits, we provide a basic proof-of-concept implementation which we show evolves correct code for several functions manipulating integers and lists, including some that are intractable by means of existing Genetic Programming techniques.
translated by 谷歌翻译
为了协助游戏开发人员制作游戏NPC,我们展示了EvolvingBehavior,这是一种新颖的工具,用于基因编程,以在不真实的引擎4中发展行为树4.在初步评估中,我们将演变的行为与我们的研究人员设计的手工制作的树木和随机的树木进行了比较 - 在3D生存游戏中种植的树木。我们发现,在这种情况下,EvolvingBehavior能够产生行为,以实现设计师的目标。最后,我们讨论了共同创造游戏AI设计工具的探索的含义和未来途径,以及行为树进化的挑战和困难。
translated by 谷歌翻译
大多数低编码平台的用户,例如Excel和PowerApps,都以特定于域的公式语言编写程序来执行非平凡的任务。用户通常可以编写他们想要的大部分程序,但是引入了一些小错误,这些错误会产生破损的公式。这些错误既可以是句法和语义,也很难让低代码用户识别和修复,即使只能通过一些编辑解决。我们正式化了产生最后一英里维修问题等编辑的问题。为了解决这个问题,我们开发了Lamirage,这是一种最后一英里的维修发动机发电机,结合了符号和神经技术,以低代码公式语言进行最后一英里维修。 Lamirage采用语法和一组特定领域的约束/规则,它们共同近似目标语言,并使用它们来生成可以用该语言修复公式的维修引擎。为了应对本地化错误和对候选维修进行排名的挑战,Lamirage利用神经技术,而它依赖于符号方法来生成候选维修。这种组合使Lamirage可以找到满足提供的语法和约束的维修,然后选择最自然的修复。我们将Lamirage与400个Real Excel和PowerFX公式的最新神经和符号方法进行了比较,其中Lamirage的表现优于所有基线。我们释放这些基准,以鼓励在低代码域中进行后续工作。
translated by 谷歌翻译
Bridging cultures that have often been distant, Julia combines expertise from the diverse fields of computer science and computational science to create a new approach to numerical computing. Julia is designed to be easy and fast. Julia questions notions generally held as "laws of nature" by practitioners of numerical computing:1. High-level dynamic programs have to be slow, 2. One must prototype in one language and then rewrite in another language for speed or deployment, and 3. There are parts of a system for the programmer, and other parts best left untouched as they are built by the experts.We introduce the Julia programming language and its design -a dance between specialization and abstraction. Specialization allows for custom treatment. Multiple dispatch, a technique from computer science, picks the right algorithm for the right circumstance. Abstraction, what good computation is really about, recognizes what remains the same after differences are stripped away. Abstractions in mathematics are captured as code through another technique from computer science, generic programming.Julia shows that one can have machine performance without sacrificing human convenience.
translated by 谷歌翻译
大型语言模型已经证明了能够在自然语言和编程语言文本上进行条件和生成的能力。这样的模型打开了多语言代码生成的可能性:代码生成模型是否可以将知识从一种语言推广到另一种语言?尽管当代代码生成模型可以生成语义上正确的Python代码,但对它们使用其他语言的能力知之甚少。我们通过提出Multipl-E来促进该主题的探索,这是自然语言到代码生成的第一个多语言平行基准。 Multipl-E扩展了HumaneVal基准(Chen等,2021),以支持另外18种编程语言,涵盖了一系列编程范式和受欢迎程度。我们在Multipl-E:Codex和Incoder上评估了两个最先进的代码生成模型。我们发现,在几种语言上,法典匹配,甚至超过了其在Python上的性能。在多型E中表示的编程语言范围使我们能够探索语言频率和语言功能对模型性能的影响。最后,将代码生成基准分配给新编程语言的多重方法既可扩展又可扩展。我们描述了一种通用方法,可以轻松地增加对新基准和语言的支持。
translated by 谷歌翻译
We present an update on the current architecture of the Zoea knowledge-based, Composable Inductive Programming system. The Zoea compiler is built using a modern variant of the black-board architecture. Zoea integrates a large number of knowledge sources that encode different aspects of programming language and software development expertise. We describe the use of synthetic test cases as a ubiquitous form of knowledge and hypothesis representation that sup-ports a variety of reasoning strategies. Some future plans are also outlined.
translated by 谷歌翻译
Despite recent success in large language model (LLM) reasoning, LLMs still struggle with hierarchical multi-step reasoning like generating complex programs. In these cases, humans often start with a high-level algorithmic design and implement each part gradually. We introduce Parsel, a framework enabling automatic implementation and validation of complex algorithms with code LLMs, based on hierarchical function descriptions in natural language. Parsel can be used across domains requiring hierarchical reasoning, e.g. code synthesis, theorem proving, and robotic planning. We demonstrate Parsel's capabilities by using it to generate complex programs that cannot currently be automatically implemented from one description and backtranslating Python programs in the APPS dataset. Beyond modeling capabilities, Parsel allows problem-solving with high-level algorithmic designs, benefiting both students and professional programmers.
translated by 谷歌翻译
行为树(BT)是一种在自主代理中(例如机器人或计算机游戏中的虚拟实体)之间在不同任务之间进行切换的方法。 BT是创建模块化和反应性的复杂系统的一种非常有效的方法。这些属性在许多应用中至关重要,这导致BT从计算机游戏编程到AI和机器人技术的许多分支。在本书中,我们将首先对BTS进行介绍,然后我们描述BTS与早期切换结构的关系,并且在许多情况下如何概括。然后,这些想法被用作一套高效且易于使用的设计原理的基础。安全性,鲁棒性和效率等属性对于自主系统很重要,我们描述了一套使用BTS的状态空间描述正式分析这些系统的工具。借助新的分析工具,我们可以对BTS如何推广早期方法的形式形式化。我们还显示了BTS在自动化计划和机器学习中的使用。最后,我们描述了一组扩展的工具,以捕获随机BT的行为,其中动作的结果由概率描述。这些工具可以计算成功概率和完成时间。
translated by 谷歌翻译
This paper introduces corpus-guided top-down synthesis as a mechanism for synthesizing library functions that capture common functionality from a corpus of programs in a domain specific language (DSL). The algorithm builds abstractions directly from initial DSL primitives, using syntactic pattern matching of intermediate abstractions to intelligently prune the search space and guide the algorithm towards abstractions that maximally capture shared structures in the corpus. We present an implementation of the approach in a tool called Stitch and evaluate it against the state-of-the-art deductive library learning algorithm from DreamCoder. Our evaluation shows that Stitch is 3-4 orders of magnitude faster and uses 2 orders of magnitude less memory while maintaining comparable or better library quality (as measured by compressivity). We also demonstrate Stitch's scalability on corpora containing hundreds of complex programs that are intractable with prior deductive approaches and show empirically that it is robust to terminating the search procedure early -- further allowing it to scale to challenging datasets by means of early stopping.
translated by 谷歌翻译
We present a self-learning approach for synthesizing programs from integer sequences. Our method relies on a tree search guided by a learned policy. Our system is tested on the On-Line Encyclopedia of Integer Sequences. There, it discovers, on its own, solutions for 27987 sequences starting from basic operators and without human-written training examples.
translated by 谷歌翻译
本文探讨了培训来生成代码的大型语言模型(LLMS)可以极大地提高对基因编程(GP)应用程序的突变操作员的有效性。由于此类LLM受益于包括顺序更改和修改的训练数据,因此它们可以近似人类会做出的可能变化。为了强调通过大型模型(ELM)的这种进化的含义的广度,在主要实验ELM与MAP-ELITE结合产生了数十万个Python程序的功能示例,这些示例在Sodarace域中输出了在Sodarace域中运行AMBULE的机器人,原始LLM从未在预训练中见过。然后,这些示例有助于引导培训一种新的条件语言模型,该模型可以为特定地形输出合适的步行者。引导新模型可以在以前可用的零培训数据中为给定上下文中输出适当的工件的新模型具有对开放性,深度学习和增强学习的影响。在这里深入探讨了这些含义,以期激发榆树现在打开的新研究方向。
translated by 谷歌翻译
我们在HOL4互动定理证明书的顶部实施了自动战术证据Tacticeoe。Tactice从人类证据中学习,数学技术适用于每个证明情况。然后在蒙特卡罗树搜索算法中使用这种知识来探索有前途的策略级证明路径。在一个CPU上,时间限制为60秒,Tactictoe在Hol4的标准图书馆中证明了7164定理的66.4%,而自动调度的电子箴言解决了34.5%。通过结合Tactice和电子证明者的结果,成功率上升至69.0%。
translated by 谷歌翻译
归纳逻辑编程(ILP)是一种机器学习的形式。ILP的目标是诱导推广培训示例的假设(一组逻辑规则)。随着ILP转30,我们提供了对该领域的新介绍。我们介绍了必要的逻辑符号和主要学习环境;描述ILP系统的构建块;比较几个维度的几个系统;描述四个系统(Aleph,Tilde,Aspal和Metagol);突出关键应用领域;最后,总结了未来研究的当前限制和方向。
translated by 谷歌翻译
我们将知识驱动的程序合成(KDP)作为程序综合任务的变体进行了介绍,该任务需要代理来解决一系列程序合成问题。在KDP中,代理应使用早期问题中的知识来解决后期问题。我们提出了一种基于PushGP的新方法来解决KDPS问题,该问题将子程序作为知识。所提出的方法通过偶数分区(EP)方法从先前解决的问题的解中提取子程序,并使用这些子程序使用自适应替换突变(ARM)来解决即将到来的编程任务。我们称此方法PushGP+EP+ARM。使用PushGP+EP+ARM,在知识提取和利用过程中不需要人类的努力。我们将提出的方法与PushGP进行比较,以及使用人手动提取的子程序的方法。与PushGP相比,我们的PushGP+EP+ARM可以实现更好的火车错误,成功计数和更快的收敛速度。此外,当连续解决六个程序合成问题的序列时,我们证明了PushGP+EP+组的优势。
translated by 谷歌翻译