繁殖种群。我应该“深度复制”每个人吗?
Reproducing a population. Should I `deepcopy` each individual?
我在 Julia 中模拟了一个不断发展的人口。在我的代码中的某个地方,我随机抽样(样本由个体的 fitnesses
加权)个体以形成下一代。因为可以对同一个人进行多次采样(有放回采样),所以我必须复制这些个人,而不仅仅是创建一个指向相同数据的新指针。这是代码目前的样子:
##### Reproduction ######
NewPopulation = Array(Individuals, nb_individuals_in_population)
fitnesses = WeightVec(fitnesses)
for i = 1:nb_individuals_in_population
NewPopulation[i] = deepcopy(sample(OldPopulation, fitnesses))
end
,其中 Individuals
是由两个 true/false
数组组成的 type
是否有更高效(更快速)的方式来模拟复制?
我的主要疑问是当我 deepcopy
比我需要的数据多时 deepcopy
。有些 Individuals
只会被采样一次,所以我不需要 deepcopy
它们。我不应该深拷贝,然后在 NewPopulation
中搜索多个副本的个人以便 deepcopy
他们吗?你认为我会赢得时间吗?有更快的解决方案吗?此外,除了我对个人进行抽样的方式之外,可能还有更好的选择。
虽然您可以通过 deepcopy
多次采样的那些来获得一些时间,但我相当确定这不会是您算法的缓慢部分(我希望它作为适应度评价函数)。
此外,它确实在某种程度上取决于 Individual
的确切含义。如果所有的字段本身都是 immutables
,就像浮点数一样,那么也可以使 Individual
immutable
。如果它有字段,例如Matrix{Float64}
,这是行不通的,需要 deepcopy
。
大概只有当不同的副本以后会以不同的方式发生变异时,您才需要复制。如果只是没有突变的育种和选择,那么对 "copied" 个体的引用就足够了。
仅供参考 deepcopy
(在当前的 julia 版本中)很慢;如果您需要性能,您应该为您的类型编写特定的 copy
方法。
我在 Julia 中模拟了一个不断发展的人口。在我的代码中的某个地方,我随机抽样(样本由个体的 fitnesses
加权)个体以形成下一代。因为可以对同一个人进行多次采样(有放回采样),所以我必须复制这些个人,而不仅仅是创建一个指向相同数据的新指针。这是代码目前的样子:
##### Reproduction ######
NewPopulation = Array(Individuals, nb_individuals_in_population)
fitnesses = WeightVec(fitnesses)
for i = 1:nb_individuals_in_population
NewPopulation[i] = deepcopy(sample(OldPopulation, fitnesses))
end
,其中 Individuals
是由两个 true/false
type
是否有更高效(更快速)的方式来模拟复制?
我的主要疑问是当我 deepcopy
比我需要的数据多时 deepcopy
。有些 Individuals
只会被采样一次,所以我不需要 deepcopy
它们。我不应该深拷贝,然后在 NewPopulation
中搜索多个副本的个人以便 deepcopy
他们吗?你认为我会赢得时间吗?有更快的解决方案吗?此外,除了我对个人进行抽样的方式之外,可能还有更好的选择。
虽然您可以通过 deepcopy
多次采样的那些来获得一些时间,但我相当确定这不会是您算法的缓慢部分(我希望它作为适应度评价函数)。
此外,它确实在某种程度上取决于 Individual
的确切含义。如果所有的字段本身都是 immutables
,就像浮点数一样,那么也可以使 Individual
immutable
。如果它有字段,例如Matrix{Float64}
,这是行不通的,需要 deepcopy
。
大概只有当不同的副本以后会以不同的方式发生变异时,您才需要复制。如果只是没有突变的育种和选择,那么对 "copied" 个体的引用就足够了。
仅供参考 deepcopy
(在当前的 julia 版本中)很慢;如果您需要性能,您应该为您的类型编写特定的 copy
方法。