1

我正在尝试使用 SOSPolynomial 解决数学程序。我正在使用 Mosek 从源代码编译的 C++ 中运行 Drake。

MathematicalProgram 包含二次成本函数和一些等式约束,在Solve()不添加 SOS 多项式的情况下调用时可以正常工作。在查看时result.get_solver_id(),我发现:“Equality constrained QP”,正如预期的那样。

但是,在调用 时,在通过(作为决策变量)Solve()添加 SOS 多项式后,程序返回找不到解决方案。在查看 中找到的值时,我发现和。prog.NewSosPolynomial({t}, degree)tresult_.get_solution_result()solution_status = falserescode = 1501

这里rescode = 1501意味着:“问题包含非线性项圆锥约束。请求的操作不能应用于此类问题。”。但是,通过在添加 SOS 多项式之前检查 的值result.get_solver_id(),很明显问题中没有其他非线性约束。

我在这里遗漏了什么,还是这是一个错误?

4

1 回答 1

1

有趣的。半定规划的标准形式(由我们的 SOS 约束产生)只接受线性目标,而不接受二次目标。这不会导致失去一般性,因为您可以使用松弛变量。您可以尝试以下方法:

现在你有类似的东西

min x'Qx
s.t. Ax=b, p(t) is SOS.

你能把它写成

min a
s.t. Ax=b, p(t) is SOS, x'Qx <= a

但添加x'Qx <= a使用AddLorenzConeConstraint?(注意:看起来您实际上可能会使用x'Qx <= a^2and a >= 0)。

于 2020-04-22T09:45:52.423 回答