因为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