I have a bilevel model where my innerlevel problem has terms in constraints and objective that are the product of an upperlevel and a lowerlevel 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
BilevelJuMP
package can handle the product of variables in lowerlevel objective but not in lowerlevel constraints. Is there a way around it? My understanding is that sincey
is a parameter for the lowerlevel 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 rewrite my lower problem? What if it was a product of two continuous variables? Even though
y
would still be a parameter for the lowerlevel problem making it an LP, what would be the suggested way to use theBilevelJuMP
package for such problems?
Looking for more insights on this. Thanks!