gpt4 book ai didi

python - 最小化缓慢、嘈杂、未明确定义的目标函数

转载 作者:太空狗 更新时间:2023-10-30 01:09:56 25 4
gpt4 key购买 nike

我的问题是:是否有最小化算法,最好用 Python 实现,可以对一个慢速(~1-10 秒)的函数进行操作,并从实时系统中获取数据,这不会超过几个几个小时才能完成?

我有一个 FPGA,它对一些传感器数据运行一个过滤器,并使用这个过滤器的输出来提高另一个设备的性能。我想找到最佳过滤器。我对系统建模和使用各种信号处理技术的尝试没有产生足够的结果,所以现在我将尝试在实时系统本身上解决这个问题(如果有的话,只是为了证明这样的最佳过滤器是可能的)。

可以通过串行线路对滤波器进行编程,并且可以通过串行线路测量其他设备的性能。

所以我可以构造一个函数:

  • 采用定义过滤器的参数
  • 通过串行线对过滤器进行编程
  • 通过串行线获取数据
  • 计算过滤器的好坏程度(从某种意义上说,越小越好)

这意味着我有一个函数可以用作最小化的目标。但问题是:

速度慢

对滤波器进行编程大约需要 1.5 秒,获取数据以衡量滤波器的优劣大约需要 6 秒。总而言之,每个函数调用将近 8 秒。换句话说,仅仅调用它 500 次就需要一个多小时。即使加快通信和计算速度也可能不会改变这一点。

定义不明确

(注意下面的x是我的目标函数的参数空间中的一个向量。)

简单来说,x1 == x2 并不意味着 f(x1) == f(x2)。由于系统的噪声,在其参数空间中的同一点对目标函数 f(x) 进行采样可能会由于系统的噪声而产生不同的结果。

我想到的第一件事是让目标函数实际平均几个测量值,并增加我正在运行的任何最小化例程的容差值。但在查看实际数字时,在最坏的情况下,我可以让 f(x) 的(平均)值在整个参数范围内变化 2.0,但样本标准偏差为 1.6。这意味着如果我想将标准误差 (s/sqrt(n)) 降低到 0.1,我需要测量同一个点 250 次,这使得每次测量需要 30 分钟。是的。

我可以使用一些技巧来改进这一点,比如在任何给定点以 0.25 的标准偏差在参数范围内获得 ~20 的摆动。但这些技巧在时间上还有其他权衡。

优惠

从好的方面来说,在整个优化空间(我已经这样做以确认确实存在全局最小值)上绘制函数(大大平均)表明事情实际上相当平滑并且最小值不是太尖锐了。另一个好的方面是指标只需要优化到两个或三个有效数字。如果它不是那么慢,优化它会很容易。

我已经开始查看 minimisation routines in SciPy ,但由于许多参数未记录或相互依赖,因此有点像在黑暗中行走(每一步都需要几个小时)。

令我震惊的是,我真正需要的是一种已知可以在最少的函数调用次数中工作的优化算法;尽管也许还有另一种我没有考虑过的方法。

最佳答案

包 scikit-optimize (skopt) 正是为这种设置而设计的:缓慢、嘈杂的目标函数。它使用高斯过程对目标函数建模,并在不确定的评估点(以改进模型)和可能好的点之间切换。他们的示例使用约 100 次评估来恢复最小值。甚至还有一个针对物理实验的界面,它会在其中提出试验值,您运行实验,将结果提供给它,然后它会提出更多试验值。

关于python - 最小化缓慢、嘈杂、未明确定义的目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com