La programación dinámica es una técnica para resolver problemas divididos en etapas que requieren tomar decisiones óptimas. Richard Bellman desarrolló originalmente esta técnica en los 1940 para encontrar las mejores decisiones entre etapas. La programación dinámica determinística tiene estados futuros determinados por los estados y decisiones actuales, mientras que la probabilística tiene estados futuros determinados por probabilidades.