Dynamic programming (DP) has quite a different
model form than the other types of mathematical programming.
Instead of an objective function and constraints, dynamic
programming models consist of a collection of equations
that describe a sequential decision process.

The process begins in some initial state,
the first decision moves it to a second state, and then
continues through alternating decisions and states until
a final state is reached. For a given problem, the model
must provide:

- mathematical vectors that describe states and decisions
- initial and final state definitions
- transition functions that map the current state and
decision to the next state in the sequence
- the objective function that evaluates the sequence
of decisions

Many problems are naturally described as a sequential
decision process and are ready candidates for a DP solution.
Others that seem more naturally stated as Integer Programming
models can be adapted to the DP format. DP has an advantage
over other formulations in that it does not require linearity.

One difficulty with DP is the curse of dimensionality.
DP solves for the optimal solution from every feasible state.
If the number of feasible states is too large, a very long
time might be required to solve a problem.

This DP add-in provides a general structure
with which most problems appropriate for DP can be modeled
and solved.