I have a bilevel model where my inner-level problem has terms in constraints and objective that are the product of an upper-level and a lower-level variable. For example,
using JuMP, BilevelJuMP, Gurobi model = BilevelModel(Gurobi.Optimizer, mode = BilevelJuMP.SOS1Mode()) @variable(Lower(model), x <= 10) @variable(Upper(model), y, Bin) @objective(Upper(model), Min, 3x + y) @objective(Lower(model), Min, -x*y) @constraints(Lower(model), begin x + y <= 8 x*y >= 5 end) optimize!(model)
Now, my questions are:
I see that
BilevelJuMPpackage can handle the product of variables in lower-level objective but not in lower-level constraints. Is there a way around it? My understanding is that since
yis a parameter for the lower-level problem, it is an LP, and we can thus write its KKT condition as usual? Is the package not designed to handle it currently or is there any other reason?
In the example above, I have a product of a binary and continuous variable, which can be linearized. So, is this what is recommended, i.e., should I linearize these terms and then re-write my lower problem? What if it was a product of two continuous variables? Even though
ywould still be a parameter for the lower-level problem making it an LP, what would be the suggested way to use the
BilevelJuMPpackage for such problems?
Looking for more insights on this. Thanks!