使用 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))
如果您更喜欢可读代码。
为什么这条线:
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))
如果您更喜欢可读代码。