#### Date of Original Version

4-19-2005

#### Type

Dissertation

#### Abstract or Description

A combinatorial problem is the problem of finding an object with some desired property among a finite set of possible alternatives.

Many problems from industry exhibit a combinatorial nature. An example is the optimal routing of trucks to deliver goods from a depot to customers. There are many alternatives to distribute the goods among the trucks, and for each such distribution there are many alternative routes for each individual truck. Moreover, often we are restricted to deliver goods only within a certain time frame for each customer. This makes the search for an optimal solution even harder, because there may only be a few optimal solutions, respecting the time frames, among a huge set of possible alternatives. To solve combinatorial problems, we cannot simply consider all exponentially many possible alternatives.

Some combinatorial problems are solvable by an algorithm whose running time is bounded by a polynomial in the size of the representation of the problem. These problems are considered to be efficiently solvable, and are said to belong to the class P. For other problems such method is not known to exist and they are classified as follows. If we can determine in polynomialtime whether or not a particular alternative is a solution to a certain problem, the problem is said to be in the class NP. Note that all problems in P are also in NP. If a problem is in NP and moreover every other problem in NP can be transformed to this problem in polynomial time, the problem is said to be NP-complete. NP-complete problems are the hardest problems in NP. In this thesis we focus on solution methods for NP-complete combinatorial problems.

Several solution methods have been proposed to solve combinatorial problems faster. However, many real-life problems are still (yet) unsolvable, even when such techniques are applied, so further research is necessary. In this thesis we consider techniques from operations research and constraint programming to model and solve combinatorial problems