遗传算法特征二进制编码代码_基于遗传算法生成数据

百度百科的解释:遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。

使用遗传算法构造数据有哪些优势:1、根据真实场景数据作为种子进行遗传变异,构造出的数据更贴近真实业务场景;2、数据的变异程度可以自行调节;3、高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地生成更多的数据。

遗传算法图解

首先,设定好了初始种群群大小。然后,我们定义了一个函数,用它来区分好样本和坏的样本。再次,我们选择出好的样本,并让他们繁殖自己的后代。最后,这些后代们从原来的样本中替代了部分坏的样本,并不断重复这一过程。遗传算法实际上就是这样工作的,也就是说,它基本上尽力地在某种程度上模拟进化的过程。关于遗传算法就不详细介绍,感兴趣可以参数https://www.jiqizhixin.com/articles/2017-08-05-2

问题的引入和解决

怎样初始化种群

数据涉及int、long、float、double、string、bool、date等类型。如果统一使用二进制的方式编码,会导致有些类型变异后无法转为原先类型。解决方案为对各种类型的数据分别初始化。

int、float型的数据使用32位二进制编码;double、long型的数据使用64位二进制编码。特别要注意如果string类型使用二进制编码进行表示,在进行变异后在转为string回乱码。string类型的编码可以使用char 字符进行表示,在变异的时候可以指定变异范围,解决变异后乱码的问题。bool类型是不适合使用遗传算法进行变异的,因为bool类型是可以使用极小的代价进行遍历的,因为bool只有true,false两种情况。date类型的数据,也是不适合直接使用二进制表示的,将date按年、月、日、时、分、秒等才分,分别通过遗传算法变异+正则表示效果会更好。

评估种群的适应度

评估方法千差万别,结合业务场景和目标涉及合适的评估方法即可。因为在测试场景,是一个找bad case的场景,即在满足输入条件的前提下,找出坏的样本,找出代码的bug。有两种方案可以选择:

方案1:将评估种群中的适应度去掉,让样本充分遗传变异,流程入下图

方案2:评估种群中的适应度,选出坏的样本进行遗传变异,流程入下图

测试样例是json array格式,一次请求涉及众多的参数并且类型还不一致应该怎样处理

我们使用的方式是启发式的分而治之方法。

1、通过递归的方式解析输入数据(因为json array的数据存在嵌套,所以要使用递归的方式进行解析),获取请求数据的key,根据key拉取历史测试数据作为种子,以map方式保存记为MAP。

2、通过递归的方式解析对每个key,在MAP中找对应的种子,要是没有找到种子使用该类型默认的数据作为种子,进行遗传变异。

String类型的数据应该如何异常变异

如果只是涉及方便枚举的数据(英文字母和数字),可以构建一个变异基因库,每次变异从基因库选一个基因替换要变异的基因。

涉及无法枚举的变异,在评估种群中的适应度加上过滤乱码的过滤功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值