Goal Programming

A goal programming model has more than one logical or conceptual objective function or goal, but mathematically it has only one "LP objective function" like other linear programming models. 
Each conceptual goal is implemented as a "goal constraint" which we will assume to be of the form LHS + shortfall >= RHS.  (A <= constraint can easily be turned into a >= one by multiplying both sides by negative 1.  There are ways to handle this directly, and ways to handle = constraints, but we'll keep it simple.)


Shortfall Variables


Shortfall Variables are essential to goal programming.
A shortfall variable resembles a supplementary variable in that its value is completely determined by the values of the "free" decision variables,
But it differs from a supplementary variable because it is essential to calculating the decision itself, not just an improved sensitivity analysis.

A shortfall variable needs to be among the decision variables ("changing cells" in Solver);
it is constrained to be greater than or equal to the result of subtracting the LHS away from the RHS of a goal constraint.  Like other decision variables, it is is also constrained to be greater than or equal to zero.

The "LP constraint" incorporating all the goals wants to minimize the shortfall variables, so it tries to drive the LHS of each goal constraint up towards its RHS.  Because the shortfall variable can't go negative, there is no motivation to make the LHS of a goal constraint any higher than its RHS.  Because the goals tend to conflict, it is not possible to drive all the shortfall variables to zero, Solver just tries to come as close as possible.

The various flavors of goal programming (absolute priority, weighted sum, fuzzy set) embody different views of what "close" means.