您说直到运行小波变换后您才知道错误,但这很好。您只需为 GA 生成的每个个体运行小波变换。那些错误率较低的人被认为更健康,更有可能存活下来。这可能非常缓慢,但至少在概念上,这就是想法。
让我们定义一个包含一对编码值的 Chromosome 数据类型,一个用于频率,另一个用于阻尼参数。现在不要太担心它们的编码方式,只要你愿意,假设它是一个由两个双精度数组成的数组。重要的是你有办法从染色体中取出值。现在,我只是通过名称来引用它们,但您可以将它们表示为二进制,作为双精度数组等。染色体类型的另一个成员是存储其适应度的双精度。
我们显然可以生成随机频率和阻尼值,所以让我们创建 100 条随机染色体。我们还不知道如何设置他们的适应度,但这很好。一开始只需将其设置为零。要设置真正的适应度值,我们必须为 100 个参数设置中的每一个运行一次小波变换。
for Chromosome chr in population
chr.fitness = run_wavelet_transform(chr.frequency, chr.damping)
end
现在我们有 100 个可能的小波变换,每个都有一个计算误差,存储在我们的集合中population
。剩下的就是选择种群中更健康的成员,进行繁殖,并让种群中更健康的成员和后代存活到下一代。
while not done
offspring = new_population()
while count(offspring) < N
parent1, parent2 = select_parents(population)
child1, child2 = do_crossover(parent1, parent2)
mutate(child1)
mutate(child2)
child1.fitness = run_wavelet_transform(child1.frequency, child1.damping)
child2.fitness = run_wavelet_transform(child2.frequency, child2.damping)
offspring.add(child1)
offspring.add(child2)
end while
population = merge(population, offspring)
end while
有很多不同的方法可以执行各个步骤,例如select_parents
、do_crossover
、mutate
和merge
这里 ,但 GA 的基本结构几乎保持不变。你只需要为每个新的后代运行一个全新的小波分解。