Heuristic does not switch off
AnsweredI want to turn off all heuristics to compare two different models. I turn off the heuristics by setting the heuristics parameter to zero. However, the log file still reports solutions found by heuristics. Is it possible to completely turn off all heuristics?
Below is a small example that demonstrates this behavior.

import gurobipy as gp
from gurobipy import GRB
# Data
V = [0, 1]
T = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p = [8, 1]
r = [[1], [2]]
R = [0]
R_k = [2]
E = []
# MIP model
mip = gp.Model('RCPSP')
# Decision variabels
x = mip.addVars(V, T, vtype=GRB.BINARY, name="x")
C = mip.addVar(vtype=GRB.CONTINUOUS, name="C")
# Constraints
mip.addConstrs((gp.quicksum(x[j,t] for t in T) == 1
for j in V),
name='start_once')
mip.addConstrs((gp.quicksum(x[i, tau] for tau in range(0, t-p[j]+1))
- gp.quicksum(x[j, tau] for tau in range(0, t+1) >= 0)
for i,j in E
for t in T),
name='precedence')
mip.addConstrs((gp.quicksum(r[j][k]*x[j,tau] for j in V for tau in range(t-p[j]+1, t+1) if tau > 0) <= R_k[k]
for k in R
for t in T),
name="resources")
mip.addConstrs((gp.quicksum((t+p[j]-1)*x[j, t] for t in T) <= C
for j in V ),
name='makespan')
# Objective
mip.setObjective((C), GRB.MINIMIZE)
# Parameter
mip.setParam("Heuristics", 0.00)
mip.optimize()
-
Official comment
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. -
There is no guaranteed way to prevent Gurobi from using all heuristic solutions. When you set the Heuristics parameter to 0, Gurobi spends no time looking for heuristic solutions. However, it could happen that Gurobi still encounters solutions as part of its solving process, even without devoting any additional meaningful work to finding them. These are reported as heuristic solutions.
For this small model, if you really want Gurobi to ignore the heuristic solution, you could try setting the Threads parameter to 1. In general, limiting the number of threads does not necessarily prevent Gurobi from finding these "free" solutions. This small model is a special case, since Gurobi finds the heuristic solution in a secondary thread helping at the root node.
Note that setting Threads to 1 typically has a negative effect on solver performance, because you are limiting the computing resources available to Gurobi.
0
Post is closed for comments.
Comments
2 comments