Genetic algorithm 不同长度基因的交叉模式

Genetic algorithm 不同长度基因的交叉模式,genetic-algorithm,Genetic Algorithm,我有两个大小不同的基因,我想从中产生后代。染色体的位置对基因没有影响 我想知道在这种情况下通常做什么 基因1: 123456789 基因2: ABCDEFGHIJKL 我可以使用一个交叉点在每个 12345.6789 ABCD.EFGHIJKL 我有8种可能的组合 1. 12345ABCD 2. 12345EFGHIJKL 3. 6789ABCD 4. 6789EFGHIJKL 5. ABCD12345 6. ABCD6789 7. EFGHIJKL12345 8. EFGHIJKL678

我有两个大小不同的基因,我想从中产生后代。染色体的位置对基因没有影响

我想知道在这种情况下通常做什么

基因1:

123456789
基因2:

ABCDEFGHIJKL
我可以使用一个交叉点在每个

12345.6789
ABCD.EFGHIJKL
我有8种可能的组合

1. 12345ABCD
2. 12345EFGHIJKL
3. 6789ABCD
4. 6789EFGHIJKL
5. ABCD12345
6. ABCD6789
7. EFGHIJKL12345
8. EFGHIJKL6789

是否可以创建所有8个后代,或者我应该只创建1个,如果可以,我需要随机选择方法还是只选择一个并坚持使用它?

如果使用基因而不是染色体,反之亦然。
在这种情况下,如果不同大小的染色体是可以的,你可以创造所有8个后代。但是你的人口在每次迭代中都会增加,你应该控制它。例如,保留2个最好的后代或2个随机的后代,并用替换他们的父母

遗传算法是在模仿生物过程,如果我们谈论单点交叉,染色体在一个点交叉并在交叉点后交换它们的部分

如上图所示,父母在交叉点后交换染色体的“尾部”部分。因此,您只有通过交叉产生的2个子代。这就是自然中的交叉现象,生物学家是这样描述的

如果你参考任何涉及遗传算法主题的文献,他们也会声明,当使用单点交叉时,父染色体分裂为头部尾部,表示为H/T(见下面的引文):

因此,使用该杂交产生的后代将是:

123456GHI
ABCDEF789
遵循这一惯例比创建所有可能的组合,然后选择随机或最合适的后代要好得多,因为它在计算上更有效。若你们想解决更复杂的问题,你们只需简单地增加人口规模,以允许更多的多样性

单点交叉:进行一次随机切割,产生两个头部和两个尾部。然后交换两个尾部以产生 两个新个体(染色体)”

遗传算法和遗传编程: 迈克尔·阿芬策勒 瓦格纳,斯特凡 温克勒,斯蒂芬, ISBN:1584886293

或者,您可以使用多点交叉,该交叉遵循类似的约定,染色体被分割成若干部分,父母交换部分的方式是后代染色体只是父母染色体的交替,因此,如果您的父母有染色体:

A1.A2.A3.A4
B1.B2.B3.B4
|
| this will produce offspring
|
A1 B2 A3 B4
and
B1 A2 B3 A4
这个答案也可能对您有所帮助:

你的基因是什么意思?通常这些是神经网络中的系数,对于给定的神经网络拓扑,这些系数的数量是固定的。在这个阶段,它们并不意味着什么,只是概念化需要做什么。在未来的项目中,它们将是视频片段。在遗传算法中,你必须通过根据特定标准测试种群来“进化”模型,它们选择最适合的种群,并用x交叉或随机后代替换其余种群。考虑到你的基因集,你打算如何在你的模型中使用它们?我要求用户对视频进行评分,评分范围为1~5,并一直显示视频,直到我找到一致性。在本例中,我可以从2个旧视频中获得8个新视频。它们会重复出现,但在一个超过100人的群体中,这意味着最受欢迎的可能会出现得更频繁。你可以根据自己的意愿产生任意多的后代和兄弟姐妹。在你的例子中,如果我理解正确的话,你将在用户身上测试你的视频数量并给他们打分。然后,您将保留一些高分的(在此处设置阈值),并用高分的随机和/或x交叉替换所有其余的。如果没有任何视频达到接受阈值,您甚至可以替换整个人群。感谢您的输入。如果两个基因的染色体数目相同,基因的顺序也很重要,那么我就会这样做。在你的例子中(a~I是9条染色体长),1~9条染色体也是如此。但在我的例子中是不同的,每个基因可以有不同长度的染色体,一个可能有9条染色体(在我的例子中是1~9条),第二个可能有12条(A~L)。因为在我的问题中,不管某个部分是尾部还是头部,也不管“粘合”两个新部分的顺序,所以你基本上有8种可能的组合。我相信染色体的长度并不重要,即使你有不同长度的染色体,你仍然应该把它们分成H和t,然后交换t。如果我最近读到了关于它的文章,如果我找到了参考资料,我会发布,但那本教科书正是以不同的方式讨论这个问题染色体长度和静止度当进行单点交叉时,你应该交换尾部。当你将多个值编码到一条染色体上时,这很重要,因为随机交换染色体的部分可能会增加搜索时间。种群数量始终是相同的,因为这是算法的不同部分,用于跟踪种群中有多少基因。我的程序做了一些类似于
而新人口
的事情,最后,因为它可能导致溢出(因为我一次添加8个),所以我做
而新人口>target\u人口:population.pop()
A1.A2.A3.A4
B1.B2.B3.B4
|
| this will produce offspring
|
A1 B2 A3 B4
and
B1 A2 B3 A4