基于搜索的代码模板泛化与优化
1. 进化算法新世代创建
新世代的创建仅通过选择和变异过程完成。具体步骤如下:
- 选择集创建 :在当前世代中进行 S 次锦标赛选择(S 由用户指定)来创建选择集。锦标赛选择是从当前世代中随机挑选 R 个组(R 由用户指定),然后返回这 R 个组中适应度最佳的模板组。
- 变异集创建 :通过锦标赛选择选出 M 个模板组(M 由用户指定),然后对每个组应用变异算子。具体操作是先在模板组的某个模板中随机选择一个主题节点,接着从给定的算子中随机选择一个变异算子,再随机选择操作数的值。多数算子使用元变量作为操作数,操作数的值可以是模板组中已有的元变量,也可以是新生成的元变量。
- 新世代生成条件 :变异后的模板组要成为下一代的一部分,需满足两个条件。一是其适应度值不能为零,因为适应度为零通常表示该变异体不会产生任何匹配,不太可能引导搜索过程朝正确方向进行;二是新一代不能包含之前世代中已出现过的变异体,这通过历史集进行检查。最后,将选择集和变异集连接起来形成新的一代,进化算法(EA)可以继续进入下一代,或者在找到解决方案时停止。
2. 适应度函数
我们使用单目标 EA,目标是优化单一的适应度值。适应度值是一个范围在 [0, 1] 之间的实数,值越高越好。适应度函数用于计算模板组的适应度,它以模板组 t 和一组期望匹配 m 作为输入,由 F1 分数和部分分数组成,每个部分都有用户指定的权重(W1 和 W2)。
- F1 分数 :是适应度值的主要组成部分,范围在 [0,
超级会员免费看
订阅专栏 解锁全文
1827

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



