Model becomes infeasible after relaxation
AnsweredHi all,
I have an optimization problem for which I am able to get the optimal solution in which I have binary variables. When I relax the variable to take values between 0 and 1, the model becomes infeasible.
Does this has to do with the relaxation ?
Regards,
Laaziz

Hi Laaziz,
I cannot see how that would be possible, I believe it would take a indepth look to understand it.
Can you share the logs and the LP file?
0 
Hi Michel,
Sure! The following file relaxRAPEC is recorded before calling the optimize() method. The next one is after calling the computeIIS() which means that the model was found being infeasible by Gurobi.
\ Model relaxRAPEC
\ LP format  for model browsing. Use MPS format to capture full model detail.
Minimize
Subject To
C1[0]: 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k <= 62
C1[1]: 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k <= 29
C2[0]: 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k
<= 9000
C2[1]: 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k
<= 4000
C3[0]: 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k
<= 4000
C3[1]: 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k
<= 8000
C4[0,0]: x_i_j_k + x_i_j_k = 1
C4[0,1]: x_i_j_k + x_i_j_k = 1
C4[0,2]: x_i_j_k + x_i_j_k = 1
C4[0,3]: x_i_j_k + x_i_j_k = 1
C4[0,4]: x_i_j_k + x_i_j_k = 1
C5[0]: x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k <= 5
C5[1]: x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k <= 5
C6[0,0,0]: x_i_j_k = 0
C6[0,0,1]: x_i_j_k = 0
C6[0,0,2]: = 0
C6[0,0,3]: = 0
C6[0,0,4]: x_i_j_k = 0
C6[1,0,0]: = 0
C6[1,0,1]: = 0
C6[1,0,2]:  x_i_j_k = 0
C6[1,0,3]:  x_i_j_k = 0
C6[1,0,4]: = 0
C7[1,0]: 303 w_i_k_l_a_b + 207 w_i_k_l_a_b + 275 w_i_k_l_a_b
+ 499 w_i_k_l_a_b + 388 w_i_k_l_a_b + 280 w_i_k_l_a_b <= 6328
C7[0,1]: 303 w_i_k_l_a_b + 207 w_i_k_l_a_b + 275 w_i_k_l_a_b
+ 499 w_i_k_l_a_b + 388 w_i_k_l_a_b + 280 w_i_k_l_a_b <= 6328
C8: 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 5 x_i_j_k
+ 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k <= 1000
C9[0,0,1,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,0,1,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,0,2,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,0,2,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,0,4,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,0,4,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,1,3,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,1,3,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,1,4,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,1,4,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,2,3,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C9[0,2,3,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,0,1,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,0,1,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,0,2,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,0,2,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,0,4,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,0,4,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,1,3,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,1,3,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,1,4,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,1,4,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,2,3,1,0]: w_i_k_l_a_b  x_i_j_k <= 0
C10[0,2,3,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C11[0,0,1,1,0]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,0,1,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,0,2,1,0]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,0,2,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,0,4,1,0]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,0,4,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,1,3,1,0]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,1,3,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,1,4,1,0]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,1,4,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,2,3,1,0]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C11[0,2,3,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.196
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.196
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.416
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.416
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.025
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.025
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.298
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.298
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.011
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.011
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.302
C12:  0.06 w_i_k_l_a_b + z_i_k_l_a_b >= 0.302
Bounds
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
w_i_k_l_a_b <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
x_i_j_k <= 1
End\ Model relRAPEC_copy
\ LP format  for model browsing. Use MPS format to capture full model detail.
Minimize
Subject To
C4[0,1]: x_i_j_k + x_i_j_k = 1
C4[0,3]: x_i_j_k + x_i_j_k = 1
C6[0,0,1]: x_i_j_k = 0
C6[1,0,3]:  x_i_j_k = 0
C9[0,1,3,0,1]: w_i_k_l_a_b  x_i_j_k <= 0
C11[0,1,3,0,1]: w_i_k_l_a_b  x_i_j_k  x_i_j_k >= 1
Bounds
w_i_k_l_a_b free
x_i_j_k free
x_i_j_k free
x_i_j_k free
x_i_j_k free
EndThese are the files related to the optimal solution. The first instance if before calling the optimize() methods wile the next one is after obtaining the optimal solution by Gurobi.
\ Model RAPEC
\ LP format  for model browsing. Use MPS format to capture full model detail.
Minimize
Subject To
C1[0]: 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k <= 62
C1[1]: 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k <= 29
C2[0]: 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k
<= 9000
C2[1]: 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k
<= 4000
C3[0]: 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k
<= 4000
C3[1]: 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k
<= 8000
C4[0,0]: x_i_j_k + x_i_j_k = 1
C4[0,1]: x_i_j_k + x_i_j_k = 1
C4[0,2]: x_i_j_k + x_i_j_k = 1
C4[0,3]: x_i_j_k + x_i_j_k = 1
C4[0,4]: x_i_j_k + x_i_j_k = 1
C5[0]: x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k <= 5
C5[1]: x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k <= 5
C6[0,0,0]: x_i_j_k = 0
C6[0,0,1]: x_i_j_k = 0
C6[0,0,2]: = 0
C6[0,0,3]: = 0
C6[0,0,4]: x_i_j_k = 0
C6[1,0,0]: = 0
C6[1,0,1]: = 0
C6[1,0,2]:  x_i_j_k = 0
C6[1,0,3]:  x_i_j_k = 0
C6[1,0,4]: = 0
C8: 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 5 x_i_j_k
+ 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k <= 1000
C7[1,0]: [ 303 x_i_j_k * x_i_j_k + 207 x_i_j_k * x_i_j_k
+ 499 x_i_j_k * x_i_j_k + 280 x_i_j_k * x_i_j_k + 275 x_i_j_k * x_i_j_k
+ 388 x_i_j_k * x_i_j_k ] <= 6328
C7[0,1]: [ 303 x_i_j_k * x_i_j_k + 207 x_i_j_k * x_i_j_k
+ 275 x_i_j_k * x_i_j_k + 499 x_i_j_k * x_i_j_k + 388 x_i_j_k * x_i_j_k
+ 280 x_i_j_k * x_i_j_k ] <= 6328
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.196
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.196
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.416
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.416
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.025
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.025
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.298
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.298
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.011
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.011
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.302
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.302
Bounds
Binaries
x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k
x_i_j_k
End\ Model RAPEC
\ LP format  for model browsing. Use MPS format to capture full model detail.
Minimize
6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 5 x_i_j_k
+ 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k + 1.25 z_i_k_l_a_b
+ 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b
+ 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b
+ 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b
+ 1.25 z_i_k_l_a_b + 1.25 z_i_k_l_a_b
Subject To
C1[0]: 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k <= 62
C1[1]: 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k + 4 x_i_j_k <= 29
C2[0]: 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k
<= 9000
C2[1]: 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k + 996 x_i_j_k
<= 4000
C3[0]: 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k
<= 4000
C3[1]: 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k + 85 x_i_j_k
<= 8000
C4[0,0]: x_i_j_k + x_i_j_k = 1
C4[0,1]: x_i_j_k + x_i_j_k = 1
C4[0,2]: x_i_j_k + x_i_j_k = 1
C4[0,3]: x_i_j_k + x_i_j_k = 1
C4[0,4]: x_i_j_k + x_i_j_k = 1
C5[0]: x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k <= 5
C5[1]: x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k + x_i_j_k <= 5
C6[0,0,0]: x_i_j_k = 0
C6[0,0,1]: x_i_j_k = 0
C6[0,0,2]: = 0
C6[0,0,3]: = 0
C6[0,0,4]: x_i_j_k = 0
C6[1,0,0]: = 0
C6[1,0,1]: = 0
C6[1,0,2]:  x_i_j_k = 0
C6[1,0,3]:  x_i_j_k = 0
C6[1,0,4]: = 0
C8: 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 6 x_i_j_k + 5 x_i_j_k
+ 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k + 5 x_i_j_k <= 1000
C7[1,0]: [ 303 x_i_j_k * x_i_j_k + 207 x_i_j_k * x_i_j_k
+ 499 x_i_j_k * x_i_j_k + 280 x_i_j_k * x_i_j_k + 275 x_i_j_k * x_i_j_k
+ 388 x_i_j_k * x_i_j_k ] <= 6328
C7[0,1]: [ 303 x_i_j_k * x_i_j_k + 207 x_i_j_k * x_i_j_k
+ 275 x_i_j_k * x_i_j_k + 499 x_i_j_k * x_i_j_k + 388 x_i_j_k * x_i_j_k
+ 280 x_i_j_k * x_i_j_k ] <= 6328
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.196
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.196
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.416
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.416
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.025
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.025
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.298
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.298
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.011
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.011
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.302
C9: z_i_k_l_a_b + [  0.06 x_i_j_k * x_i_j_k ] >= 0.302
Bounds
Binaries
x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k x_i_j_k
x_i_j_k
End0 
Hi Laaziz,
I'll get a head start on Michel by pointing out these files are not going to be of any help due the variable names. Each variable needs a unique variable name. Currently the model produced by reading one of these files will have two variables only.
>> m = gp.read("model.lp")
>> len(m.getVars())
2Note that the model files will be the same before and after optimization, so no need to post them twice. They do not encode any solution values, and the model is not changed by an optimization.
 Riley
1 
Hi Riley,
Got it !
I fixed the issue finally as it was a mistake in the indices of one of the constraints of the model.
However, I am not sure why Gurobi is saying that a solution for the relaxed model is feasible (GRB.Status.OPTIMAL == 2) while the returned solution is not feasible during the rounding and constraints checking phase. Is there any explanation to this ?
Laaziz0 
Hi Laaziz,
Perhaps there are numerical issues, but I'm also not 100% clear on the situation.
Any chance you could upload a model file and log file where it is accessible to Michel and I (such as Google Drive, Dropbox, Github).
 Riley
0 
Hi Riley,
In which format do you want to the model ? Do you need access to the python code as well ?
Laaziz
0 
Hi Laaziz,
A .lp model should be fine. No need for the python code.
0 
Hi Michel,
Here is the link to the two .lp models which are distinctive by their names. I got from Gurobi the cost function value of the returned solution by the relaxed model which is later not feasible after rounding and checking the constraints. Yet, I have checked the status of the solution with Gurobi and it was 2.
Thanks for your help.
Laaziz
0 
Hi Laaziz,
First make sure you are using Gurobi 11: there were a lot of changes for nonlinear models and it seems to have an impact on your models.
Your first model (optmodel9) is feasible for Gurobi 11. I also have deleted the lines from the .LP file that states the binaries files (optmodel9_michel), therefore "relaxing the binary variables", and it is also feasible:
gurobi> m = read("optmodel9.lp")
Read LP format model from file optmodel9.lp
Reading time = 0.13 seconds
: 906 rows, 59900 columns, 3253 nonzeros
gurobi> m.optimize()
Gurobi Optimizer version 11.0.0 build v11.0.0rc2 (win64  Windows 11+.0 (22631.2))
Optimize a model with 906 rows, 59900 columns and 3253 nonzeros
Model fingerprint: 0xcd8d404b
Model has 69300 quadratic constraints
Variable types: 59400 continuous, 500 integer (500 binary)
Coefficient statistics:
Matrix range [1e+00, 1e+03]
QMatrix range [1e02, 4e+02]
QLMatrix range [1e+00, 1e+00]
Objective range [0e+00, 0e+00]
Bounds range [1e+00, 1e+00]
RHS range [1e+00, 9e+03]
QRHS range [2e02, 1e+04]
Presolve removed 882 rows and 51150 columns
Presolve time: 0.13s
Presolved: 10729 rows, 10839 columns, 21303 nonzeros
Variable types: 0 continuous, 10839 integer (2589 binary)
Found heuristic solution: objective 0.0000000
Explored 1 nodes (0 simplex iterations) in 0.17 seconds (0.02 work units)
Thread count was 8 (of 8 available processors)
Solution count 1: 0
Optimal solution found (tolerance 1.00e04)
Best objective 0.000000000000e+00, best bound 0.000000000000e+00, gap 0.0000%
gurobi> m2 = read("optmodel9_michel.lp")
Read LP format model from file optmodel9_michel.lp
Reading time = 0.20 seconds
: 906 rows, 59900 columns, 3253 nonzeros
gurobi> m2.optimize()
Gurobi Optimizer version 11.0.0 build v11.0.0rc2 (win64  Windows 11+.0 (22631.2))
Optimize a model with 906 rows, 59900 columns and 3253 nonzeros
Model fingerprint: 0x59aa096b
Model has 69300 quadratic constraints
Coefficient statistics:
Matrix range [1e+00, 1e+03]
QMatrix range [1e02, 4e+02]
QLMatrix range [1e+00, 1e+00]
Objective range [0e+00, 0e+00]
Bounds range [0e+00, 0e+00]
RHS range [1e+00, 9e+03]
QRHS range [2e02, 1e+04]
Presolve removed 874 rows and 58009 columns
Continuous model is nonconvex  solving as a MIP
Presolve removed 876 rows and 58009 columns
Presolve time: 0.06s
Presolved: 3328 rows, 1891 columns, 7139 nonzeros
Presolved model has 1649 bilinear constraint(s)
Variable types: 1891 continuous, 0 integer (0 binary)
Found heuristic solution: objective 0.0000000
Explored 1 nodes (0 simplex iterations) in 0.25 seconds (0.10 work units)
Thread count was 8 (of 8 available processors)
Solution count 1: 0
Optimal solution found (tolerance 1.00e04)
Best objective 0.000000000000e+00, best bound 0.000000000000e+00, gap 0.0000%Your model called "relaxmodel9.lp" has the same previous problem, with the incorrect names.
In these two tests I have not found the issue you mentioned, there may be a misunderstanding of the issue, a problem in your code or the way you relaxed, or some sort of problem with .lp file (there may be rounding issues in using .lp files, but from the numbers I have seen, I do not think it is the case).
 Michel0 
However, I am not sure why Gurobi is saying that a solution for the relaxed model is feasible (GRB.Status.OPTIMAL == 2) while the returned solution is not feasible during the rounding and constraints checking phase. Is there any explanation to this ?
Are you expecting to take a solution from a LP relaxation, round the variables and arrive at a feasible solution for the MIP?
0 
Hi Michel Soares,
I apologize for not putting the right instance files. I updated the link with the files containing the models. This is the confguration with Gurobi 11.0.0
Gurobi Optimizer version 11.0.0 build v11.0.0rc2 (win64  Windows 10.0 (19045.2))
Riley Clement, yes I am taking a solution from the LP relaxation, round the variables and arrive a feasible solution for the MIP. Am I wrong by considering that the LP relaxation should be feasible (sometimes infeasible) before rounding and arriving to a feasible solution here ? Am I missing something fundamental here ?
Laaziz
0 
Hi Laaziz,
I'm afraid I think you are. Consider the following 1 variable program.
Max x
s.t. x <= 0.6
x binaryThe solution to the LP relaxation is x = 0.6 but rounding we have x = 1, which is does not satisfy the constraint.
 Riley
1 
Hi Riley Clement,
Thanks for sheding light ! Got it now.
 Laaziz
0
Please sign in to leave a comment.
Comments
13 comments