## Project-Team : modbio

## Section: Scientific Foundations

## Combinatorial optimization and integer programming

*Combinatorial optimization is a lively field of applied mathematics,
combining techniques from combinatorics, linear programming, and the
theory of algorithms, to solve optimization problems over discrete
structures [31]*.
A combinatorial optimization problem can be defined as follows:
we are given a ground set N and consider a finite collection of
subsets, say . For each subset S_{k} there is an
objective function value, f(S_{k}), typically a linear function over the
elements in S_{k}. The task is to find the subset S_{k} that minimizes
f(S_{k}). Typically, the feasible subsets are represented by inclusion or
exclusion of members such that they satisfy certain conditions.
Well known examples of combinatorial optimization problems are
assignment, covering, cutting stock, knapsack, matching, packing,
partitioning, routing, sequencing, scheduling (jobs), shortest path, spanning
tree, and traveling salesman problems.

This then becomes a special class of integer programs (IP)
whose decision variables are binary valued: x_{i} = 1 if the i-th element is in
the optimal solution; otherwise, x_{i} = 0. In this case, feasible subsets have
to be expressed by linear constraints.
IP formulations are not always easy, and often there is more than one
formulation, some better than others. Many good formulations have exponential
size.