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

Constraint formulation C++

回答済み

コメント

13件のコメント

  • Mario Ruthmair
    • Gurobi Staff

    Hi Giorgos,

    What exactly do you mean with debugging stucks forever?

    Do you refer to the running time of the solver?
    Note that you are modeling some VRP with time windows with 100 customers. This size is in general quite hard to solve with a compact model of the type you have.

    Best regards,
    Mario

    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    Hello,

    Well, the debugging process terminates but the model is infeasible and i dont know why. I guess it's something to do with the constraints but i cannot find it. I have added the constraints and the code but i cannot find any logical errors. Can you  please spot the error?

    Best regards.

     

    0
  • Mario Ruthmair
    • Gurobi Staff

    Hi Giorgos,

    To find the cause for infeasibility in general, here are a few suggestions:

    • Write out the model to an LP file with model.write("model.lp") and look at the actually created variables and constraints.
    • Start with a small instance of your problem since then it is easier to manually check the model.
    • Follow the guidelines in this article.

    Specifically to your model:

    • I guess that arrival[i] and depart[i] are Gurobi variables. But you are using them as constants, e.g., in "depart[i] = std::max(arrival[i], time_window[i].first) + service_time[i];" You can only use them in Gurobi expressions.
    • To model your logical expressions, you either need to linearize it by yourself (with Big-M constraints), or use indicator constraints.
    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    Hello, 

    I have written the model in a file with extension .lp and i've tried to reduce the problem's complexity to a smaller one but i still cannot find the infeasibility reason...

    depart[i] and arrival[i] are not Gurobi variables they are vector of floats. So that i can use the expression as i do in the code...

    Is something wrong with the constraint's formulation? I really dont know...

    Thanks in advance.

    0
  • Mario Ruthmair
    • Gurobi Staff

    But if depart and arrival are no variables but constants what exactly is the sense of the constraints your are building with them in function depart_arrival()?

    Did you follow the guidelines in the article to construct an IIS?

    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    Do i have to add them as  Gurobi variables? I am asking because i have to add the constraint 8 which involves xijk which is a gurobi variable but apart from depart[i] and arrival[i] are not.

     

    Yes i have and the error appears to be in this constraint depart_arrival()

    0
  • Mario Ruthmair
    • Gurobi Staff

    You need to at least introduce variables that represent the arrival or departure time at some customer. Those need be bounded by the time window and linked to the x_ijk variables.

    A similar model can be seen in one of our Jupyter notebooks on a Technician Routing Problem.

    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    Hello, 

     

    I have added the variables arrive and depart as GRBVars and also i have i have looked at the example Technician Routing Problem. I've also run the formulation with only 3 constraints but the results are the same. I have attached "model.ilp" file that was produced by the model.computeIIS() . I don't know what else to do...

     

    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    \ Model (null)_copy
    \ LP format - for model browsing. Use MPS format to capture full model detail.
    Minimize
     
    Subject To
     R0: x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x = 1
     R129: x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x = 1
     R135: x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x
       + x + x + x + x + x + x + x + x + x + x + x = 1
    Bounds
    Binaries
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
     x x x x x x x x x x x x x x x x x x x x x
    End

    0
  • Mario Ruthmair
    • Gurobi Staff

    As you should clearly see, you are using the same variable name for all variables. This of course is not very helpful for debugging. Please name your variables reasonably, then the IIS might make more sense for you.

    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    Good morning,

    I have changed the name of variables and found the error in constraints however now the model while computing the solution "stucks" here as the screenshot shows and i don't know why?

    Best regards.

     

     

    0
  • Mario Ruthmair
    • Gurobi Staff

    Hi Giorgos,

    As I told you in the beginning, solving VRPs with models of the type you are using and 100 customers is extremely challenging. This is independent of the solver you are using.
    You need to work on your model formulation and use advanced concepts like dynamic column and cut generation if you want to solve VRPs of that size and larger.
    There is a huge amount of literature available on that topic but a first starting point might be the book:

    Toth, P., & Vigo, D. (Eds.). (2014). Vehicle routing: problems, methods, and applications. Society for industrial and applied mathematics.

    0
  • Giorgos Tsoumos
    • Gurobi-versary
    • Curious
    • Conversationalist

    Very well thank you for your time!

    0

サインインしてコメントを残してください。