You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am building an MPC controller that uses ProxQP to get the optimal control actions.
It is about a mobile robot that avoid obstacles.
I generate at each iteration (every 0.1 seconds) a warm-starting obtained by receding the previous result.
Obstacles have some degree of uncertainty on its identification so that the resulting constraints moves resulting sometimes on infeasible problems. When an infeasible problem arrives, the solver takes a long time (several minutes) to end up with an anyway infeasible solution. In those cases, I actually prefer to take the warm-start as the optimal solution, hoping for future iterations to be feasible, or eventually bringing the robot to a stop.
Currently, I have set a maximum number of iterations for the problem to finish early when the solution gets too complex:
But this also takes much longer (~0.3 seconds) for a solution that I won't really use.
If the results.info.status is not proxsuite.proxqp.PROXQP_SOLVED, I use instead the warm-start. It is also interesting to mention that I have never obtained the status of PROXQP_PRIMAL_INFEASIBLE or PROXQP_DUAL_INFEASIBLE.
So, I was wondering if it would be possible to stop the solver as soon as it recognizes that the problem is infeasible, or if there exist some simple feasibility check that I could do before calling the method solve.
In the QP problem that I am considering, all equality constraints are implicit. So, I do not have matrices A and b.
The matrices H, g, C, l and u for an infeasible example can be found in this link:
This setup still results in QPSolverOutput.PROXQP_MAX_ITER_REACHED. Only I set eps_primal_inf and eps_dual_inf to 1e-1 I get QPSolverOutput.PROXQP_DUAL_INFEASIBLE. I hope this is already helpful to you.
Hello,
I am building an MPC controller that uses ProxQP to get the optimal control actions.
It is about a mobile robot that avoid obstacles.
I generate at each iteration (every 0.1 seconds) a warm-starting obtained by receding the previous result.
Obstacles have some degree of uncertainty on its identification so that the resulting constraints moves resulting sometimes on infeasible problems. When an infeasible problem arrives, the solver takes a long time (several minutes) to end up with an anyway infeasible solution. In those cases, I actually prefer to take the warm-start as the optimal solution, hoping for future iterations to be feasible, or eventually bringing the robot to a stop.
Currently, I have set a maximum number of iterations for the problem to finish early when the solution gets too complex:
But this also takes much longer (~0.3 seconds) for a solution that I won't really use.
If the
results.info.status
is notproxsuite.proxqp.PROXQP_SOLVED
, I use instead the warm-start. It is also interesting to mention that I have never obtained the status ofPROXQP_PRIMAL_INFEASIBLE
orPROXQP_DUAL_INFEASIBLE
.So, I was wondering if it would be possible to stop the solver as soon as it recognizes that the problem is infeasible, or if there exist some simple feasibility check that I could do before calling the method solve.
In the QP problem that I am considering, all equality constraints are implicit. So, I do not have matrices A and b.
The matrices H, g, C, l and u for an infeasible example can be found in this link:
https://drive.google.com/file/d/1_p4KUv4KTVvmG2fM0cdPNp7mky_XKJYL/view?usp=sharing
And it can be tested using the following script:
The text was updated successfully, but these errors were encountered: