首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetInfeasibleConstraints运行时错误:输出必须是标量类型浮点

GetInfeasibleConstraints运行时错误:输出必须是标量类型浮点
EN

Stack Overflow用户
提问于 2020-08-27 23:39:53
回答 1查看 45关注 0票数 1

我正在尝试使用以下命令来调试我的MP

代码语言:javascript
复制
solver = IpoptSolver()
result = solver.Solve(prog)
result.GetInfeasibleConstraints(prog)

但是,我得到以下错误:

代码语言:javascript
复制
PyFunctionConstraint: Output must be of scalar type float. Got AutoDiffXd instead.

我添加了类似于compass gait example中的方法的autodiff约束。

例如:

代码语言:javascript
复制
plant_autodiff = plant.ToAutoDiffXd()
def eq7h(q_v_r):
    q, v, r = np.split(q_v_r, [
        plant.num_positions(),
        plant.num_positions() + plant.num_velocities()])
    context = plant_autodiff.CreateDefaultContext()
    plant_autodiff.SetPositions(context, q)
    plant_autodiff.SetVelocities(context, v)
    return plant_autodiff.CalcCenterOfMassPosition(context) - r
prog.AddConstraint(eq7h, lb=[0]*3, ub=[0]*3, vars=np.concatenate([q[k], v[k], r[k]]))

如何正确使用GetInfeasibleConstraints

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-29 01:24:45

GetInfeasibleConstraints要求使用双精度向量计算约束。所以我会把你的约束重写为

代码语言:javascript
复制
def eq7h(q_v_r):
    q, v, r = np.split(q_v_r, [
        plant.num_positions(),
        plant.num_positions() + plant.num_velocities()])
    # Select plant based on the data type of q_v_r. If the data type is autodiff (np.object in this case), then use plant_autodiff, otherwise use plant
    plant_eval = plant_autodiff if q_v_r.dtype == np.object else plant
    context = plant_eval.CreateDefaultContext()
    plant_eval.SetPositions(context, q)
    plant_eval.SetVelocities(context, v)
    return plant_eval.CalcCenterOfMassPosition(context) - r
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63619552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档