## Abstract

In mathematical programming, a *heuristic method*, or *heuristic* for short, is a procedure that determines good or near-optimal solutions to an optimization problem. Early heuristics were distinct methods developed to address specific optimization problems. As an example, consider the *minimum makespan* problem that arises in machine scheduling. In this problem, *n* given jobs with known processing times must be processed on *m* machines. The objective is to find a schedule which minimizes the latest finish time of the last job completed. This problem is known to be strongly *NP-complete*. A simple heuristic to solve this problem is the *list heuristic*. This method lists the jobs in some given order, then takes the first *m* jobs and assigns each to exactly one machine, so that at this point, the completion time of each machine corresponds to the processing time of the job assigned to it. Then, the remaining (*n* — *m*) jobs are selected in order of the list and assigned one by one to the machine that has currently the earliest finish time. This heuristic has the advantage of being computationally simple, and it can easily be implemented in real time. Better solutions to the problem, i.e., schedules with a shorter makespan, can be determined by improving on the heuristic in the following way: first sort the jobs on the list in nonincreasing order of processing time, and then apply the same machine selection process as presented above. Both heuristics solve the problem; the first is faster computationally, whereas the second is likely to produce better solutions.

## Keywords

Simulated Annealing Tabu Search Heuristic Algorithm Neighborhood Search Tabu List## Preview

Unable to display preview. Download preview PDF.