You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问Drake Toolbox构建的优化问题解及自动选择QP求解器

问题1:无法获取求解结果的代码错误原因
  • 核心错误:你声明了drake::solvers::MathematicalProgramResult result对象,但调用osqp_solver.Solve()时没有将求解返回的结果赋值给该对象,result始终处于未填充的空状态,自然无法读取求解结果。
  • 额外冗余问题:代码中的for (int print_to_console : {0, 0})属于无意义逻辑,会连续两次调用求解器且两次都设置为非verbose模式,最终只有第二次求解的结果会生效,没有实际作用,可以直接去掉循环,只保留一次求解逻辑。
  • 修正后的代码片段:
drake::solvers::MathematicalProgram prog;
auto x = prog.NewContinuousVariables(n_x);

// Cost and Constraints

drake::solvers::MathematicalProgramResult result;
drake::solvers::OsqpSolver osqp_solver;
if (osqp_solver.available()) {
    drake::solvers::SolverOptions options;
    // 按需设置verbose级别,0为不打印,1为打印详细日志
    options.SetOption(drake::solvers::OsqpSolver::id(), "verbose", 0);
    // 把求解结果赋值给result对象
    result = osqp_solver.Solve(prog, {}, options);
}
// 建议先判断求解是否成功再读取结果,避免异常
if (result.is_success()) {
    const auto u = result.GetSolution(x);
    // 后续处理u的逻辑
}
问题2:Drake自动选择QP求解器的方法

不需要手动实例化特定求解器,直接调用Drake封装的顶层Solve函数即可,框架会自动根据你的数学规划类型(这里是QP)和当前环境已安装的可用求解器,自动选择最优的求解器进行求解,示例代码如下:

drake::solvers::MathematicalProgram prog;
auto x = prog.NewContinuousVariables(n_x);

// Cost and Constraints

// 无需指定求解器,直接调用顶层Solve函数
drake::solvers::SolverOptions options;
// 可全局设置通用求解参数,也可以针对特定求解器设置参数
options.SetOption(drake::solvers::CommonSolverOption::kVerbose, 0);
// 支持传入初始猜测和求解配置,无初始猜测传空即可
auto result = drake::solvers::Solve(prog, {}, options);

if (result.is_success()) {
    const auto u = result.GetSolution(x);
}

内容的提问来源于stack exchange,提问作者skywalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:06:09