Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better OSQP's initialization with active set of constraints detection #344

Open
Algue-Rythme opened this issue Nov 13, 2022 · 0 comments
Open
Labels
enhancement New feature or request

Comments

@Algue-Rythme
Copy link
Collaborator

The problem (issue #342)

Following the discussion of #342 it has been noticed that the default zero initialization for dual variables was harmful for convergence, specially when primal variables are feasible and close from the optimum.

The proposal

From an initial primal and feasible solution, the active constraints can be "guessed". Since the problem is convex, any initialization can be used. Hence, it makes sense to compute un approximation of dual variables that leverage information on the primal variables.

Te idea would be to detect active constraints, for example with u-Ax<min(rtol*(u-l),atol) and Ax-l<min(rtol*(u-l),atol) in method

def init_params(self, init_x, params_obj, params_eq, params_ineq):
Once the active constraints are identified, the resulting QP only contain equality constraints. This allows to compute dual variables by solving the resulting KKT system. This should be better than zero initialization.

Comparison with OSQP original implementation

In the original implementation the warm start of primal variables does not seem to trigger specific code for dual variable initialization. However they do implement a rescaling with Ruiz equilibration. Ruiz equilibration is not part of Jaxopt for now, but I have some draft on my fork. This issue was also raised in #7

@Algue-Rythme Algue-Rythme added the enhancement New feature or request label Nov 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant