我试图使用InteriorPointSolver来解决带有线性约束的标准二次规划问题(根据可以找到的定义here)。我的问题没有线性项(定义中的“c”向量)。我在所有变量中使用SetCoefficient(Int32, Rational, Int32, Int32)来设置“Q”矩阵(将“目标”行作为vidRow传递)。假设InteriorPointSolver正在最小化二次规划问题的标准定义中定义的目标函数,我是否正确?
我问这个是因为当我自己计算x ^ T * Q * x时(使用我从求解器得到的x的最优解),我得到的值与求解器声称最优目标函数的值大不相同value是(通过Statistics.Primal或GetValue(目标))。我的计算和求解器的最佳值一致的唯一一次是当我使用Q的单位矩阵时。我猜我正在设置错误或者不能确切地理解什么函数被最小化。
我已经查阅了我能找到的所有文档,但无法找到内部点解算器最小化函数的确切解释。任何人都可以指导我朝正确的方向发展吗?
答案 0 :(得分:2)
事实证明,
SetCoefficient(goal, 2.0, x, y)
与
具有完全相同的效果SetCoefficient(goal, 2.0, y, x)
两个调用的效果是在目标函数中设置x * y项的系数,第二个调用只是覆盖在第一个调用中设置的系数。求解器不将xy项视为与yx项不同,并且不添加系数(如我所料)。因此,如果您的目标是在目标函数中使用4xy术语,则必须进行以下调用:
SetCoefficient(goal, 4.0, x, y)
而不是上面列出的两个电话。