logo
mat_mod_shpora

26. Динамическое программирование.

Динамическое программирование - способ решения сложных задач путём разбиения их на более простые подзадачи.

Ключевая идея в динамическом программировании достаточно проста. Как правило, чтобы решить поставленную задачу, требуется решить отдельные части задачи (подзадачи), после чего объединить решения подзадач в одно общее решение. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач велико.

Метод динамического программирования сверху — это простое запоминание результатов решения тех подзадач, которые могут повторно встретиться в дальнейшем. Динамическое программирование снизу включает в себя переформулирование сложной задачи в виде рекурсивной последовательности более простых подзадач.

Принцип оптимальности Беллмана.

Первая формулировка принципа оптимальности: для получения оптимального решения многоэтапного процесса решение, принимаемое на отдельном этапе, должно быть оптимальным относительно состояния, в котором система оказалась к началу данного этапа, и не должно зависеть от решений на предыдущих этапах, которые привели систему в данное состояние.

Вторая формулировка принципа оптимальности: для аддитивного функционала любой участок оптимальной траектории оптимален.

Введем дополнительные функции : . Их экономический смысл: максимальные значения частных целевых функций , вычисляемых по укороченным наборам управляющих переменных - справедливо, так как в финальный момент времени изменений нет и экономическая эффективность равна 0.

Принцип оптимальности: