BilevelJump with mode=BilevelJuMP.BigMMode or mode=BilevelJuMP.FortunyAmatMcCarlMode

Hi,

I would like to ask 2 questions about the reformulation of the complementary slackness with Fortuny-Amat and McCarl done by BilevelJump with the following setting

mode=BilevelJuMP.BigMMode(; with_slack = false, primal_big_M = Inf, dual_big_M = Inf)
or
mode=BilevelJuMP.FortunyAmatMcCarlMode(primal_big_M = vp, dual_big_M = vd)

  1. Are these modes equivalent?
  2. How to define the bigM for the primal constraints? I noticed that primal_big_M=vp is used as the bigM of the primal variables while the reformulation automatically determines other bigMs for the primal constraints, starting from vp.
    (note that dual_big_M = vd is used as the bigM for the dual constraints)

Thank you in advance

This is a question for @joaquimg

1 Like

BigMMode is equivalent to FortunyAmatMcCarlMode.

So
mode=BilevelJuMP.BigMMode(; with_slack = false, primal_big_M = Inf, dual_big_M = Inf)
and
mode=BilevelJuMP.FortunyAmatMcCarlMode(primal_big_M = vp, dual_big_M = vd)
are equivalent because with_slack = false is the default for both.

Currently, big Ms are only passed to variables and are computed automatically for constraints.
I do agree the we should be able to set them directly to constraints if there is information from the user.
I opened an issue to track this: Allow adding constraint UB and LB big Ms · Issue #209 · joaquimg/BilevelJuMP.jl · GitHub

1 Like