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.