使用 np linalg 范数的二次成本不起作用

Quadratic cost using np linalg norm doesn't work

为什么这条线:

    prog.AddQuadraticErrorCost(np.identity(len(q)), q0, q)

有效。

但是这个:

  prog.AddCost(np.linalg.norm(q_variables - q_nominal)**2)

RuntimeError: Expression pow(sqrt((pow(q(0), 2) + pow(q(2), 2) + pow(q(4), 2) + pow(q(6), 2) + pow(q(7), 2) + pow(q(8), 2) + pow((-1 + q(5)), 2) + pow((-0.59999999999999998 + q(1)), 2) + pow((1.75 + q(3)), 2))), 2) is not a polynomial. ParseCost does not support non-polynomial expression.

没有?

这些表达式在数学上不相同吗?

它们在数学上是相同的,但我们的符号引擎还不够强大,无法识别 sqrt(x)**2 应简化为 x。

你也可以用符号形式来写表达式

prog.AddQuadraticCost((q-q0).dot(q-q0))

如果您更喜欢可读代码。