了解 Levenberg Marquardt 枚举返回
Understanding Levenberg Marquardt enumeration returns.
>问题:我最近接到了设计非线性求解器的任务,但我的求解器没有收敛到正确的解。
**预期**:'minimize(x)'方法应该将我的参数向量x减少到最小值。
观察到:在我调用"minimize(x)"后,我得到一个状态返回,上面写着RelativeErrorTooSmall。
问题:有人可以解释一下这个枚举值是什么意思吗?
文档:关于Eigen Levenberg Marquardt类的唯一可用文档基本上是.h文件。下面是枚举列表:
enum Status {
NotStarted = -2,
Running = -1,
ImproperInputParameters = 0,
RelativeReductionTooSmall = 1,
RelativeErrorTooSmall = 2,
RelativeErrorAndReductionTooSmall = 3,
CosinusTooSmall = 4,
TooManyFunctionEvaluation = 5,
FtolTooSmall = 6,
XtolTooSmall = 7,
GtolTooSmall = 8,
UserAsked = 9
};
这是指向头文件的链接:https://eigen.tuxfamily.org/dox/unsupported/NonLinearOptimization_2LevenbergMarquardt_8h_source.html
这是前面的堆栈溢出问题,其中包含测试程序: 如何使用本征不支持的莱文堡马夸特实现?
搜索 .h 文件显示,此返回代码意味着在某个步骤中,算法无法声明成功,但在调整该步骤的参数方面进展甚微。
if (delta <= parameters.xtol * xnorm)
return LevenbergMarquardtSpace::RelativeErrorTooSmall;
术语 xnorm是由算法动态计算的。它是对参数在某种绝对意义上趋向于多大的估计。(最好将问题缩放到参数往往在绝对值上围绕统一。Parameters.xtol是一个数字,用户可以将其设置为参数的"小"差异。 典型值是机器效率的平方根。实际上,这是代码中的默认值。
假设库代码正确,收敛失败可能是由于以下任何原因:
对函数计算准确性的估计过于乐观。尝试将 Parameters.xtol 设置得更大一些。至少使用双精度。确保所有参数的比例大致相同。
这个问题没有很好的条件,这意味着黑森在参数空间的某些方向上比其他方向大得多。 确保参数缩放正确,并至少使用双精度。可能需要使用条件矩阵。这太深了,无法在这里深入讨论。
计算出的梯度不能很好地估计损失函数的梯度。如果问题条件良好,则梯度计算或损失函数计算是错误的。 根据梯度的有限差值估计来测试它们。
我拥有自己经过充分测试和超快速的求解器。 我很想和你取得联系,但SO并不热衷于此。
- 枚举进程模块在有效句柄上返回无效句柄
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 无法将返回的枚举与枚举进行比较
- 对clang、gcc和icc中开关枚举类返回的处理一致
- 如何为返回枚举元组的 C++ 函数编写 cython 包装器?
- 元编程构造,它返回枚举的基础类型和迭代器的整数
- 如何根据枚举参数返回其他类型
- 沿枚举 c++ 返回变量类型
- 使用枚举确定返回结果的类型(使用宏的黑客)
- 了解 Levenberg Marquardt 枚举返回
- 一种创建将字符串常量返回给枚举的类的廉价方法,反之亦然
- 如何定义在外部类之外返回枚举黑客的嵌入式类的方法?
- 地址数组,带有枚举的返回值
- 是否可以定义一个宏来定义枚举类和返回枚举元素计数的 GetCount() 方法
- 如何在此程序中显示返回枚举类型数据的函数
- 返回枚举,看不懂代码行
- 为什么可以将枚举作为函数变量传递,但不能返回枚举?
- c++静态结构模板方法返回枚举类型
- c++函数返回枚举
- 如何在类之外返回枚举向量