我想知道是否有人知道在我的情况下可以使用哪种算法。我已经在我的多元函数上运行了优化器,并找到了解决问题的方法,假设我的函数足够规则。我稍微扰乱了这个问题,并希望找到接近我上一个解决方案的最佳解决方案。在这种情况下是否有任何非常快速的算法,或者我应该回退到常规算法。
5 回答
If you already have an iterative optimizer (for example, based on Powell's direction set method, or CG), why don't you use your initial solution as a starting point for the next run of your optimizer?
EDIT: due to your comment: if calculating the Jacobian or the Hessian matrix gives you performance problems, try BFGS (http://en.wikipedia.org/wiki/BFGS_method), it avoids calculation of the Hessian completely; here http://www.alglib.net/optimization/lbfgs.php you find a (free-for-non-commercial) implementation of BFGS. A good description of the details you will here.
And don't expect to get anything from finding your initial solution with a less sophisticated algorithm.
So this is all about unconstrained optimization. If you need information about constrained optimization, I suggest you google for "SQP".
我们可能需要更多关于您的问题的信息;但既然你知道你接近正确的解决方案,而且如果导数很容易计算,Newton-Raphson是一个明智的选择,如果不是,Conjugate-Gradien t 可能是有意义的。
如果您有一个好的初始猜测,则每个最小化算法都会表现得更好(阅读:完全执行)。在您的情况下,扰动问题的初始猜测将是非扰动问题的最小点。
然后,您必须指定您的要求:您想要速度。你想要什么精度?空间效率重要吗?最重要的是:你有什么信息:只有函数的值,还是你也有导数(可能是二阶导数)?
关于这个问题的一些背景也会有所帮助。寻找一个已经离散化的平滑函数与寻找数百个不相关的参数会有很大的不同。
全局信息(即函数是凸函数,是否有保证的全局最小值或许多局部最小值等)现在可以放在一边。如果您无法找到扰动问题的最小点,那么您将不得不对此进行调查。
回答这些问题将使我们能够选择特定的算法。多元优化有很多选择(和权衡)。
此外,哪个更快将在很大程度上取决于问题(而不是算法),并且应该通过实验来确定。
以为我对以这种能力使用计算机知之甚少,我记得一篇文章使用神经进化技术相对有效地找到“最佳拟合”方程,给定已知的函数复杂度(线性、N 次多项式、指数、对数等) ) 和一组点图。我记得它是我们现在所知的计算神经进化的最早用途之一。因为方程的函数复杂性(以及项数)是已知且固定的,所以可以使用静态神经网络并用最接近的值播种,然后“变异”并测试适合度,使用启发式方法使新网络更接近现有的具有高适应度的网。使用多线程,可以并行创建、测试和评估许多网络。