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

| 由于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算法,例如拒绝所有不满足我的约束的中间解决方案? (猜测不会做到这一点,但仍然值得询问)     
已邀请:
Levenberg-Marquardt方法有一些修改,增加了对不平等约束的支持。我知道一个实现这种算法的库: levmar(GPL)。 如果您想修改现有算法,则拒绝不良解决方案将不会成功,优化可能会陷入困境。但是您可以进行变量替换,例如为了确保X> 0.1,您可以使用t ^ 2 + 0.1代替X。 我将这种方法用作解决方案,以解决程序中缺少内置框约束的问题。这是彼得·甘斯(Peter Gans)引用的《化学科学数据拟合》一书中的一句话,描述得更好: https://github.com/wojdyr/fityk/wiki/InequalityConstraints     
我们发现OPTIF9和UNCMIN是选择的标准方法。 您应该能够将它们链接到库中,并通过C ++进行调用, 如果您不想麻烦编译Fortran。 限制搜索空间的一种方法是转换参数,例如通过logit函数。     
您是否研究过Microsoft Solver Foundation?速成版是免费的,并带有.NET 4.0 dll。我发现它相当容易使用。另一方面,我不知道您说的问题有多大:Express Edition中的变量数量有一些限制。     

要回复问题请先登录注册