返回列表

6th place solution (Simulated Annealing Approach)

524. G2Net Detecting Continuous Gravitational Waves | g2net-detecting-continuous-gravitational-waves

开始: 2022-10-04 结束: 2023-01-03 物理与天文 数据算法赛
第6名解决方案 (模拟退火方法)

第6名解决方案 (模拟退火方法)

作者: Shun_PI | 比赛排名: 第6名

首先,感谢主办方并祝贺获奖者。
我很高兴能在这次比赛中赢得我的第一枚单人金牌!
我的解决方案基于模拟退火(Simulated Annealing,简称SA),这是一种常用于优化问题的技术。它不是基于机器学习/深度学习/数据生成的方法。

预处理

对 H1 和 L1 分别执行以下过程,并将结果相加,生成一张 360*256 的图像。

  • 计算振幅的平方

  • 去除水平线噪声(仅针对真实噪声)

    • 计算每一行的总和,创建一个包含 360 个元素的列表。然后对该列表进行差分。如果在短间隔内出现一系列大的正值和大的负值,则假设存在水平线噪声。然后将这些行的值替换为每一列的平均值。此操作重复进行,直到无法再操作为止。
    • 这几乎消除了所有的真实噪声,并将分数提高了约 0.005。
      • 下面是去除水平线噪声前后的一些示例图像。

  • 去除垂直条纹噪声

    • 对每一列减去均值,除以 std^2,并进行校正,使所有列的 std 总和为常数。
    • 通过除以 std 的平方而不是 std,原本方差较大的列最终的方差会变小。其思想是减少原本方差较大的列的贡献,因为它们不可靠。这种方法略微提高了分数。
  • 填补时间空隙

    • 计算时间戳的差值记为 d,并重复插入全零列 round(d / 1800 - 1) 次。
  • 在时间方向上取平均,并将列大小缩减至 256

使用 SA 进行波检测

我将解释我解决方案的核心部分:模拟退火(SA)。
首先,假设信号是完全正弦的,并遵循以下方程:

f(x) = Asin(vx+θ) + h

其中 A 是振幅,v 是频率,θ 是相位,h 是频率方向上的位置。
根据实验结果,各参数的搜索范围设定如下:

  • A: [-100, 100]。
  • v: 固定为 0.31(固定频率略微提高了分数)
  • θ: 任意实数
  • h: 任意实数

然后我们要搜索能产生最清晰波形的参数。
为此,我使用了 SA,过程如下:

  • 随着温度的降低,重复以下操作数万次。
    • 稍微改变上述参数,并计算沿波形的振幅平方和作为分数(如果引用超出图像范围则进行惩罚)。如果分数大于上一次的分数,则接受更改。即使分数小于上一次的分数,也根据分数差异和退火温度概率性地接受更改。否则拒绝更改。
  • 此外,为了防止陷入局部最优,上述整个过程重复大约几百次,并使用第 k 百分位的值(k 选在 90~100 左右)作为最终分数。
  • 在我的 CPU(Core i9-9900K)上计算所有测试数据的分数需要几个小时到一天的时间(取决于迭代次数)。
    • 对此进行后处理并提交,只需几个小时的计算即可使 LB 分数超过 0.79。

以下是一些困难测试用例的检测波形示例图像。

同比赛其他方案