Contemporary genetic programming (GP) systems for general program synthesis have been primarily concerned with evolving programs that can manipulate values from a standard set of primitive data types and simple indexed data structures. In contrast, human programmers do not limit themselves to a small finite set of data types and use polymorphism to express an unbounded number of types including nested data structures, product types, and generic functions. Code-building Genetic Programming (CBGP) is a recently introduced method that compiles type-safe programs from linear genomes using stack-based compilation and a formal type system. Although prior work with CBGP has shown initial demonstrations of polymorphism inside evolved programs, we have provided a deeper exploration of these capabilities through the evolution of programs which make use of generic data types such as key-value maps, tuples, and sets, as well as higher order functions and functions with polymorphic type signatures. In our experiments, CBGP is able to solve problems with all of these properties, where every other GP system that we know of has restrictions that make it unable to even consider problems with these properties. This demonstration provides a significant step towards fully aligning the expressiveness of GP to real world programming.
翻译:当代用于通用程序综合的遗传编程(GP)系统主要关注于演化能够操作标准原始数据类型集合及简单索引数据结构的程序。相比之下,人类程序员并不局限于有限的小型数据类型集合,而是通过多态性来表达无限数量的类型,包括嵌套数据结构、乘积类型和泛型函数。代码构建遗传编程(CBGP)是一种近期引入的方法,它通过基于栈的编译和形式化类型系统,从线性基因组编译出类型安全的程序。尽管先前关于CBGP的研究已初步展示了演化程序中多态性的应用,但本文通过演化利用泛型数据类型(如键值映射、元组和集合)、高阶函数以及具有多态类型签名的函数,对这些能力进行了更深入的探索。在我们的实验中,CBGP能够解决具备所有这些特性的问题,而我们所知的每种其他GP系统均因自身限制而甚至无法考虑这些问题。这一成果标志着向将GP的表达能力与现实世界编程完全对齐迈出了重要一步。