遗传编程用于程序修复的改进交叉算子
1. 引言
软件维护成本高昂,通常远高于初始开发成本,据估计,维护成本可占软件生命周期成本的 70%。为降低这些成本,基于搜索的软件工程技术应运而生,其中遗传编程等元启发式搜索技术被用于自动进化程序修复方案,以改进或降低修复错误的成本。其目标是探索潜在程序改进的解决方案空间,寻找对输入程序的修改,例如在不降低其他功能的情况下修复错误。
在这个领域,一个重要的研究创新是将候选解决方案表示为小的编辑程序,即对原始程序的补丁。与早期采用传统基于树的程序表示方法不同,基于补丁的表示方法在错误修复领域具有显著的可扩展性和表达能力优势,目前已广泛应用于遗传改进领域。
然而,当前补丁表示的方式存在问题。以 GenProg 为例,它是一种基于遗传编程的程序修复方法,其补丁表示由高粒度的编辑操作组成,每个编辑操作包含编辑操作符、故障位置和修复语句,这种高粒度的表示方式限制了搜索能力,使得交叉操作难以识别、重组和传播形成健康适应度景观核心的小的低阶构建块。因此,我们推测这可能是现有进化程序改进技术在寻找多编辑补丁方面表现不佳的原因之一。
为了解决这个问题,我们提出了一种新的基于补丁的进化程序改进表示方法,特别是用于交叉操作,以实现更小粒度的表示,同时不显著损失可扩展性。我们的总体假设是,这种新的表示方法和相关的交叉算子能够有效地遍历和重组程序改进问题实际子空间的信息,从而提高性能。本文的主要贡献包括:
- 明确考虑模式理论对程序修复遗传编程的影响。
- 提出一种专门用于交叉操作的新表示方法,实现修复子空间之间的遍历和重组。
- 提出六个新的交叉算子,更有效地探索搜索空间。
- 通过实验证明修复效果的改进。
超级会员免费看
订阅专栏 解锁全文
744

被折叠的 条评论
为什么被折叠?



