基于种群年龄分层模型的线性遗传编程算法

合集下载

多目标遗传优化算法代码

多目标遗传优化算法代码

多目标遗传优化算法代码
遗传算法是一种常用的优化算法,它模拟了生物进化的过程,通过种群的进化来寻找最优解。

多目标遗传优化算法是遗传算法的一种扩展,用于解决多目标优化问题。

以下是一个简单的伪代码示例,用于说明多目标遗传优化算法的基本思想:
plaintext.
初始化种群。

计算种群中每个个体的适应度(针对多个目标)。

重复执行以下步骤直到满足终止条件:
选择父代个体。

交叉产生子代个体。

变异子代个体。

计算子代个体的适应度(针对多个目标)。

更新种群。

在实际编写多目标遗传优化算法的代码时,需要根据具体的问
题定义适应度函数、选择算子、交叉算子和变异算子等。

此外,还
需要考虑种群大小、迭代次数、交叉概率、变异概率等参数的设置。

对于具体的实现代码,可以使用Python、Java、C++等编程语
言来编写。

在实际编写代码时,需要根据具体的问题进行适当的调
整和优化,以获得更好的求解效果。

总的来说,多目标遗传优化算法是一种强大的优化工具,可以
用于解决多目标优化问题,但在实际应用中需要根据具体的问题进
行适当的调整和优化。

希望这个简单的伪代码示例能够帮助你理解
多目标遗传优化算法的基本思想。

本科毕业论文-基于遗传算法的测试用例生成方法【精品毕业设计】(完整版)

本科毕业论文-基于遗传算法的测试用例生成方法【精品毕业设计】(完整版)

摘要软件测试是保证软件质量和可靠性重要手段,在这方面发挥着其它方法不可替代的作用。

然而,软件测试是一个复杂的过程,需要耗费巨大的人力、物力和时间,约占整个软件开发成本的40%~50%。

因此,提高软件测试工具的自动化程度对于确保软件开发质量、降低软件开发成本非常重要。

而提高测试用例生成的自动化程度又是提高测试工具乃至整个测试过程自动化程度的关键所在,本文主要针对这一问题进行了研究和设计。

本文在分析软件测试和遗传算法基本概念的基础上,提出软件测试用例的设计是软件测试的难点之一。

论文提出了基于遗传算法的测试用例生成的内含是应用遗传算法来求解一组优化的测试用例,其框架包括了测试环境构造、遗传算法及测试运行环境三部分,论文给出了基于遗传算法的测试用例生成的模型。

最后以三角形分类程序为例应用遗传算法进行测试用例生成的模拟,结果显示,应用遗传算法进行测试用例生成可行。

关键词:软件测试测试用例遗传算法ABSTRACTSoftware test is the important means that guarantee software quality and reliability,and in this respect,it plays the role that other method cannot replace. However software test is a complex process , it needs to consume huge manpower,material resources and time,which takes the 40%~50% of entire software development cost approximately . Therefore,raising the automation level of software test tool is very important for ensure software development quality and reduction software development cost . And then,the most important is raising the automation level of the test case generation for raising the automation level of test tool and even entire test process,so this paper study and design mainly according to this problem.Based on the analysis of basic concepts of software testing and genetic algorithm, this article proposes that software test case design is one of the difficulties of software testing. Paper presents the inherent in software test case designing based on genetic algorithm is using genetic algorithm to solve a set of optimization test cases, and the framework includes three parts which are test environment construction, genetic algorithm and the environment for test . Paper presents the model of software test case generation based on genetic algorithm. Finally, we take the triangle categorizer as an example, simulate software test case generation based on genetic algorithm. The results display that software test case generation basing on genetic algorithm is possible.KEY WORDS: software test , test case , genetic algorithm目录摘要 (1)ABSTRACT (2)目录 (3)第一章绪论 (5)1.1 问题的提出 (5)1.2 国内外研究现状 (6)1.3 论文研究内容 (8)第二章软件测试及遗传算法基本概念 (9)2.1 软件测试基本概念 (9)2.1.1 软件测试的目的 (9)2.1.2 软件测试的原则 (9)2.2 软件测试的难点 (10)2.3 遗传算法 (11)2.3.1 遗传算法的思想及流程 (11)2.3.2 遗传算法的特点 (13)2.4本章小结 (14)第三章基于遗传算法的测试用例生成 (15)3.1基于遗传算法的测试用例生成基本内涵 (15)3.1.1 软件测试用例的基本内涵 (15)3.1.2 基于遗传算法的测试用例生成的基本内涵 (16)3.2 基于遗传算法的测试用例生成框架 (16)3.3 基于遗传算法的测试用例生成算法实现 (18)3.3.1 编码策略 (18)3.3.2 适应度函数及程序插桩 (19)3.3.3 遗传策略 (20)3.3.4 参数控制 (21)3.4 本章小结 (22)第四章实验及结果分析 (23)4.1 待测程序分析 (23)4.1.1 待测程序引入 (23)4.1.2 程序流程分析 (23)4.1.3 路径分析 (24)4.2 程序插桩 (24)4.3 参数设定及程序实现 (25)4.3.1 参数设定 (25)4.3.2 部分程序实现 (26)4.4 结果分析 (28)4.5 本章小结 (30)第五章总结与展望 (31)致谢语 (32)参考文献 (33)第一章绪论1.1 问题的提出在信息化普及的今天,计算机在人们的生活和工作中占据着重要地位,使人们的工作效率提高,也使生活更丰富多彩。

Python遗传和进化算法框架(一)Geatpy快速入门

Python遗传和进化算法框架(一)Geatpy快速入门

Python遗传和进化算法框架(⼀)Geatpy快速⼊门 Geatpy是⼀个⾼性能实⽤型的Python遗传算法⼯具箱,提供⼀个⾯向对象的进化算法框架,经过全⾯改版后,新版Geatpy2⽬前由华南农业⼤学、暨南⼤学、华南理⼯等本硕博学⽣联合团队开发及维护。

Website (including documentation):Demo :Pypi page :Contact us:Bug reports:Notice:FAQ: Geatpy提供了许多已实现的遗传和进化算法相关算⼦的库函数,如初始化种群、选择、交叉、变异、重插⼊、多⽬标优化⾮⽀配排序等,并且提供诸多已实现的进化算法模板来实现多样化的进化算法。

其执⾏效率⾼于Matlab、Java和Python编写的⼀些知名⼯具箱、平台或框架等,学习成本低、模块⾼度脱耦、扩展性⾼。

Geatpy⽀持⼆进制/格雷码编码种群、实数值种群、整数值种群、排列编码种群。

⽀持轮盘赌选择、随机抽样选择、锦标赛选择。

提供单点交叉、两点交叉、洗牌交叉、部分匹配交叉(PMX)、顺序交叉(OX)、线性重组、离散重组、中间重组等重组算⼦。

提供简单离散变异、实数值变异、整数值变异、互换变异等变异算⼦。

⽀持随机重插⼊、精英重插⼊。

⽀持awGA、rwGA、nsga2、快速⾮⽀配排序等多⽬标优化的库函数、提供进化算法框架下的常⽤进化算法模板等。

关于遗传算法、进化算法的学习资料,在官⽹中有详细讲解以及相关的学术论⽂链接。

同时⽹上也有很多资料。

闲话少说……下⾯讲⼀下怎么安装和使⽤: 先说⼀下安装⽅法: ⾸先是要windows系统,Python要是3.5,3.6或3.7版本,并且安装了pip。

只需在控制台执⾏pip install geatpy 即可安装成功。

或者到github上下载源码进⾏编译安装:。

推荐是直接⽤pip的⽅式安装。

因为这样⽅便后续的更新。

我为了⽅便运⾏demo代码以及查看源码和官⽅教程⽂档,因此另外在github上也下载了(但仍⽤pip⽅式安装)。

如何解决遗传算法中的早熟问题

如何解决遗传算法中的早熟问题

如何解决遗传算法中的早熟问题遗传算法是一种基于生物进化原理的优化算法,它通过模拟自然选择、交叉和变异等操作来搜索最优解。

然而,在实际应用中,遗传算法常常会遇到早熟问题,即算法在搜索过程中过早收敛到次优解,无法找到全局最优解。

本文将探讨如何解决遗传算法中的早熟问题。

一、引言遗传算法的核心思想是通过模拟生物进化的过程来搜索最优解。

它将问题抽象为一个个个体,使用染色体表示个体的基因信息,通过选择、交叉和变异等操作来不断优化个体的适应度。

然而,由于问题的复杂性和算法的随机性,遗传算法在搜索过程中容易陷入局部最优解,无法找到全局最优解,这就是遗传算法中的早熟问题。

二、早熟问题的原因早熟问题的主要原因有以下几点:1. 选择操作不合理:选择操作是遗传算法中的关键步骤,它决定了哪些个体将被保留下来进行繁衍。

如果选择操作过于依赖当前种群的适应度,就容易导致早熟问题。

2. 交叉操作过于保守:交叉操作是将两个个体的基因信息进行重组,产生新的个体。

如果交叉操作过于保守,只保留了父代个体的部分信息,就容易陷入局部最优解。

3. 变异操作不充分:变异操作是对个体的基因信息进行随机扰动,增加个体的多样性。

如果变异操作不充分,就无法有效地探索搜索空间,导致早熟问题的发生。

三、解决早熟问题的方法为了解决遗传算法中的早熟问题,可以采取以下几种方法:1. 多样性保持策略:为了增加种群的多样性,可以引入多样性保持策略,如精英保留、随机选择等。

精英保留策略是将适应度最高的个体直接复制到下一代,保留优秀的基因信息。

随机选择策略是随机选择一定比例的个体进行繁衍,增加种群的多样性。

2. 进化算子的优化:选择、交叉和变异是遗传算法的三个基本进化算子,对它们进行优化可以有效地解决早熟问题。

例如,可以采用非一致选择策略,使选择操作更具多样性;采用多点交叉或基于模型的交叉方法,增加交叉操作的多样性;采用自适应变异算子,根据当前种群的情况调整变异概率和变异幅度,增加变异操作的多样性。

BLUP原理与应用简介

BLUP原理与应用简介

例如:影响母牛产奶的因素有:头胎产犊年龄、产犊 季节、本身的遗传潜力、空怀天数、营养水平…… 建立模型时需要考虑所有可能的影响因素 建立线性模型是为了分析影响观察值的各因素
因子的类型
(1)根据因子的变异形式分为 因子可能是不连续变异的,或连续变异的
建模时也有时将连续变异的因素划分为等
级,例如头胎产犊年龄划为4级,即20-24、 25-28、29-32、>33月龄;
线性模型:在模型中所包含的各个因子是以相加的形式影 响观测值,即它们与观察值的关系为线性关系,但对连续 的协变量也允许出现平方或立方项
线性模型:对于参数和随机变量为线性的模型
y b0 b1 x1 b2 x2 bk xk e
其中: b0 , b1 ,, bk 为未知参数, x0 , x1 ,, xk 为影响 y 诸因素的观察值
5. BLUP法的基础

统计学意义:将观察值表示成固定效应、随机效应和 随机残差的线性组合 遗传学意义:将表型值表示成遗传效应、系统环境效 应(如畜群、年度、季节、性别等)、随机环境效应 (如窝效应、永久环境效应)和剩余效应(包括部分 遗传效应和环境效应)的线性组合

在同一个估计方程组中既完成固定效应的估
分子标记辅助选择(MAS) 或基因型辅助选择(GAS)
第二节 线性模型基础
1. 什么是模型

模型:描述观测值与影响观测值变异性的各因子 之间的关系的数学方程式
模型表达了数据的特性 反映了生物学问题的的规律 直接影响数据统计分析的效果
2. 因子及分类

因子:直接或间接影响观察值的因素


=加性遗传效应( A )+显性效应( D )+上位效应(I) +系统环境效应( ES )+随机环境效应( ER ) 加性遗传效应:可以由亲代传递给后代的遗传组分, 即育种值。 育种值:决定性状所有基因的平均效应总和 衡量个体遗传素质的最主要指标 不能被观测,只能根据表观信息(表型值)估计 育种值估计方法的效率直接关系到是否更真实地预 测个体的遗传素质 也关系到群体的遗传进展和育种效益问题

python 遗传算法求解ft06案例

python 遗传算法求解ft06案例

python 遗传算法求解ft06案例FT06问题是一个著名的优化问题,其目标是在给定一组权重的情况下,寻找一组权重和最小的权重的值。

在遗传算法中,我们使用“基因”来表示每个个体的特性,并使用“染色体”来表示个体的完整特性。

在FT06问题中,我们可以将每个个体的基因设置为一个实数,并使用一组权重来定义每个基因的重要性。

然后,我们使用遗传算法来找到一组权重和最小的染色体。

以下是一个使用Python编写的简单遗传算法求解FT06问题的示例代码:```pythonimport numpy as np定义适应度函数def fitness(chromosome):weights = (chromosome)return (weights)定义交叉函数def crossover(parent1, parent2):child = [x for x in parent1] + [x for x in parent2]return child定义变异函数def mutation(chromosome):prob = ()if prob < : 1%的概率发生变异i = (0, len(chromosome)) 随机选择一个基因chromosome[i] = 1 - chromosome[i] 翻转基因的值return chromosome初始化种群pop_size = 100 种群大小chrom_length = 10 染色体长度pop = (2, size=(pop_size, chrom_length)) 随机生成初始种群遗传算法主循环for generation in range(100): 迭代100代计算适应度值并排序种群fitness_values = [fitness(chromosome) for chromosome in pop] pop_sorted = ([pop[i] for i in (fitness_values)])选择操作:轮盘赌选择法for i in range(pop_size):if i < pop_size : 前80%的个体采用轮盘赌选择法选择fitness_values_sum = (fitness_values[:i + 1])prob = () fitness_values_sum / sum(fitness_values)j = 0while j < i and prob > sum(fitness_values[:j]):prob -= fitness_values[j]j += 1pop[i] = pop_sorted[j] 选择适应度值最高的个体else: 后20%的个体采用均匀选择法选择pop[i] = pop_sorted[(0, len(pop_sorted))]交叉操作:单点交叉法new_pop = []for i in range(int(pop_size ), pop_size): 前70%的个体不参与交叉操作parent1, parent2 = pop[(0, pop_size)], pop[(0, pop_size)]child = crossover(parent1, parent2)new_(child)new_pop += pop[:int(pop_size )] 将未参与交叉操作的个体加入新种群中pop = (new_pop) 更新种群变异操作:均匀变异法for i in range(int(pop_size )): 前10%的个体不参与变异操作chromosome = pop[(0, pop_size)]mutation(chromosome) 对染色体进行变异操作pop = ([mutation(chromosome) for chromosome in pop]) 对所有染色体进行变异操作,并更新种群```。

遗传算法和粒子群算法结合代码python

遗传算法和粒子群算法结合代码python遗传算法和粒子群算法是两种非常实用的优化算法,在实际应用中具有广泛的适用性。

在本篇文章中,我们将介绍如何将遗传算法和粒子群算法结合起来,以实现更加高效和准确的优化过程。

具体来说,我们将以python语言为基础,编写代码来实现这种结合。

1. 遗传算法遗传算法是一种类似于进化过程的优化算法,它通过模拟生物进化过程来实现优化。

基本思路是将问题的可行解按照一定的方式编码成染色体序列,然后通过交叉、变异等操作产生新的染色体,按照适应度进行筛选,最终得出最优解。

在python中,我们可以使用遗传算法库DEAP(Distributed Evolutionary Algorithms in Python)快速地实现遗传算法。

以下是一段使用DEAP库实现遗传算法的代码:```import randomfrom deap import base, creator, tools# 定义一个求最小值的适应度函数def eval_func(individual):return sum(individual),# 创建遗传算法工具箱creator.create("FitnessMin", base.Fitness, weights=(-1.0,))creator.create("Individual", list, fitness=creator.FitnessMin)toolbox = base.Toolbox()# 注册染色体初始化函数(0或1)toolbox.register("attr_bool", random.randint, 0, 1)# 定义遗传算法实现函数def ga_algorithm():pop = toolbox.population(n=50)CXPB, MUTPB, NGEN = 0.5, 0.2, 50# 迭代遗传算法for gen in range(NGEN):# 交叉offspring = tools.cxBlend(pop, alpha=0.1)# 变异for mutant in offspring:if random.random() < MUTPB:toolbox.mutate(mutant)del mutant.fitness.values# 评估适应度fits = toolbox.map(toolbox.evaluate, offspring)for fit, ind in zip(fits, offspring):ind.fitness.values = fit# 选择pop = toolbox.select(offspring + pop, k=len(pop))gen_count += 1# 输出每代最小适应度和均值fits = [ind.fitness.values[0] for ind in pop]print("第 %d 代:最小适应度 %f, 平均适应度 %f" % (gen_count, min(fits), sum(fits) / len(pop)))# 返回最优解best_ind = tools.selBest(pop, 1)[0]print("最优解:", best_ind)```上述代码中,我们首先定义了一个求最小值的适应度函数,然后使用DEAP库创建了遗传算法工具箱。

人群分析年龄分层的方法

人群分析年龄分层的方法
人群分析年龄分层的方法可以根据不同的目标和数据来源选择不同的方法,以下是几种常见的方法:
1. 固定年龄段分层:将整个人群按照固定的年龄段进行分层,例如0-18岁、19-30岁、31-45岁等。

这种方法适用于对不同年龄段人群进行整体比较和统计分析。

2. 年龄组合分层:根据具体的研究目标,将人群按照不同的年龄组合进行分层,例如儿童、青少年、中年人、老年人等。

这种方法适用于针对不同年龄组合的特征和需求进行分析。

3. 年龄分数分层:根据数据的分布情况,将人群按照不同的年龄分数进行分层,例如将人群按照年龄的百分位数进行分层,如25%分位数、50%分位数、75%分位数等。

这种方法适用于研究不同年龄段人群在特定指标上的分布情况。

4. 聚类分析:根据人群的年龄以及其他相关特征,使用聚类算法将人群划分为不同的群体。

这种方法适用于发现具有相似特征的人群群体,进而对不同群体进行分析和比较。

5. 地理分层:除了根据年龄进行分层外,还可以将人群根据地理位置进行分层,例如按照城市、省份、乡村等区划进行分层。

这种方法适用于研究不同地域下人
群的年龄特征和需求差异。

以上是一些常见的人群分析年龄分层的方法,具体选择方法应根据研究目标和数据情况进行考虑。

结合案例阐述遗传算法的具体步骤

结合案例阐述遗传算法的具体步骤遗传算法(Genetic Algorithm,GA)是一种模拟自然界中遗传进化过程的优化算法,常用于解决复杂的优化问题。

它通过模拟生物进化的过程,逐代繁衍、选择和变异,来搜索最优解。

以下是遗传算法的具体步骤,结合实际案例进行阐述。

1. 定义问题:首先,需要明确要解决的问题是什么。

例如,我们希望通过遗传算法来优化某个函数的最大值或最小值,或者进行组合优化等。

2. 确定基因表示:将问题转化为适合遗传算法处理的基因表示形式。

例如,对于优化问题,可以使用二进制编码或实数编码来表示候选解的基因。

3. 初始化种群:随机生成一定数量的个体,构成初始种群。

每个个体都代表了一个可能的解。

4. 评估适应度:对种群中的每个个体,根据问题的评价函数计算其适应度值。

适应度值用来衡量个体对问题的优劣程度。

5. 选择操作:根据个体的适应度值,使用选择算子从种群中选择一部分个体作为父代。

通常,适应度较高的个体被选中的概率较大,以增加优秀基因的传递。

6. 交叉操作:选中的父代个体按照一定的规则进行交叉操作,生成新的子代个体。

交叉操作模拟了生物遗传中的杂交过程,通过基因的组合产生新的个体。

7. 变异操作:对新生成的子代个体进行变异操作,以增加种群的多样性。

变异操作模拟了生物遗传中的基因突变过程,通过随机改变个体的基因值来引入新的解空间。

8. 评估新种群:对新生成的种群中的个体,计算其适应度值。

9. 判断停止条件:根据问题的要求或算法的收敛情况,判断是否满足停止条件。

例如,达到最大迭代次数、适应度值收敛等。

10. 进化迭代:如果未满足停止条件,则返回第5步,继续进行选择、交叉和变异操作,生成新的种群,并进行下一轮的进化迭代。

以下是一个具体的案例,以求解旅行商问题(Traveling Salesman Problem,TSP)为例进行说明。

假设有5个城市,需要找到一条最短的路径,使得每个城市只经过一次。

首先,将问题转化为遗传算法可以处理的基因表示形式,例如使用二进制编码来表示每个城市的访问顺序。

人工智能遗传算法及python代码实现

人工智能遗传算法及python代码实现人工智能遗传算法是一种基于生物遗传进化理论的启发式算法,常用于求解复杂的优化问题。

它的基本思想是通过自然选择和基因交叉等机制,在种群中不断进化出适应性更强的个体,最终找到问题的最优解。

遗传算法通常由以下几个步骤组成:1. 初始化种群:从问题空间中随机生成一组解作为初始种群。

2. 评价适应度:利用一个适应度函数来评价每个解的适应性,通常是优化问题的目标函数,如最小化代价、最大化收益等。

3. 选择操作:从种群中选择一些具有较高适应度的个体用于产生新的种群。

选择操作通常采用轮盘赌选择方法或精英选择方法。

4. 交叉操作:将两个个体的染色体进行交叉、重组,生成新的子代个体。

5. 变异操作:对新产生的子代个体随机变异一些基因,以增加种群的多样性。

6. 生成新种群:用选择、交叉和变异操作产生新的种群,并进行适应度评价。

7. 终止条件:如果达到终止条件,算法停止,否则返回步骤3。

遗传算法的优点是可以适应各种优化问题,并且求解精度较高。

但由于其需要进行大量的随机操作,因此效率相对较低,也较容易陷入局部最优解。

在实际应用中,遗传算法常与其他算法结合使用,以求得更好的结果。

以下是使用Python实现基本遗传算法的示例代码:import randomimport math# 定义适应度函数,用于评价每个个体的适应程度def fitness_func(x):return math.cos(20 * x) + math.sin(3 * x)# 执行遗传算法def genetic_algorithm(pop_size, chrom_len, pcross, pmutate, generations):# 初始化种群population = [[random.randint(0, 1) for j in range(chrom_len)] for i in range(pop_size)]# 迭代指定代数for gen in range(generations):# 评价种群中每个个体的适应度fits = [fitness_func(sum(population[i]) / (chrom_len * 1.0)) for i in range(pop_size)]# 选择操作:轮盘赌选择roulette_wheel = []for i in range(pop_size):fitness = fits[i]roulette_wheel += [i] * int(fitness * 100)parents = []for i in range(pop_size):selected = random.choice(roulette_wheel)parents.append(population[selected])# 交叉操作:单点交叉for i in range(0, pop_size, 2):if random.uniform(0, 1) < pcross:pivot = random.randint(1, chrom_len - 1)parents[i][pivot:], parents[i+1][pivot:] = parents[i+1][pivot:], parents[i][pivot:]# 变异操作:随机翻转一个基因for i in range(pop_size):for j in range(chrom_len):if random.uniform(0, 1) < pmutate:parents[i][j] = 1 - parents[i][j]# 生成新种群population = parents# 返回种群中适应度最高的个体的解fits = [fitness_func(sum(population[i]) / (chrom_len * 1.0)) for i in range(pop_size)]best = fits.index(max(fits))return sum(population[best]) / (chrom_len * 1.0)# 测试遗传算法print("Result: ", genetic_algorithm(pop_size=100, chrom_len=10, pcross=0.9, pmutate=0.1, generations=100))上述代码实现了遗传算法,以优化余弦函数和正弦函数的和在某个区间内的最大值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A g e L im it,= A G E G A P X s c h e m e ,
(1)
式 中 :A G E G A P 用 于 控 制 各 分 层 子 种 群 的 进 化 ,第
A G E G A P x (I -1)代〜第 A G E G A P x I 代 ( I 為 1),各
分层的个体(包括超龄个体)在层内进化。schenm e,
以上文献仅从增加种群多样性和控制种群膨胀 的 某 一 方 面 对 线 性 遗 传 编 程 算 法 进 行 研 究 ,但 是 增 加 种 群 的 多 样 性 会 加 重 种 群 的 膨 胀 程 度 ,而控制种 群的膨胀程度并不能保证保持种群的多样性。在线 性 遗 传 编 程 算 法 领 域 ,鲜 有 文 献 对 提 高 种 群 的 多 样 性和控制膨胀结合起来综合研究。本文在优化种群 年 龄 分 层 模 型 [16- |7]的 基 础 上 ,将 该 模 型 应 用 于 线 性 遗 传 编 程 算 法 ,用 于 减 少 算 法 早 熟 收 敛 的 发 生 频 率 , 同时控制种群的膨胀程度。
Abstract :To a lle v ia te p re m a tu re c o n v e rg en ce a n d b lo at in g e n e ra l lin e a r g en etic p ro g ra m m in g ,a m o dified lin e a r
1 线性遗传编程算法及种群年龄分层
模型
1 . 1 线性遗传编程算法
线性遗传编程算法通过锦标赛选择适应度较大 的 个 体 参 与 复 制 、交 叉 和 变 异 等 遗 传 操 作 ,以适应度 为指引逐代搜索问题的最优解。线性遗传编程算法 的 个 体 采 用 程 序 指 令 序 列 的 线 性 表 示 方 式 。设 P (g )= |Z ,,Z 2,… ,Z M | 是规模 为 M 的第 g 代 种 群 , 毛 = (:^ ,*a ,… , ' „ ) 为 种 群 的 第 I'个 个 体 ,长度为 ra, 表 示 第 〖 个体 的 第 y 行 指 令 ,线性遗传编程算 法的个体表示如下:
在 控 制 种 群 膨 胀 程 度 的 研 究 问 题 上 ,主 要 有 限 制个体的最大长度[2]、简约压力项[13-14]、双层锦标
第4期
曹 波 ,等:基于种群年龄分层模型的线性遗传编程算法
•611 •
赛和比例锦标赛[15]等 方 法 。这些方法主要通过限 制个体的长度或使种群在搜索过程中偏向长度短的 个体。
void gp (do ub le /[ 2])
| r [4]= r [2] /r [0]; ^[2]=/[〇]-r [4]; / A [ 1 ] = r [0]//[1]; r [ 4 ] = r [2] /7; r [0]= r [0]+r [4];
1 根 据 对 输 出 结 果 是 否 产 生 影 响 ,指 令 分 为 有 效 指令和无效指令(示 例 中 选 定 矸 0]作 为 个 体 的 输 出 ,第 3 行 指 令 为 无 效 指 令 )。有效指令中的运算 符 构 成 的 序 列 称 为 有 效 运 算 符 序 列 ,表 示 为 effO p (示 例 中 ,effO p = </,-,/,+>)。 1 . 2 种群年龄分层模型
种群年龄分层模型由分层规则、I 。层 (第 0 层 )
新 个 体 生 成 规 则 、个 体 年 龄 增 长 规 则 和 个 体 升 迁 规
则构 成 ,分别定义如下:
分 层 规则:种群划分为I 0〜 层 ,每层的子种
群规模为财。每 层 的 最 大 年 龄 限 制 A g e L im it,的计
算为:
在 增 加 种 群 多 样 性 的 研 究 问 题 上 ,主 要 有 增 加 结构多样性和增加语义多样性两类方法。增加结构 多 样 性 是 指 增 加 种 群 在 基 因 型 方 面 的 差 异 程 度 ,此 种方法首先定义结构距离度量个体间的差异程度, 并 在 进 化 过 程 中 增 大 个 体 间 的 结 构 距 离 ,提 高 种 群 的多样性[7-9]。增加语义多样性是指增加种群在表 现 型 方 面 的 差 异 程 度 ,并 在 进 化 过 程 中 增 大 个 体 间 的语义差异程度,以此提高种群的多样性[10-12]。
Keywords: p re m a tu re c o n v e rg e n c e ; o v e r-fittin g ; d iv e rs ity ; b lo a t; tw o -la y er to u rn a m e n t; lin e a r g en etic p ro g ram ­
第 38卷第4 期 2017年4 月
哈尔滨工程大学学报 Journal o! H arbin Engineering U niversity
Vol.38 No.4 A p r .2017
基于种群年龄分层模型的线性遗传编程算法
曹 波 ,蒋 宗 礼 ,张津丽 (北京工业大学计算机学院,北 京 100124)
早熟收敛与膨胀是线性遗传编程算法的两大问 题 。 种群进化代数越多,膨胀程度越严重,计算适应 度所需代价也越多。 一般通过增加种群多样性减少
收 基
稿 金
日 项
期 目
:2 0 1 6 - 0 2 - 2 3 .
:国家自然科学基
金项目(6113网30络03出).
版日
期 :2 0 1
7
-0
3
-
1
0
.



元模式-
每层允许的最大年龄
0
1
2
3
4
5
6
线性
1
2
3
4
5
6
7
斐波那契
1
2
3
5
8
13
21
多 项 式 ra2
1
2
4
9
16
25
49
指 数 2"
1
2
4
8
16
32
64
[ 0层 新 个 体 生 成 规 则 :在 第 A G E G A P x I 代 (I 為0),在 I 0层 随 机 生 成 新 个 体 ,用 于 填 补 原 [0层 中的个体升迁到[1层留下的空缺位置。
m in g ;g e n e tic p ro g ra m m in g ;a g e -la y e re d p o p u la tio n m o d el
线性遗传编程算法( linear genetic program m ing, L G P ) [I]是 遗 传 编 程 算 法 ( g e n e tic p ro g ra m m in g , G P ) [2]的变种算法之一,该算法继承了遗传编程算 法 的 高 度 并 行 处 理 能 力 、强 鲁 棒 性 和 全 局 搜 索 能 力 而 被 广 泛 地 应 用 于 诸 多 领 域 [3-5],并 与 其 他 智 能 优 化 算 法 [6]成 为 近 期 研 究 的 热 点 。
摘 要 : 针 对 常 规 线 性 遗 传 编 程 算 法 易 发 生 早 熟 收 敛 与 膨 胀 的 不 足 ,提 出 了 一 种 改 进 的 线 性 遗 传 编 程 算 法 — 种 群 年 龄 分 层 模 型 的 线 性 遗 传 编 程 算 法 。算 法 采 用 种 群 年 龄 分 层 模 型 对 种 群 进 行 分 层 提 高 种 群 的 整 体 多 样 性 ,并 进 一 步 采 用 双 层 錦 标 赛 提 高 各 分 层 子 种 群 局 部 的 多 样 性 ,以 种 群 多 样 性 的 提 高 减 少 算 法 早 熟 收 敛 的 发 生 频 率 ;算 法 采 用 种 群 分 层 的 方 法 限 制 长 度 较 长 个 体 的 数 量 ,从 而 减 轻 种 群 的 膨 胀 程 度 。在 5 个 符 号 回 归 基 准 函 数 进 行 测 试 的 结 果 表 明 ,所 提 方 法 能 够 有 效 减 少 早 熟 收 敛 的 发 生 频 率 ,同 时 有 效 控 制 种 群 的 膨 胀 程 度 。 关键词:早 熟 收 敛 ;过 拟 合 ;多 样 性 ;膨 胀 ;双 层 錦 标 赛 ;线 性 遗 传 编 程 算 法 ;遗 传 编 程 算 法 ;种 群 年 龄 分 层 模 型 D O I:10. 11990/jheu.201602025 网络出版地址:h t t p ://kns.c n k /kcms/detail/23.1390.u .20170310.1348.004.htm l 中图分类号:TP391 文献标志码:A 文章编号:1006-7043(2017)04-0610-07
genetic program m ing m ethod based on an age-layered population m odel is proposed. To alleviate prem ature optim i­ zation ol the p o p u latio n , we first applied an age-layered population m odel to linear genetic program m ing to im prove the integral population diversity. W e then used a tw o-layer tournam ent to im prove the sub-population diversity in each lay er, im proving the local population diversity and decreasing the occurrence rate of prem ature optim ization by increasing the diversity ol the population. To control the bloat effect ol the population, the age-layered population m odel segregated individuals into different layers based on a g e, so the quantity ol long-length individuals was lim it­ ed. The experim ental results on five sym bolic regression benchm ark functions show that the proposed m ethod can im prove population diversity to reduce prem ature convergence and effectively control bloat.
相关文档
最新文档