Xpress with bilinear models (the model is MIQCP)


I am trying to use Xpress on a model with bilinear terms.
With linear models it works while with my bilinear model I obtain:

?900 Warning: The quadratic part of row 'R21577' defines a nonconvex region.
Please check your model or use nlpoptimize.

How to use nlpoptimize?

I tried using
MyBMod = BilevelModel(Xpress.nlpOptimizer, mode=...)
or declaring it as an option
set_optimizer(MyBMod, "nlpoptimize",1)
but without success.

Thank you in advance

cc @joaquimg is our Xpress and BilevelJuMP expert.

You could try using Gurobi instead, but the non-convex part combined with BilevelJuMP is a bit concerning. Is the bilinearity in the upper or lower level?

The bilinearity is in the upper level.
I already used gurobi but I would like to compare it with Xpress

I dont think Xpress.jl supports that yet then. We have a plan to fix things early next year.

Okay thanks.
Do you know how to declare the non linearity with xpress on single-level models?
( MyMod = model…)

Not to my knowledge but Joaquim might. Its what we would fix next year

Ok I will wait for the answer of @joaquimg to see if it is possible (and how) to use xpress.jl to solve a single-level model with bilinear terms.

I am searching for the equivalent in xpress of the option (nonconvex=2) of gurobi

Thank you

Sorry for the delay.
Xpress NL requires some updates to the API that are not ready yet.
Since the problem is a QCQP, it might only require a simple update in optimize! and a recent version of express.
I can give it a try and check.

You can use QuadraticToBinary.jl to get rid of bilinear terms. There is a tutorial for this: Using QuadraticToBinary · BilevelJuMP.jl
However, this might not be considered a fair benchmark between Xpress and Gurobi.