- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
此问题基于 another one .
我们如何有效地对由唯一元素的有序集合形成的染色体进行交叉操作?
两个这样的父染色体是 {'a','b','c','d'}
和 {'e','f','a', 'b'}
;这些 parent 的两个可能的子染色体是 {'e','f','c','d'}
和 {'a','f','c' ,'b'}
.
最佳答案
你可以尝试一种统一的交叉。
一般Uniform Crossover使用两个亲本之间的固定混合比,运算符评估亲本染色体中的每个基因以进行交换,概率为 0.5
。
使用 Python 语法:
import random
p = [['a','b','c','d'], ['e','f','a','b']] # parents
for i in range(len(p[0])):
offspring.append(p[random.randint(0, 1)][i])
鉴于唯一性约束,必须修改基本方案:
import random
p = [['a','b','c','d'], ['e','f','a','b']] # parents
for i in range(len(p[0])):
if p[1][i] in p[0]: # cannot risk crossover, keep basic gene
offspring.append(p[0][i])
else: # standard uniform crossover
offspring.append(p[random.randint(0, 1)][i])
约束“自动”满足,您有一个较小的搜索空间。
请注意,交叉在某种程度上绑定(bind)到第一个父级 (p[0]
),我们得到的变体数量有限:
CHROMOSOME FREQUENCY
abcd *************************
efcd ************************
ebcd ************************
afcd ************************
在这方面的一个小改进是:
if p[1][i] in offspring or p[1][i] in p[0][i:]:
offspring.append(p[0][i])
else:
offspring.append(p[random.randint(0, 1)][i])
和
CHROMOSOME FREQUENCY
efcd ******
afcd ************
efad ******
ebcd ************
efcb ******
efab ******
ebad ************
abcd *************************
afcb ************
但是这个“窍门”只对一些 parent 有效。例如。切换 parent :
p = [['e','f','a','b'], ['a','b','c','d']]
你又遇到了:
CHROMOSOME FREQUENCY
efcd *************************
efcb ************************
efad *************************
efab ************************
edge recombination operator是另一种可能性:
ERO creates a path that is similar to a set of existing paths (parents) by looking at the edges rather than the vertices. The main application of this is for crossover in genetic algorithms when a genotype with non-repeating gene sequences is needed such as for the travelling salesman problem.
(不确定是不是你的情况)
关于algorithm - 遗传算法 : How to do crossover on ordered collections of unique elements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861221/
目前我有以下脚本支持动态 div 内容: $("a.mbl").click(function() { var mblid = $(this).attr("id"); $("#mid-b
披露:是的,这是我的作业。 我有以下问题:我有 50 名男性、50 名女性和 50 条狗。他们每个人都有一份他最喜欢的 list 。例如,6 号女士有一个从最不喜欢到最喜欢的 50 个男人的列表,以及
我正在尝试开发一种遗传算法,该算法将找到在指定位置连接给定数量的节点的最有效方法。 网络上的所有节点都必须能够连接到服务器节点,并且网络内不能有循环。它基本上是一棵树。 我有一个函数可以测量任何给定网
我正在尝试使用以下过程从两个父数组(交叉)生成一个新的子数组。 parentArr1 = [0,1,2,3,4,5,6,7,8,9] parentArr2 = [9,8,7,6,5,4,3,2,1,0
我正在使用 Mesos 框架来运行一些作业,这似乎是学习如何制作高可用性系统的绝佳机会。为此,我正在阅读分布式系统,但我错误地访问了 wikipedia . 有问题的文章在谈论HA工程的一个原则: R
我有一个问题想用遗传算法解决。问题是选择 100 个整数的某个子集(比如 4)(这些整数只是代表其他东西的 id)。顺序无关紧要,问题的解决方案是一组整数而不是有序列表。我的适应度函数很好,但在交叉函
这在某种程度上与此question有关: 原则上,我尝试了解使用多于1种功能(如(rowwise,mutate,mean()等)的多列sum()的min()操作是如何工作的。 我了解到across可以
我有一个 Windows 命令行应用程序,必须在 Mac OSX Lion 中执行。关于这个问题我安装了Crossover。 现在的问题是我需要从 java 应用程序启动这个 Windows 应用程序
我正在按照遗传算法方法解决背包问题,如 here 所示.我知道他们使用了直接值编码方案而不是二进制表示。交叉函数如下: def cxSet(ind1, ind2): """Apply a crosso
问题是我希望能够使用 Mercurial 或 git 作为开发的前端,但在 Subversion 中进行变更集和更新,通常在集成分支或仅由脚本编写的内容中Mercurial,或者在 Hudson 注意
此问题基于 another one . 我们如何有效地对由唯一元素的有序集合形成的染色体进行交叉操作? 两个这样的父染色体是 {'a','b','c','d'} 和 {'e','f','a', 'b'
让我从我正在实现的遗传算法版本开始。对于我在这里犯的任何术语错误,我提前道歉。请随时纠正我。 我的问题的染色体是二维的。三行三十二列。本质上,等位基因(值)是该染色体包含的索引。 指数是如何制定的 染
我目前正在实现由 Kenneth Stanley 开发的 NEAT 算法,采用原始 paper作为引用。 在描述交叉方法的部分中,有一件事让我有点困惑。 因此,上图说明了 NEAT 的交叉方法。为了确
我正在用 Java 开发遗传算法,与所有算法一样,它需要两个父染色体的交叉。这些染色体可能很长,从 30 到 500 不等(但无论它们有多长,它们的大小都相同,因此如果长度为 80,则在该 GA 运行
我正在研究遗传算法实现,并且正在使用 DEAP 工具箱。 我写了一个初始化染色体的代码,它们的第一个基因是 [0.01, 2048] 范围内的浮点数,他们的第二个基因再次在 [0.0001, 10]
我是一名优秀的程序员,十分优秀!