在C ++中寻找优化algorithm来代替Excel Solver

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

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

我正在寻找一个强大的,经过validation的实现。 它可能是已build立的图书馆的一部分。 例如,我已经研究了ALGLIB存储的内容(请参阅http://www.alglib.net/optimization/ ),似乎只有其中一个algorithm接受有界约束。 但是我不知道这是值得的,这就是为什么我要收集一些意见。

或者,另一方面,如果用这种基本约束来增加ALGLIB的Levenberg-Marquardtalgorithm是可取的,例如通过拒绝不符合我的约束条件的每个中间解决scheme? (猜测不会这样做,但仍然值得一提)

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

如果您想修改现有的algorithm,拒绝不好的解决scheme将不会执行,优化可能会卡住。 但是你可以做一个variablesreplace,例如为了确保X> 0.1,你可以使用t ^ 2 + 0.1而不是X.我使用这个方法作为解决scheme,在我的程序中缺less内置的框约束。 以下是Peter Gans 在化学科学方面数据拟合的一句话: https : //github.com/wojdyr/fityk/wiki/InequalityConstraints

我们发现OPTIF9和UNCMIN是标准的select方法。 如果不想编译Fortran,应该可以将它们链接到库中,并从C ++中调用它们。

对search空间进行限制的一种方法是转换参数,例如通过logit函数。

你有没有看过Microsoft Solver Foundation ? 快递版本是免费的,并附带.NET 4.0 DLL。 我发现它很容易使用。 另一方面,我不知道你说的是多大的一个问题:快递版本的变数有一些限制。