寻找 C++ 中的优化算法来替代 Excel Solver

Ste*_*e06 5 algorithm excel optimization solver levenberg-marquardt

由于 Excel Solver 在数千次优化上运行速度相当慢(原因是它使用电子表格作为界面),我试图在 C++ 中实现类似的(特定于问题的)求解器(使用 Visual Studio 2010,在 Win 上) 7 64 位平台)。我会通过 VBA 中的 Declare 语句包含 DLL,并且已经有这样做的经验,所以这不是问题。

我的问题是最小化经验数据和非线性但平滑的目标函数之间的平方误差之和,并且问题将包括非负性(X>=0)甚至正性约束(例如X>=0.00000001) ,其中 X 表示决策变量。

我正在寻找一个强大的、经过验证的实现。它可能是已建立的图书馆的一部分。例如,我已经研究过 ALGLIB 所存储的内容(请参阅http://www.alglib.net/optimization/),并且似乎只有他们的算法之一接受有界约束。但我不知道它的价值是什么,这就是为什么我试图收集一些意见。

或者,另一方面,是否建议用这样的基本约束来增强 ALGLIB 的 Levenberg-Marquardt 算法,例如拒绝每个不满足我的约束的中间解决方案?(我猜这不会成功,但仍然值得一问)

mar*_*cin 2

Levenberg-Marquardt 方法经过修改,增加了对不等式约束的支持。我知道一个实现这种算法的库: levmar (GPL)。

如果您想修改现有算法,拒绝不好的解决方案是行不通的,优化可能会陷入困境。但您可以进行变量替换,例如,为了确保 X > 0.1,您可以使用 t^2+0.1 代替 X。我使用此方法作为程序中缺少内置框约束的解决方法。以下是 Peter Gans 的《化学科学中的数据拟合》中的一段话,它更好地描述了它: https ://github.com/wojdyr/fityk/wiki/InequalityConstraints