Skip to main content

Function applied to variable for more flexible domain

Answered

Comments

7 comments

  • Simranjit Kaur
    • Gurobi Staff Gurobi Staff

    You can define x as a semi-continuous variable. A semi-continuous variable has the property that it takes a value of 0 or a value between the specified lower and upper bounds. With the Python API, you can define your x variable as follows:

    x = model.addVar( lb = threshold, vtype = "S", name ="x")
    0
  • Alexander Chen
    • First Comment
    • First Question

    Thank you. I'll try it out

    0
  • Alexander Chen
    • First Comment
    • First Question

    Have checked that it would work as expected. Would it be possible to mix it with the continuous variable? For example, set x1-x5 to be semi-continuous and the rest to be just continuous

    0
  • Simranjit Kaur
    • Gurobi Staff Gurobi Staff

    Yes, a model can have both semi-continuous and continuous variables.

    0
  • Alexander Chen
    • First Comment
    • First Question

    Sorry I meant mixing semi-continuous and continuous for a variable with length n

    That sounds like just using different ub/lb for each x_i. Could you confirm?

    For example,

    n = 10
    threshold = 0.2
    lb = np.zeros(n)
    lb[0] = threshold
    x = model.addVar(n, lb=lb , ub=1.0, vtype="S", name="x")

    But if want to pin my x_i (ub and lb are the same), can it still by any chance bring it to 0?

    0
  • Simranjit Kaur
    • Gurobi Staff Gurobi Staff

    One approach to do this would be to set the "vtype" attribute for the variables according to the types you want. In the example below, x[0], x[1], and x[2] will be semi-continuous variables with lower bounds of 1, and x[3] and x[4] will be continuous variables with the default lower bound of zero.

    lb = [1,1,2,0,0]
    x = m.addVars(5, lb=lb, vtype=["S" for _ in range(3)] + ["C" for _ in range(2)], name="x")

    I hope this helps.

    Best regards,
    Simran

    0
  • Alexander Chen
    • First Comment
    • First Question

    That's what I'm looking for. Thank you!

    0

Please sign in to leave a comment.