jump-dev / Pajarito.jl

A solver for mixed-integer convex optimization
Mozilla Public License 2.0
131 stars 22 forks source link

what does the cycle_indicator "Mixed-integer cycling detected" warning mean? #381

Closed rayset closed 7 years ago

rayset commented 7 years ago

I keep getting this warning solving my conic problem, I tried looking into nonlinear_algorithm.jl but the meaning of this warning is not very clear to me.

I understand that the problem is solved suboptimally, but what is the cycle_indicator for?

mlubin commented 7 years ago

That warning only appears in the nonlinear algorithm and means that the iterative algorithm saw the same integer solution twice but didn't satisfy convergence criteria. If your problem is conic I would recommend using the conic algorithm which is more robust to these issues.

chriscoey commented 7 years ago

To use the conic algorithm for your conic problem, provide Pajarito a conic solver such as ECOS or SCS, rather than an NLP solver such as IPOPT.

rayset commented 7 years ago

Thank you both. In fact my problem is a rotated quadratic conic one, as it has a constraint of this form:

@NLconstraint(mod, R[i,j,h]^2 + T[i,j,h]^2 - 2u_ijk[i,i,j,h]u_ijk[j,j,i,h] <=0)

I can't find any source on how to model it in Jump, may I ask you how do you suggest me to add it?

should I switch all my modelling to convex.jl as implied in the readme or shall I use some specific solver, like gurobi?

thanks again.

chriscoey commented 7 years ago

Sorry we didn't get back to you earlier. If your problem only has quadratic/second-order type cones, then you may get slightly better performance by using Gurobi's MISOCP solver through JuMP. Check out the JuMP docs on second-order cone constraints (don't use @nlconstraint - this is for NLP solvers not conic solvers). Alternatively, to use Pajarito, yes, we would suggest using Convex.jl to access Pajarito's conic algorithm.

In the next few weeks there will be major relevant changes to MathProgBase and JuMP and Pajarito that will make it easier for you to express a conic constraint like this with JuMP and call Pajarito.