Cost-guided bottom-up search (BUS) algorithms use a cost function to guide the search to solve program synthesis tasks. In this paper, we show that current state-of-the-art cost-guided BUS algorithms suffer from a common problem: they can lose useful information given by the model and fail to perform the search in a best-first order according to a cost function. We introduce a novel best-first bottom-up search algorithm, which we call Bee Search, that does not suffer information loss and is able to perform cost-guided bottom-up synthesis in a best-first manner. Importantly, Bee Search performs best-first search with respect to the generation of programs, i.e., it does not even create in memory programs that are more expensive than the solution program. It attains best-first ordering with respect to generation by performing a search in an abstract space of program costs. We also introduce a new cost function that better uses the information provided by an existing cost model. Empirical results on string manipulation and bit-vector tasks show that Bee Search can outperform existing cost-guided BUS approaches when employing more complex domain-specific languages (DSLs); Bee Search and previous approaches perform equally well with simpler DSLs. Furthermore, our new cost function with Bee Search outperforms previous cost functions on string manipulation tasks.
翻译:代价引导的自底向上搜索(BUS)算法利用代价函数指导搜索以完成程序合成任务。本文表明,当前最先进的代价引导BUS算法存在一个共性问题:它们会丢失模型提供的有效信息,无法根据代价函数按最佳优先顺序执行搜索。我们提出一种新颖的最佳优先自底向上搜索算法——Bee Search,该算法不会丢失信息,且能按最佳优先方式执行代价引导的自底向上合成。重要的是,Bee Search在程序生成层面实现最佳优先搜索,即它甚至不会在内存中创建比解程序代价更高的程序。通过在程序代价的抽象空间中执行搜索,Bee Search实现了相对于程序生成的最佳优先排序。我们还引入了一种新的代价函数,能更充分地利用现有代价模型提供的信息。针对字符串操作和位向量任务的实验结果表明,当采用更复杂的领域特定语言(DSL)时,Bee Search优于现有代价引导BUS方法;而在简单DSL下,Bee Search与先前方法表现相当。此外,在字符串操作任务中,我们的新代价函数结合Bee Search的表现超越了以往的代价函数。