对于一项研究,我有一个系统(黑盒),需要一个包含 4 个值的数组形式的输入(input_array)并根据它们的值产生输出(响应)信号。

Block diagram

input_array 包含 4 个实数值(参数 P1-4),具有给定且单独的范围。输出信号的质量是通过计算其信噪比 (SNR) 来测量的。每个 input_array 变体可以每 3 秒(不超过 3 秒)应用于系统一次。

我必须找到最佳的 input_array 产生最大的 SNR(最好是在最短的时间内)。即使SNR最大化的4个实值的组合(最优解就足够了;欢迎绝对的解决方案,但不一定是必需的)。如果有助于找到解决方案,这 4 个参数可以被离散化,但它们的范围将包括数百个可能的(离散)值。

这些值可以被认为是独立的,除了它们的范围之外,没有任何先验知识可以用于它们,并且它们对 SNR 的单独影响是未知的。SNR 是受噪声影响的实际值(因此,对于相同的 input_array 连续应用,它可以具有不同(但接近)的值)。

什么解决方案可以应用于此问题?

  1. 我想到的最简单的解决方案是执行参数域的穷举搜索, ,但不适用,因为所需时间太长。

  2. 最初,我考虑申请 强化学习连续作用空间的算法,通过考虑每个参数是单独的动作,并在SNR增加/减小时返回正/负奖励(例如,+/- 1)。但是,我认为他们需要太多时间。尽管如此,我可以随时停止学习过程 input_array 产生可接受的SNR。

  3. 经过进一步的思考,这个问题似乎是一个搜索问题,所以我认为 (启发式)搜索算法 可能是合适的。

有谁知道这个问题最合适的解决方案是什么?

有帮助吗?

解决方案

看来你有一个功能 $f:\mathbb{R}^4 \到 \mathbb{R}$ 你想找到 $x$ 最大化 $f(x)$, ,但你无法计算 $f$ 直接地;您只能获得其价值的嘈杂估计。

许多 优化方法 可以适应这个设置。您可以尝试的一个简单的方法是迭代方法,例如 梯度上升 或者 牛顿法, ,但需要更多迭代来解决噪声问题;这个想法是,如果有足够的迭代次数,噪声就会趋于平均。

例如,梯度上升要求您能够计算梯度 $ abla f (x)$ 对于您选择的任何点。就您而言,这可以通过估计来完成

$$ abla f(x) = ((f(x+e_1)-f(x-e_1))/2, \dots, (f(x+e_4)-f(x-e_4))/2), $$

在哪里 $e_1=(1,0,0,0)$, $e_2=(0,1,0,0)$, , 等等。现在有了计算能力 $f$ 在您选择的一点上,通过计算 $f$ 在 8 个输入上,您可以估计 $ abla f(x)$ 然后进行单步梯度上升;并重复直到收敛。

更复杂的方法是尝试使用贝叶斯优化,例如 谷歌维齐尔.

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top