如何解决返回在 Drake 中不可行的特定约束
我目前正在使用 Gurobi 在 Drake 中运行 MIQP 优化问题。 我一直在为我的优化问题找到不可行的解决方案,我想知道 Drake 是否可以返回更多有用的信息,例如导致不可行的特定约束。
我已经从 gurobi.cc 文件中返回了错误类型(例如:GRB_INFEASIBLE、GRB_UNBOUNDED、GRB_INF_OR_UNBD)。
否则,如果不存在这种有用的功能,您能否提供一些调试大型优化问题的技巧? (除了创建小的测试用例)
谢谢
解决方法
调试混合整数优化问题很棘手。对于 gurobi,您可以尝试函数 computeIIS()。你使用 pydrake 还是 C++ 版本?如果你有C++源代码,那么最简单的方法就是在这行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。它主要用于使用基于梯度的求解器进行非线性优化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。