Solving optimization problems with bilinear matrix inequalities (BMI) in Julia

Dear All,

Is there a way one can formulate and solve optimization problems with bilinear matrix inequalities in Julia/JuMP? For example,

\begin{array}{ll} \textrm{minimize} & c^{T}x\\ \textrm{subject to} & A_{0}+\sum_{k=1}^{n}x_{k}A_{k}+\sum_{k=1}^{n}\sum_{\ell=1}^{n}x_{k}x_{\ell}K_{k\ell}\preceq0, \end{array}

where x\in\mathbf{R}^{n} is the decision variable, is such an optimization problem. The problem is nonlinear and nonconvex. For my research, I am trying to solve such a problem.

I found that there is a Matlab solver called BMISOLVER, but I was wondering if something similar exists for Julia as well?

Any tips or suggestions will be much appreciated!

No problem @NiclasMattsson , thanks so much for your input! Yes, I actually tried Gurobi early on, and then I noticed that it cannot solve SDPs.

If anyone could provide any suggestions on what to do, it would be very helpful!

You can use Penbmi, there is a Julia wrapper for using it with JuMP.
In the future, Alpine might be able to support bilinear matrix inequalities as well so as to provide guaranteed optimal solutions, using an SDP solver and an a local search BMI solver (like Penbmi) as subsolvers.
You could also create a Julia wrapper for BMISOLVER.
I have created a few JuMP interfaces for MATLAB solvers (SeDuMi.jl, CDCS.jl, SDPNAL.jl, SDPT3.jl), it’s not too much work, I can guide you through it if you’re interested.

5 Likes

Thanks so much, @blegat , I will try to solve the problem with Penbmi first. My problem size is fairly small, so hopefully, it would work. If not, probably I will try to create a JuMP interface for BMISOLVER and will reach out to you for guidance!

Thanks again!

1 Like