再现人口。我应该对每个人进行“深度检查”吗?

时间:2015-01-28 01:39:21

标签: copy sample julia deep-copy random-sample

我模拟朱莉娅不断变化的人口。在我的代码中的某处,我随机抽样(由个人的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他们?你觉得我会抽空吗?有更快的解决方案吗?此外,我可能有更好的替代方式来个人采样。

2 个答案:

答案 0 :(得分:3)

据推测,如果不同的副本稍后会以不同的方式发生变异,您只需要复制。如果只有繁殖和选择没有突变,那么对“复制”个体的引用就足够了。

FYI deepcopy(目前在julia版本中)缓慢;如果您需要性能,则应为您的类型编写特定的copy方法。

答案 1 :(得分:2)

虽然你可能只用deepcopy多次采样的时间来获得一些时间,但我相当确定这不会是算法的缓慢部分(我' d期待它成为健身评价函数。)

此外,它确实取决于Individual的确切含义。如果所有字段本身只是immutables,就像花车一样,那么也可以Individual immutable。如果它有字段,例如Matrix{Float64},这不起作用,需要deepcopy