Метод динамического программирования предназначен для задач, реше-ние которых может быть представлено как некоторая многошаговая операция, т.е. последовательность однотипных шагов. Решение на каждом шаге принимается с учетом результатов предыдущих шагов, а также с учетом последствий принимаемого решения для последующих шагов. К числу задач, для которых может применяться метод динамического программирования, относится большинство задач планирования на несколько периодов времени (например, на несколько лет). Шагом в таких задачах является один плановый период (например, один год). Метод динамического программирования применяется также для многих задач, в которых имеется возможность искусственно представить процесс принятия решения как последова-тельность из нескольких однотипных шагов.
Общая постановка задачи, решаемой методом динамического программирования, следующая. Имеется некоторая операция, находящаяся в начальном состоянии S0. Операция реализуется за N шагов. На каждом шаге принимается некоторое решение Uk, где k – номер шага (k=1,...,N). Выбор каждого решения Uk вызывает переход операции из состояния Sk-1 в новое состояние Sk, а также обеспечивает некоторое значение критерия эффективности Zk. Требуется опре-делить последовательность решений U1, U2,...,Uk, обеспечивающих экстремальное (максимальное или минимальное) значение общего критерия эффективности E, зависящего от значений критерия эффективности на отдельных шагах Z1, Z2,...,Zk.
Основной принцип решения задач на основе метода динамического программирования (принцип оптимальности, или принцип Беллмана) состоит в следующем: решение на каждом шаге выбирается таким образом, чтобы обеспечить максимальную эффективность на данном шаге и на всех последующих шагах.
|
Задача, представленная в виде многошаговой операции, может быть решена методом динамического программирования, если она удовлетворяет следующим свойствам:
• отсутствие последействия: состояние операции по окончании каждого шага (Sk) и критерий эффективности на каждом шаге (Zk) зависят только от решения, принятого на данном шаге (Uk), и от состояния операции в начале данного шага (Sk-1), и не зависят от того, каким образом операция перешла в состояние Sk-1;
• аддитивность или мультипликативность критерия эффективности: общий критерий эффективности представляет собой сумму критериев эффек-тивности на отдельных шагах (E = Z1+Z2+...+ZN) или их произведение (E = = Z1·Z2·...·ZN).
Решение задач динамического программирования обычно включает два цикла: сначала – от последнего шага к первому (обратная прогонка, или условная оптимизация), затем – от первого шага к последнему (прямая прогонка, или безусловная оптимизация).
В цикле условной оптимизации для каждого шага находится множество возможных состояний операции в начале данного шага. Для каждого из этих состояний находится условно оптимальное решение, т.е. решение, оптимальное для данного состояния. Поиск условно оптимальных решений начинается с последнего (N-го) шага, так как на этом шаге имеется возможность выбирать решение только с учетом эффективности на данном шаге (последующих шагов нет). Затем на других шагах (N-1-м, N-2-м,...,первом) условно оптимальные решения выбираются согласно принципу оптимальности, т.е. с учетом эффективности на данном шаге и на последующих шагах. На всех шагах от N-го до второго определяется несколько условно оптимальных решений – по одному для каждого возможного состояния. Для первого шага начальное состояние (S0) обычно известно точно, поэтому для этого шага находится только одно (безусловно оптимальное) решение. *U1
|
В цикле безусловной оптимизации для каждого шага определяется безусловно оптимальное решение. Поиск безусловно оптимальных решений начинается с первого шага, так как для него известно начальное состояние S0, поэтому можно определить единственное (безусловно оптимальное) решение. Определяется состояние S*U11, в которое переходит операция из состояния S0 в результате решения, т.е. состояние в начале второго шага. Для него в цикле условной оптимизации уже найдено оптимальное решение. Определяется состояние операции в начале третьего шага – состояние S*U1*U22, в которое операция переходит в результате решения. Для этого состояния в цикле условной оптимизации также найдено оптимальное решение. Аналогично определяют-ся безусловно оптимальные решения для последующих шагов. *U2*U3
Важно отметить, что для метода динамического программирования не существует вычислительной процедуры, одинаковой для всех задач.