我模拟朱莉娅不断变化的人口。在我的代码中的某处,我随机抽样(由个人的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
是由type
true/false
是否有更高性能(更快)的方式来模拟复制?
我的主要疑问是当deepcopy
数据超出deepcopy
所需数据时。有些Individuals
只会被采样一次,所以我不需要deepcopy
它们。我是否应该深入复制,然后在NewPopulation
中搜索多个副本以便deepcopy
他们?你觉得我会抽空吗?有更快的解决方案吗?此外,我可能有更好的替代方式来个人采样。
答案 0 :(得分:3)
据推测,如果不同的副本稍后会以不同的方式发生变异,您只需要复制。如果只有繁殖和选择没有突变,那么对“复制”个体的引用就足够了。
FYI deepcopy
(目前在julia版本中)缓慢;如果您需要性能,则应为您的类型编写特定的copy
方法。
答案 1 :(得分:2)
虽然你可能只用deepcopy
多次采样的时间来获得一些时间,但我相当确定这不会是算法的缓慢部分(我' d期待它成为健身评价函数。)
此外,它确实取决于Individual
的确切含义。如果所有字段本身只是immutables
,就像花车一样,那么也可以Individual
immutable
。如果它有字段,例如Matrix{Float64}
,这不起作用,需要deepcopy
。