# Linear programming

Linear programming is an important tool for combinatorial search problems, not only because it solves efficiently a large class of important problems, but also because it is the basic block of some fundamental techniques in this area.

A linear program consists of minimizing a linear objective function subject to a set of linear constraints over real variables constrained to be nonnegative or, in symbols,

Note first that considering only equations, nonnegative
variables, and minimization is not restrictive. An inequality `t `≥` 0` can be recast
as an equation `t - s = 0` by adding a new
variable, an arbitrary variable can be expressed as the difference
of two nonnegative variables, and maximization can be expressed by
negating the objective function. In addition, decision problems (i.e.,
finding if a set of constraints is satisfiable) can be recast by adding
a variable per constraint and minimizing their sum. The problem is
satisfiable if and only if the optimum is zero. Note also that linear
programs can be solved in polynomial time and robust solvers are now
available that solve large scale linear programs. The success of linear
programming led many researchers to investigate some of its generalizations.