Java 为什么每个溶液(或基因型)有一个以上的染色体?

Java 为什么每个溶液(或基因型)有一个以上的染色体?,java,genetic-algorithm,jenetics,Java,Genetic Algorithm,Jenetics,我正在尝试开始使用Jenetics JAVA库进行遗传算法,但从我有限的遗传算法背景来看,有些东西我并不理解 据我所知,GA生成了一个由m元素组成的数组总体,其中每个数组都是要评估的潜在解决方案,一旦评估,潜在解决方案将被排序,并选择最佳方案来创建新的总体,等等。但我发现一个解决方案(基因型)在Jenetics中是一个数组列表,其中每个数组都是我所理解的潜在解决方案,而且每个数组都可以有不同的长度,我不明白为什么要使用这个结构而不是一个基因载体 见第6页,第3.1.3节 如果可能的话,我想知道这

我正在尝试开始使用Jenetics JAVA库进行遗传算法,但从我有限的遗传算法背景来看,有些东西我并不理解

据我所知,GA生成了一个由
m
元素组成的数组总体,其中每个数组都是要评估的潜在解决方案,一旦评估,潜在解决方案将被排序,并选择最佳方案来创建新的总体,等等。但我发现一个解决方案(基因型)在Jenetics中是一个数组列表,其中每个数组都是我所理解的潜在解决方案,而且每个数组都可以有不同的长度,我不明白为什么要使用这个结构而不是一个基因载体

见第6页,第3.1.3节


如果可能的话,我想知道这是为什么。我希望把这个问题讲清楚。

你所描述的是基本遗传算法中的种群。有许多技术可以改进它,其中之一就是自适应编码

你要寻找的术语是自适应编码技术下的(修改的)基因库重组

基因池重组在整个种群而不是单个单元上运行,并进化种群。它可能保持或不保持相同的结构

从生物学的角度来看这个观点:

  • 在自然界中,首先是简单的生物,然后进化成更复杂的生物
同样的动机也可以用于遗传算法。在begging阶段,有一些更简单的单位可以随时间演化——换句话说,解的长度和结构不必是常数

没有简单的方法来为GA通用编码信息,所以你必须考虑到手头的每一个问题。您可能需要也可能不需要基因库重组、基本二进制编码或基本比例选择。这些选项在很大程度上取决于您试图解决的问题,以及可接受的算法的解决精度/时间

表示基因载体的基本二进制编码很简单,但遗传算法的缺点是在寻找最近邻时效率低下

考虑以下示例:

  • 有解决方案15和16(01111110000)

  • 这两个数字之间的汉明距离是5

要使GA从15更改为16,所有5位都应更改。因此,遗传算法在邻域离散数方面存在问题。改善这一点的一种方法是使用格雷码,它使所有溶液之间的距离为1。

在人群中收集潜在溶液(表型/基因型)的“数组”。基因型代表了一种可能的解决方案。不要被基因型的二维结构所迷惑,它应该为你建模更复杂的问题提供额外的灵活性。基因型仍然代表一种可能的解决方案和群体中的一个个体

可以轻松创建经典二进制GA的基因型:

Genotype<BitGene> gt = Genotpe.of(BitChromosome.of(15));
基因型gt=of(15)的双染色体的基因型;
还可以查看域模型,如中的图3.1所示。第6.1节尝试为您提供其他编码示例


你的意思是,突然一个候选解决方案可以有更多的基因?是的,整个群体可以进化到有更多的基因。