Раздел 8. Динамические задачи, марковские модели принятия решений

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

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

Рассмотрим экономическую задачу распределения ресурсов: пусть есть начальный капитал ko . Его можно потратить на несколько предприятий P1 ,P2 ,...,Pn.

Xij - количество средств вкладываемых в i - ом году, в j - ое предприятие. В результате получается эффект: Wij = f (Xij )

В общем случае это не линейная функция.

W = ∑ f (Xij ) → max

Xijk0

Так как функция W нелинейная, то получаем задачу нелинейного программирования. Решать её сложно, кроме того, часто Xij дискретные значения. Вопрос: нельзя ли решить задачу последовательно, т. е. найти оптимальное вложение для первого года, второго и т. д. т. е. провести последовательную оптимизацию. В большинстве задач так нельзя, т. к. то, что мы решили оказывает влияние на последующие шаги, например:

Бег на 800 метров. Каждый бегун имеет запас энергии, который он тратит на каждые 100 метров. ti – время на i – й 100 метров. ∑ ti (xi) → min; ∑ xix0. Оказывается, на первых 100 метров бегун будет обеспечивать минимальное время.

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

Принцип оптимальности Беллмана ставит вопрос о том, что такое оптимальность отдельного элемента системы с точки зрения оптимальности всей системы. Принимая решение на отдельном этапе, мы должны выбирать управление на этом этапе с прицелом на будущее, т. к. нас интересует результат в целом за все шаги. Беллман предложил рассматривать величину выигрыша от i - го шага и до конца, если i - ый шаг начинается с некоторого состояния S . Такую величину называют условным оптимальным выигрышем Wi (S) .

Тогда, принимая решение на i − м шаге, мы должны выбрать Xi так, чтобы условный оптимальный выигрыш был максимальным от i − шага и до конца.

Определение: оптимальность в малом понимается через оптимальность в большом.

Любой процесс имеет где-то окончание, т. е. имеет горизонт планирования. Тогда последний этап «не имеет будущего». Вот именно его можно оптимизировать только из условий данного этапа. После этого приступают к оптимизации (m - 1) - го этапа. Выбирают такое Xm-1,чтобы при применении этого Xm-1 его внести в управление последнего шага. При этом мы задаём состояние, с которого начинается (m − 1) − ый шаг. Поэтому функцию Wi (S) называют условным оптимальным выигрышем. Таким образом, процесс оптимизации разворачивается от конца к началу, и начальное состояние становится известно. Принцип Беллмана нашёл применение в методе программно-целевого планирования (любое действие планируется некоторым проектом).

Задача о наборе высоты и скорости летательного аппарата.

Летательный аппарат находится на высоте h0 и летит со скоростью v0. Необходимо перевести его на высоту h1со скоростью v1. Причём h1 > h0, v1 > v0 . Разобьём участокот h0 до h1 на n частей:

Известен расход горючего при переводе системы на Δh при v = const и на Δv при h = const . Таким образом, из каждого состояния есть лишь два управления.

За каждое такое управление получим расход горючего (выигрыш и потери). Суммарные потери равны сумме всех выигрышей на всех шагах. Дойдя до конца и получив 22, мы получим минимальную величину потерь горючего.

Любая задача, сводится к поиску минимального пути в графе и решается методом динамического программирования.

Функциональное уравнение Беллмана.

Назовём состоянием системы вектор координат: S = (ξ1, ξ2,...,ξL) (кси - ξ) . В некоторых задачах состояние – одна величина. Тогда работу системы можно представить как движение в фазовом пространстве – пространстве состояний. Назовём шаговым управлением – управление на i - ом шаге. Рассмотрим процесс управления системой за m шагов. Функция Wi (S, Ui ) называется выигрышем на i- ом шаге. Здесь S - состояние перед i - ым шагом, а Ui - управление на i - ом шаге.

Величина Wi (S, Ui ) должна быть известна до начала динамического программирования. Если состояние перед i - ым шагом было S и мы приняли какое-то управление Ui , то система перейдёт в новое состояние S' 𝜑i (S, Ui ). Эта функция должна быть так же известна. Если эти функции не заданы, то их надо сформулировать. Введём Wi (S )- условный оптимальный выигрыш. Это выигрыш на всех этапах от i до конца, если i - ый шаг начинается с состояния S .

Рассмотрим m шагов. Начнём с (i +1)- го шага. Мы системой управляем оптимально, величина оптимального выигрыша Wi+1 (S' ). На i - ом шаге - любое управление. i (S' ) - неоптимальный выигрыш, т. к. на i − ом шаге мы применяем управление Ui

Это функциональное уравнение Беллмана. Для использования уравнения Беллмана начинают сконца:

  1. i = m


  2. i = m - 1

    Итак, идя от конца к началу, мы получаем последовательно:
    Wm (S), Wm - 1 (S),...,W1 (S)
    Um (S), Um - 1 (S),...,U1 (S)
    Придя в начальное состояние W1 (S), мы можем подставить S = S0 и W1 (S0 ) = Wmax - это безусловный выигрыш.

    Теперь необходимо получить, идя от начала к концу по цепочке, безусловно оптимальное уравнение:

    Итак, в конце мы получаем: