Drake 和 Mosek 的 SOS 多项式产生错误代码 1501

SOS polynomial with Drake and Mosek yields error code 1501

我正在尝试用 SOSPolynomial 求解 MathematicalProgram。我是使用 Mosek 从源代码编译的 C++ 中的 运行 Drake。

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

然而,在调用 Solve() 后,通过 prog.NewSosPolynomial({t}, degree) 添加 SOS 多项式(t 是一个决策变量)程序 returns 无法解决被发现。查看 result_.get_solution_result() 中的值时,我发现 solution_status = falserescode = 1501.

寻找hererescode = 1501表示:"The problem contains nonlinear terms conic constraints. The requested operation cannot be applied to this type of problem."。但是,通过在添加 SOS 多项式之前检查 result.get_solver_id() 的值,很明显问题中没有其他非线性约束。

我是不是遗漏了什么,或者这是一个错误?

有意思。半定规划的标准形式(由我们的 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

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