我正在尝试开始使用Jenetics JAVA库进行遗传算法,而且我从GA有限的背景中无法理解这些内容;
据我所知,GA生成一组m
元素的数组,其中每个数组都是一个待评估的潜在解决方案,一旦评估,潜在的解决方案将被排序,并选择最佳解决方案来创建新的人口但是我发现Jenetics中的解决方案(基因型)是一个数组列表,其中每个数组都是我理解的潜在解决方案,每个数组也可以有不同的长度,我不明白为什么使用这个结构而不是基因载体。
见the manual第6页,第3.1.3节。
如果可能,我想知道为什么会这样。我希望这个问题足够明确。
答案 0 :(得分:2)
"数组"在群体中收集潜在溶液(Phenotpyes /基因型)。基因型代表一种可能的解决方案。不要被基因型的二维结构所困惑,它应该为您提供额外的灵活性来建模更复杂的问题。基因型仍然代表一种可能的解决方案和人口的一个个体。
可以轻松创建经典二进制GA的基因型:
Genotype<BitGene> gt = Genotpe.of(BitChromosome.of(15));
另请参阅manual中的域模型,图3.1。第6.1节试图为您提供其他编码示例。
答案 1 :(得分:1)
您所描述的是基本遗传算法中的人口。有许多技术可以改进它,其中之一就是自适应编码。
您正在寻找的术语是在自适应编码技术下的(修饰的)基因库重组。
基因库重组在整个人口中运作,而不是单个单位并且进化人口。它可能会也可能不会保持相同的结构。
从生物学角度看这个想法:
相同的动机可以与遗传算法一起使用。在乞讨时,有更简单的单位可以随时间演变 - 换句话说,解决方案的长度和结构不必是恒定的。
没有简单的方法可以对GA的信息进行通用编码,因此您必须针对手头的每个问题考虑它。您可能需要也可能不需要基因库重组,基本二进制编码或基本比例选择。这些选项在很大程度上取决于您尝试解决的问题,以及算法所采用的解决方案/时间的精确度。
表示基因载体的基本二进制编码很简单,但GA在寻找最近邻居方面效率低下有缺点。
请考虑以下示例:
有解决方案15和16(01111,10000)
这两个数字之间的汉明距离为5
对于GA从15更改为16,应更改所有5位。因此,GA存在邻居离散数的问题。改善这种情况的一种方法是使用格雷码,让所有解决方案之间的距离为1。