Goal Programming is a fancy name for a very simple idea: the line between objectives and constraints is not completely solid. In particular, when there are a number of objectives, it is normally a good idea to treat some or all of them as constraints instead of objectives.
Again, a particular example will illustrate this best. Suppose we are developing an advertising campaign. We would like to reach three groups of people: High Income Women (HIW), Teenage Boys (TB), and Retired Men (RM) (the product is obvious). We can advertise on TV and/or in a magazine. An ad in each of these gives the following audience:
Our budget is $600,000.
Now, if we did not need to worry about TB and RM, then we would have a simple linear program to optimize the number or HIW reached:
Maximize 7x+3y
Subject to
with solution x=6, y=0, reaching 42 million HIW. Similar
calculations show that the maximum number of TB is 60 million, and the
maximum number of RM is 40 million. We could take each of the values
as ``goals'' and try to find a solution that comes close to all of the
goals. Since it is impossible to reach all of the goals
simultaneously, we would penalize ourselves for not reaching a goal.
This penalty (probably an artificial value) would depend on the
importance of reaching a particular group. So, if we value HIW more
than TB more than RM, we could end up with penalties of 200, 100 and
50 respectively. We create new variables to represent
our failure in meeting a goal, and create a new linear program
Minimize
Subject to
The solution to this is . We meet the
first two goals, and fall short on the third. We could experiment
with other weights to see if we can find a ``better'' solution.
That is really all there is to goal programming: change some objectives into constraints by adding slack and/or surplus variables to represent deviation from a goal. There are some algorithmic changes possible to allow a more effective solution, but for the majority of applications, simply using a linear programming package like Solver is completely adequate.