Return 在 Drake 中不可行的特定约束

Return Specific Constraint that is Infeasible in Drake

我目前正在 运行 使用 Gurobi 解决 Drake 中的 MIQP 优化问题。 我一直在为我的优化问题找到不可行的解决方案,我想知道德雷克是否可以 return 任何更有用的信息,例如哪个特定约束导致不可行。

我已经从 gurobi.cc 文件中 return 编辑了错误类型(例如:GRB_INFEASIBLE、GRB_UNBOUNDED、GRB_INF_OR_UNBD)。

否则,如果不存在这样有用的函数,您能否提供一些调试大型优化问题的技巧? (除了创建小测试用例)

谢谢

调试混合整数优化问题很棘手。对于 gurobi,你可以尝试函数 computeIIS(). Do you use the pydrake or the C++ version? If you have the C++ source code, then the easiest way is to to add the following code before this line https://github.com/RobotLocomotion/drake/blob/3f1482d4808d238ee63095ba05c18434b47d1fbf/solvers/gurobi_solver.cc#L1058

GRBcompueIIS(model);
GRBwrite(model, `infeasible.ilp`)

Gurobi 会将不可行约束写入文本文件名infeasible.ilp。如果您通过调用 NewContinuousVariable(size, var_name) 设置了变量名称,那么不可行报告 infeasible.ilp 将使用变量名称 var_name.

遗憾的是,我们无法将 Gurobi computeIIS 函数中的不可行约束与您通过 Drake 添加的约束相关联,即它还没有报告哪个 Drake 约束导致了不可行。

顺便说一句,我们有一个关于在 Drake 中调试 MathematicalProgram 的 tutorial。它主要用于基于梯度求解器的非线性优化。