Solution not found or model is infeasible ( Gurobi in R)
AnsweredHello there,
so I am encountering the issue that the model seems to be infeasible as where it should not be. I am finding it difficult to pinpoint in why this model is returning this 'error' message  hopefully someone can point me towards the right direction
# Specify the file to read > # fileName = "example.txt"; > fileName = "small.txt"; > # Read the number of jobs > nProjects = scan(fileName, skip = 1, nlines = 1); Read 1 item > # Read the properties of the jobs > input = scan(fileName, skip = 3, nlines = nProjects); Read 30 items > durations = rep(1, nProjects); > weights = rep(1, nProjects); > deadlines = rep(1, nProjects) > index = 1; > for(j in 1:nProjects) + { + durations[j]= input[index]; + deadlines[j] = input[index + 1]; + weights[j] = input[index + 2]; + index = index + 3; + } > rm(index, input, j, fileName) > deadlines [1] 14 13 11 15 7 19 10 20 15 13 > durations [1] 10 6 2 10 2 5 2 3 2 9 > weights [1] 2 4 4 1 2 2 1 3 4 4 > nProjects [1] 10 > # Calculate a suitable bigM, possibly a bit larger than the sum of all durations > bigM = sum(durations)+1 > # Initialize the MIP model > model < MIPModel() %>% + # Define binary variables for project assignment to employees + add_variable(x[i, j], i = 1:2, j = 1:nProjects, type = "binary") %>% # x[i,j]: 1 if project j is assigned to employee i, otherwise 0 + # Define binary variables for sequencing of projects + add_variable(s[j, k], j = 1:nProjects, k = 1:nProjects, j != k, type = "binary") %>% # s[j,k]: 1 if project j is before project k, otherwise 0 + # Define continuous variables for project completion times + add_variable(C[j], j = 1:nProjects, type = "continuous", lb = 0, ub = sum(durations)) %>% # C[j]: Completion time of project j + # Define continuous variables for fines + add_variable(F[j], j = 1:nProjects, type = "continuous", lb = 0) %>% # F[j]: Fine for project j if it is late + + # Set the objective to minimize the sum of fines + set_objective(sum_expr(F[j], j = 1:nProjects), "min") %>% # Minimize the total fines across all projects + + # Assignment constraint: Each project is assigned to one employee + add_constraint(sum_expr(x[i, j], i = 1:2) == 1, j = 1:nProjects) %>% + + # Sequencing constraints: Ensure proper project ordering and completion time calculation + add_constraint(C[k] >= C[j] + durations[j]  bigM * (3  s[j, k]  x[1, j]  x[1, k]), j = 1:nProjects, k = 1:nProjects, j != k) %>% + #add_constraint(C[k] >= C[j] + durations[j]  bigM * (3  s[j, k]  x[2, j]  x[2, k]), j = 1:nProjects, k = 1:nProjects, j != k) %>% + + # Completion time initialization: Ensure project starts only after previous project's completion + add_constraint(C[j] >= sum_expr(durations[j] * x[i, j], i = 1:2), j = 1:nProjects) %>% + + # Fine calculation: Calculate fines based on project lateness + add_constraint(F[j] >= weights[j] * (C[j]  deadlines[j]), j = 1:nProjects) %>% + add_constraint(F[j] >= 0, j = 1:nProjects) %>% + + # Logical constraint for sequencing: Prevent circular project references + add_constraint(s[j, k] + s[k, j] <= 1, j = 1:nProjects, k = 1:nProjects, j != k) > model Mixed integer linear optimization problem Variables: Continuous: 20 Integer: 0 Binary: 110 Model sense: minimize Constraints: 220 > # Solve the model using Gurobi > library("gurobi") > params < list(OutputFlag=1) #set solver options > result < solve_model(model, with_ROI(solver = "gurobi", params)) Set parameter Username Academic license  for noncommercial use only  expires 20250405 Gurobi Optimizer version 11.0.1 build v11.0.1rc0 (win64  Windows 10.0 (19045.2)) CPU model: Intel(R) Core(TM) i57500 CPU @ 3.40GHz, instruction set [SSE2AVXAVX2] Thread count: 4 physical cores, 4 logical processors, using up to 4 threads Optimize a model with 220 rows, 130 columns and 710 nonzeros Model fingerprint: 0x0a330f6c Variable types: 20 continuous, 110 integer (110 binary) Coefficient statistics: Matrix range [1e+00, 5e+01] Objective range [1e+00, 1e+00] Bounds range [1e+00, 5e+01] RHS range [1e+00, 2e+02] Found heuristic solution: objective 0.0000000 Explored 0 nodes (0 simplex iterations) in 0.00 seconds (0.00 work units) Thread count was 1 (of 4 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% 


0

Hi,
Your Gurobi log does not report any error. The solver found one feasible solution with zero objective value (which means zero fine across all projects)
Solution count 1: 0
This solution is also an optimal solution (within tolerances) for your model.
Optimal solution found (tolerance 1.00e04)
Best regards,
Simran0 
Hi,
thank you for the feedback, this means that the MIP is not complete as a fine is expected due to the workload.
I recon the StartTime is the issue.
0
Please sign in to leave a comment.
Comments
2 comments