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 sinceyis 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 theBilevelJuMPpackage for such problems?
Looking for more insights on this. Thanks!