Skip to main content

index constraint

Answered

Comments

3 comments

  • Official comment
    Simranjit Kaur
    • Gurobi Staff
    This post is more than two years old. Some information may not be up to date. For current information, please check the Gurobi Documentation or Knowledge Base. If you need more help, please create a new post in the community forum, or try Gurobot, our chatbot interface offering instant, expert-level support.
  • Riley Clement
    • Gurobi Staff

    Hi Rayan,

    Let's say i, j, e, come from sets I, J and E respectively.   If I understand correctly you are wanting to model  constraints of the form

    \[z_{ije} + u_{ije'} \leq 1, \quad \forall i \in I, j \in J, e \in E, e' \in E\]

    If you have defined z and u like so

    z = model.addVars(I,J,E, ...)
    u = model.addVars(I,J,E, ...)

    then the you can add the constraints like so

    model.addConstrs(
       z[i,j,e] + u[i,j,e2] <= 1
    for i in I
    for j in J
    for e in E
    for e2 in E
    )

    However you can likely make this formulation stronger if both z and u variables are binary.  Consider a set of  binary variables, x, and a set of binary variables y and the constraints

    \[x_m + y_n \leq 1, \quad \forall m \in M, n \in N\]

    If you think of each variable as representing a node in a graph, and an edge exists between nodes if they linked by the above constraints, then what you have is a complete bipartite graph.  One set of variables in a solution must always be zero.  The moment any x variable has value 1, all y variables must be 0.  The moment any y variable has value 1, all x variables must be zero.

    We can therefore introduce a binary variable w which is used to decide which set will be 0.  We can then replace the constraints above with the following

    \begin{align}
    x_m \leq w, \quad \forall m \in M\\
    y_n \leq 1-w, \quad \forall n \in N
    \end{align}

    which is likely to run much faster.

    You have this exact situation for each specific i and j, and so you can introduce binary variables w

    w = model.addVars(I,J, vtype="B")

    and use the following constraints instead of the ones above

    model.addConstrs(
      z[i,j,e] <= w[i,j]
    for i in I
    for j in J
    for e in E
    )
    model.addConstrs(
    u[i,j,e] + w[i,j] <= 1
    for i in I
    for j in J
    for e in E
    )

    If your z and u variables are not binary then this is all irrelevant though.

    - Riley

     

    0
  • Rayan SAAD
    • Gurobi-versary
    • Investigator
    • Conversationalist

    Thank youu !!

    0

Post is closed for comments.