A heuristic is defined by Reeves (1995) as a technique which seek good (near-optimal) solutions at a reasonable computational cost without being able to guarantee optimality, to state
how close to optimality a particular feasible solution is or, in some cases, even to guarantee feasibility. Often heuristics are problem-specific, so that a method which works for one problem
cannot be used to solve a different one.