【问题标题】:Can I run a GA to optimize wavelet transform?我可以运行 GA 来优化小波变换吗?
【发布时间】:2013-09-03 04:34:22
【问题描述】:

我正在运行小波变换 (cmor) 来估计信号中存在的阻尼和频率。cmor 有 2 个参数,我可以更改它们以获得更准确的结果。中心频率(Fc)和带宽频率(Fb)。如果我构造一个频率和阻尼很少的信号,那么我可以测量我的估计误差(图 2)。但在实际情况下,我有一个信号,但我不知道它的频率和阻尼,所以我无法测量误差。所以这里的一位朋友建议我重建信号并通过测量原始信号和重建信号之间的差异来找到误差信号 e(t)=|x(t)-x^(t)|。 所以我的问题是:
有谁知道一个更好的函数来找到重建信号和原始信号之间的误差,而不是 e(t)=|x(t)−x^(t)|。
我可以使用 GA 搜索 Fb 和 Fc 吗?或者你知道更好的搜索方法吗?
Hope this picture shows what I mean, the actual case is last one. others are for explanations

提前致谢

【问题讨论】:

    标签: frequency genetic-algorithm wavelet


    【解决方案1】:

    您说直到运行小波变换后您才知道错误,但这很好。您只需为 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_parentsdo_crossovermutatemerge,但 GA 的基本结构几乎保持不变。您只需为每个新后代运行全新的小波分解。

    【讨论】:

    • 感谢您的回答。我对 GA 和搜索方法知之甚少。我刚刚编辑了我的帖子以确保我的问题很清楚,请查看我的编辑,并帮助我实施 GA 或其他搜索方法。感谢负载。
    • 我觉得你朋友的想法应该没问题。 GA 所需要的只是一种说明一种解决方案优于另一种解决方案的方式,并且似乎最小化重建误差对此很好。 GA 不是唯一的选择——简单的局部搜索方法可能是有效的,模拟退火或禁忌搜索也是如此,但链接图中的整体情况对我来说是合理的。
    • 谢谢。请您解释一下这些搜索方法或介绍一些我可以研究的东西。
    • 一个简单的随机爬山者——生成一组随机参数。然后稍微改变它们。如果修改后的版本比原来的错误更低,则使用修改后的版本作为新的最佳解决方案。重复直到找不到任何改善。模拟退火是类似的,但有时允许采取非改进措施。只需谷歌“本地搜索”或其他术语......算法非常简单,您应该在那里找到很多好的信息。
    猜你喜欢
    • 2016-04-06
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多