草庐IT

非梯度类启发式搜索算法:Nelder Mead

算法介绍Hello,今天给大家介绍一种不基于梯度的优化算法NelderMead。NelderMead 算法通常是用来求解非线性(nonlinear)、导函数未知情况下目标函数的最大值或者最小值。学过梯度下降的同学应该知道,梯度下降类算法的每一步都需要计算当前位置的梯度,从而更新当前解使得最终逐渐逼近最优解。但在某一些情况下,目标函数的梯度难以求得或是函数值离散的情况下,这时候便无法直接使用梯度类算法来求解了。NelderMead算法的思想十分简单,它本质上是受空间中Simplex各个顶点之间关系所启发而迭代优化的一类算法。在经过多次迭代后,算法逐渐收敛到最优解。NelderMead是说,我既然

java - 预计算大型值表

我的程序中有一个数学公式,它接受两个介于0和1之间的值,并且需要做大量工作才能找到答案。我也希望能够做相反的事情,即我想知道什么输入值会产生特定的输出。我无法通过分析来做到这一点,因为可以从大量输入中得出相同的答案,而且公式太复杂了。我的问题是我目前正在做这样的事情,这需要相当长的时间来计算for(doublei=0;i鉴于公式是静态的,我当然可以预先计算这些值。我认为查找一个值比执行许多计算要快得多。我以前从来没有做过这样的事情。有谁知道要使用什么数据结构/如何索引/如何存储结果?目前我唯一的想法是我可以以某种方式对答案进行排序以减少搜索空间,或者只是在运行时初始化一个巨大的数组。如

c++ - boost 库中的 Nelder-Mead 算法

我想知道Nelder-Mead算法是否在c++boost库中实现,例如toms748_solve。我在文档中找不到它,在我自己实现代码之前我会问你。非常感谢。 最佳答案 我发现变形虫(Nelder-Meadedownhillsimplex)算法是由vnl库(http://public.kitware.com/vxl/doc/release/core/vnl/html/classvnl__amoeba.html#details)实现的,所以我打算使用这个库而不是boost。我知道我一直在使用boost::math库寻找这个算法的实现,