最小化缓慢,嘈杂,没有明确定义的目标函数

时间:2011-12-12 01:37:54

标签: python mathematical-optimization

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

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

可以通过串行线对滤波器进行编程,可以通过串行线测量其他器件的性能。

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

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

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

这很慢

要对滤波器进行编程大约需要1.5秒,要获取数据来测量滤波器的良好性大约需要6s。总而言之,每个函数调用接近8秒。换句话说,只召唤500次就需要一个多小时。即使加快通信和计算速度也可能不会改变一个数量级。

定义不明确

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

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

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

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

特许权

从好的方面来看,在整个优化空间(我已经确认确实存在全局最小值)上绘制函数(大大平均),表明事物实际上相当平滑,最小值不是太尖锐了。另一个好的方面是,度量只需要优化为两个或三个有效数字。如果它不是那么慢,那么优化就很容易。

我已经开始查看minimisation routines in SciPy了,但由于许多参数都没有记录或相互依赖,所以在黑暗中有点散步(每个步骤需要几个小时)。

令我感到震惊的是,我真正需要的是一种已知在最少数量的函数调用中工作的优化算法;虽然可能还有另一种我没有考虑过的方法。

3 个答案:

答案 0 :(得分:3)

软件包scikit-optimize(skopt)专为此设置而设计:缓慢,嘈杂的目标函数。它使用高斯过程来模拟目标函数,并在不确定的评估点(改进模型)和可能是好的点之间切换。他们的例子使用~100次评估来恢复最小值。甚至还有一个针对物理实验的界面,它提出试验值,运行实验,提供结果,并提出更多的试验值。

答案 1 :(得分:2)

我认为这是Metropolis optimization的合理用例。这是马尔可夫链蒙特卡罗的早期示例之一,可以或多或少地应用于您的用例。

在每个步骤中,您在参数空间中建议一个随机步骤,并将适应度定义为exp(-(1/thing_to_minimize))。接受健身增长的任何建议步骤和其他随机分数current_fitness/previous_fitness。在运行一段时间后,简单的开始平均参数空间中的位置。

您可以通过将平均步长减小为时间的函数来添加模拟退火方面,以获得额外的褶边。


我已经在Stack Overflow a few times before上写过这个,但你会在Software to Tune/Calibrate Properties for Heuristic Algorithms找到我最完整的描述。

答案 2 :(得分:0)

这不是一个解决方案,而是一个需要考虑的东西。我会使用类似下面的过程:使用N个样本近似函数,根据近似值选择一个新点,并迭代:我在具有大量参数的噪声数据上使用了类似的技术。继承人更多细节

  • 使用N值近似函数(可能以某种方式加权)。一些选项是:

    • RANSAC
    • 最小二乘逼近
    • 最大可能性估算器

    您选择的那个取决于您对错误行为的期望。

  • 根据近似函数选择一个新的样本位置并移动该值 进入N,抛出其他N分之一。有几种方法可以做到这一点。它部分取决于您选择的近似函数。一些选项包括:

    • 只需跳到近似函数的最小值。
    • 最陡下降的一步(缓慢但具有良好的收敛特性)
    • 共轭梯度的一步(更好的收敛速度,但并不总是收敛)。

    还有很多其他选择。

    你如何抛弃其中一个N分也值得辩论。选项可能是:

    • 随意一个
    • 最旧
    • 距离最新样本最远
    • 离“最佳”点最远
    • 最接近近似模型的人。