如何减少用于程序归纳的类 MCTS 算法中的组合爆炸?

人工智能 蒙特卡罗树搜索 组合学 归纳编程 程序综合
2021-10-24 00:45:17

我想为程序归纳开发一个类似 MCTS(蒙特卡洛树搜索)的算法,即从示例中学习程序。

我最初的计划是让节点代表程序,并通过修改程序来搜索扩展节点。

许多这些扩展修改了单个程序:随机重新采样程序的子树,用变量替换常量等。在 MCTS 中使用这些看起来很简单。

然而,某些扩展会从头开始生成程序(例如,对新程序进行采样)。其他人使用两个或更多程序来生成单个输出程序(例如遗传编程中的交叉)。

后一种类型的移动对于普通的 MCTS 来说似乎是不标准的。

我的一个想法是从代表程序的节点切换到代表程序元组的节点。根节点将代表空元组(),只有当它们可以从头开始生成程序时才能对其应用扩展。第一次这样的扩展会产生一些程序p,所以根现在会有孩子(p). 第二次扩展将产生p,所以根现在也有孩子(p)以及这对(p,p). 即使假设一些合理的限制(例如移动最多可以使用 2 个程序,对不能有相同的元素,元素顺序无关紧要),分支因子将组合增长。

MCTS 文献(或其他文献)中的哪些技术可以减少这种组合爆炸的影响?

1个回答

我认为您可能会从 Javier Segovia 等人关于确定性环境的工作中获得一些启发。请参阅他们的论文《使用经典规划器进行广义规划的计算程序》(2019 年)。

如果您无法访问 Elsevier 的论文,我建议您查看第一作者的个人资料dblp.org从那里,您将找到指向上述出版物的会议论文的开放获取版本的链接。