メインコンテンツへスキップ

How to add modulo constraints in gurobi

回答済み

コメント

4件のコメント

  • 正式なコメント
    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 Vaihab,

    If I understand correctly, you are wanting to ensure that the following sum is odd.

    gp.quicksum(x[i] for i in lst)

    This sum is odd if, and only, if there is an even number 1 less than it.  If we introduce an integer variable named aux then 2*aux will be even.  Once this variable is added you can form the following constraint

    model.addVar(vtype="I", lb=-float("inf"))
    model.addConstr(gp.quicksum(x[i] for i in lst) == 1 + 2*aux)

    - Riley

     

    0
  • Vaibhav Dixit
    • Gurobi-versary
    • First Comment
    • First Question

    Hi,

    Thanks, its working now. So basically to ensure  that "gp.quicksum(x[i] for i in lst)"  is odd , the aux variable takes its values ​​accordingly, there is no need to add more constraints corresponding to the aux variable.

    So in same way I can define many such aux variables if 'x'  is 2D array.

    x=model.addVars(len(lst),len(lst), vtype="I")
    aux=model.addVars(len(lst),vtype="I", lb=-float("inf"))
    for j in range(len(lst)):
    model.addConstr(gp.quicksum(x[i,j] for i in lst) == 1 + 2*aux[j])

    pls correct me, if I'm wrong.

    -Vaibhav

    0
  • Riley Clement
    • Gurobi Staff

    Correct!

    Only thing I have to add is that if x are non-negative then the sum can never be negative so you don't need the lower bound of -infinity on the integer variables, and can let them take their default lower bound of 0.

    0

投稿コメントは受け付けていません。