《Java遗传算法编程》—— 1.8 参数

简介: 虽然所有的遗传算法都基于同样的概念,但它们的具体实现可以差别很大。具体实现不同的一种方式,就是通过它们的参数。一个基本的遗传算法在实现时,至少有几个参数需要考虑。主要的3个是变异率、种群规模和交叉率。

本节书摘来异步社区《Java遗传算法编程》一书中的第1章,第1.8节,作者: 【英】Lee Jacobson(雅各布森) , 【美】Burak Kanber(坎贝尔),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.8 参数

虽然所有的遗传算法都基于同样的概念,但它们的具体实现可以差别很大。具体实现不同的一种方式,就是通过它们的参数。一个基本的遗传算法在实现时,至少有几个参数需要考虑。主要的3个是变异率、种群规模和交叉率。

1.8.1 变异率

变异率是在解的染色体中,特定基因将要变异的概率。技术上,遗传算法的变异率没有正确的值,但有些变异率将比其他变异率提供好得多的结果。较高的变异率允许种群中有更多的遗传多样性,也能有助于算法避免局部最优。然而,变异率过高会导致每一代之间太多的遗传变异,导致失去以前种群中良好的解。

如果变异率太低,算法可能用过长的时间在搜索空间中移动,妨碍它找到满意解的能力。变异率过高,也可能延长它找到一个可接受的解所需的时间。虽然高变异率可以帮助遗传算法避免陷入局部最优解,但如果它被设置得太高,就可能对搜索产生负面影响。如前所述,这是由于每一代的解被变异的程度很大,在实施变异后,它们实际上随机化了。

为了理解配置良好的变异率非常重要的原因,请考虑两个二进制编码的候选方案,“100”和“101”。如果没有变异,新的解只能来自交叉。然而,如果交叉我们的解,后代只有两个可能的结果,“100”或“101”。这是因为,亲代基因组中唯一的区别就是它们的最后一位。如果后代从第一个亲代接收其最后一位,将是一个“1”,否则,如果它从第二个亲代接收,将是一个“0”。如果该算法需要找到一个替代解,就需要变异现有的解,得到基因库中没有的新基因信息。

变异率应设置为一个值,该值允许足够的多样性,以防止算法停滞不前,但这个值又不是太高,不会导致该算法失去以前的群体中有价值的遗传信息。这种平衡取决于要解决的问题的性质。

1.8.2 种群规模

种群规模就是遗传算法中任意一代种群的个体数。较大的种群规模,算法可以在搜索空间中取样更多。这将有助于将它导向更准确、全局最优解的方向。小的种群规模通常会导致该算法在搜索空间的局部最优区域发现不太理想的解,但是它们每一代需要的计算资源较少。

这里一样,就像变异率,为了遗传算法的最佳表现,需要找到一种平衡。同样,根据要解决的问题的性质,需要改变种群的规模。为了找到最佳解,山头很多的搜索空间通常需要较大的种群规模。有趣的是,选择种群规模时有一个点,超过这个点,增加规模也不会为算法提供多少改进以找到精度更好的解。相反,由于需要额外的计算来处理增加的个体,它会让执行变慢。在这个转折点附近的种群规模,通常提供了资源和结果之间的最佳平衡。

1.8.3 交叉率

应用交叉的频率也对遗传算法的整体表现有影响。更改交叉率调整了种群中的解接受交叉算子的机会。高交叉率在交叉阶段会产生许多新的、潜在优越的解。较低的交叉率有助于保持较适应个体的基因信息在下一代中不受破坏。交叉率通常应设置为合理的高低,既促进新解的搜索,又让种群的一小部分保持不受影响,进入下一代。

相关文章
|
1月前
|
存储 Java
Java-参数传值
Java-参数传值
25 4
|
1月前
|
Java
【Java每日一题】— —第二十二题:类名作参数进行方法调用的传递问题。
【Java每日一题】— —第二十二题:类名作参数进行方法调用的传递问题。
23 1
|
4月前
|
前端开发 Java 数据库连接
9:参数校验-Java Spring
9:参数校验-Java Spring
30 0
|
1月前
|
存储 Java fastjson
Java泛型-4(类型擦除后如何获取泛型参数)
Java泛型-4(类型擦除后如何获取泛型参数)
33 1
|
20天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
60 0
|
6天前
|
存储 监控 安全
泛型魔法:解码Java中的类型参数
泛型魔法:解码Java中的类型参数
26 0
泛型魔法:解码Java中的类型参数
|
1月前
|
前端开发 Java Spring
Java 新手如何使用Spring MVC 中的查询字符串和查询参数
Java 新手如何使用Spring MVC 中的查询字符串和查询参数
|
2月前
|
NoSQL Java Redis
【Java专题_09】生产环境Jvm参数设置
【Java专题_09】生产环境Jvm参数设置
|
2月前
|
Java
深入了解 Java 方法和参数的使用方法
方法是一块仅在调用时运行的代码。您可以将数据(称为参数)传递到方法中。方法用于执行特定的操作,它们也被称为函数。
104 4
|
4月前
|
Java
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
47 0