Skip to content

Primal dual warmstarts #64

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

Closed
madeleineudell opened this issue Mar 22, 2015 · 11 comments
Closed

Primal dual warmstarts #64

madeleineudell opened this issue Mar 22, 2015 · 11 comments
Milestone

Comments

@madeleineudell
Copy link

I'd like to add the setwarmstart! functionality to SCS.jl. For the purposes of warmstarting SCS, it would be quite useful to have a primal & dual warmstart. But doing this requires a change to the MathProgBase interface, I think. For a minimally breaking change, I propose the following signature:

setwarmstart!(m::MathProgModel, v; kwargs...)

which, in SCS.jl, would be implemented as

function setwarmstart!(m::SCSMathProgModel, primal_sol; dual_sol=Float64[], kwargs...)
    m.primal_sol = primal_sol
    m.dual_sol = dual_sol
    m
end

while all other solvers would ignore all keyword arguments. (For now, at least.)

Are there any solutions that don't require modifying the signature of setwarmstart! in all solvers that have implemented it?

@mlubin
Copy link
Member

mlubin commented Mar 22, 2015

We could just add a new method called setdualwarmstart!. One can check if the solver supports the capability by checking if the method exists, so this wouldn't cause any breaking changes.

@IainNZ
Copy link
Member

IainNZ commented Mar 22, 2015

I like setdualwarmstart! because it kind of feels more MPB-ey.

@madeleineudell
Copy link
Author

Warmstarts come from two places: user intuition, and previous problem
solutions. Users rarely have intuition for dual warmstarts. So for the
purposes of Convex.jl, I guess it might make more sense for us to just use
the previous MathProgModel and reload the problem data into it (which would
preserve the primal (and dual and slack and whatever) solutions already
stashed in the MathProgModel data structure), rather than calling
setwarmstart! explicitly.

Can you think of a scenario where we do need setdualwarmstart! ?

On Sun, Mar 22, 2015 at 11:24 AM, Iain Dunning [email protected]
wrote:

I like setdualwarmstart! because it kind of feels more MPB-ey.


Reply to this email directly or view it on GitHub
#64 (comment)
.

Madeleine Udell
PhD Candidate in Computational and Mathematical Engineering
Stanford University
www.stanford.edu/~udell

@mlubin
Copy link
Member

mlubin commented Mar 22, 2015

Ipopt and other nonlinear support solvers setting initial lagrange multipliers. (This method will require a slightly different definition from the conic dual version.) I agree that it's not something most users will want to interact with, but I don't see the harm in exposing it at the MPB level anyway.

@tkelman
Copy link
Contributor

tkelman commented Sep 19, 2016

Bump. My labmates need dual warmstarts. What needs doing here and in JuMP for that?

@mlubin
Copy link
Member

mlubin commented Sep 19, 2016

This discussion was before the split between nonlinear and conic models, so Madeleine's concerns are likely orthogonal to yours. If you'd like a setdualwarmstart! for NLPs, propose a change to MPB, implement it in Ipopt.jl, and then bug us on the JuMP side.

@tkelman
Copy link
Contributor

tkelman commented Sep 19, 2016

What does the change need to look like here? Just a new method?

@mlubin
Copy link
Member

mlubin commented Sep 19, 2016

I'd say so.

@mlubin
Copy link
Member

mlubin commented Jun 9, 2017

I'm intending for this to be addressed by #164

@chriscoey chriscoey added the conic label Jun 9, 2017
@chriscoey
Copy link
Member

relevant - we got SCS warmstarts partially working for Pajarito. specifically, we used setbvec! to change the b vector and then started SCS from it's previous solution by giving it the warm_start = true option

see jump-dev/Pajarito.jl#372 and jump-dev/SCS.jl#77

@mlubin
Copy link
Member

mlubin commented Jul 15, 2017

MathOptInterface supports primal and dual warm starts

@mlubin mlubin closed this as completed Jul 15, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants