- •1.Использование вычислительной техники в современной связи
- •2. Исследование операций как наука
- •4. Задача о раскрое
- •Количество форматных стекол, получаемых при возможных способах раскроя одного листа
- •5.Формирование задачи линейного программирования(лп)
- •6. Симплекс-метод
- •7. Частные случаи симплекс-метода
- •8. Метод больших штрафов
- •9. Тз линейного программирования. Постановка задачи
- •10. Построение опорной задачи: метод северо-западного угла и наименьших стоимостей
- •12. Метод потенциалов
- •11. Метод Фогеля
- •13. Вырожденные матрицы и способы борьбы
- •14. Несбалансированная тз
- •15. Тз с промежуточными пунктами
- •16. Нахождение кратчайшего пути на пути связи с помощью тз (маршрутизации)
- •17. Использование линейного программирования на производстве. График смен
- •18. Составление графика отпусков
- •19. Оптимальная расстановка силы на предприятиях
- •20. Нелинейное программирование. Постановка задачи
- •21. Метод дихотомии
- •22. Метод золотого сечения
- •23. Метод Фибоначчи
- •24. Метод многомерного поиска
- •25. Градиентные методы
- •26. Метод квадратичной аппроксимации
- •27. Метод кубической аппроксимации
- •28. Динамическое программирование
28. Динамическое программирование
Динамическое программирование (ДП) представляет собой математический аппарат, разработанный с целью повышения эффективности вычислений при решении некоторого класса задач математического программирования путем их разложения (декомпозиции) на относительно небольшие и, следовательно, менее сложные подзадачи. Характерным для динамического программирования является подход к решению задачи по этапам, с каждым из которых ассоциирована одна управляемая переменная. Набор рекуррентных вычислительных процедур, связывающих различные этапы, обеспечивает получение допустимого оптимального решения задачи в целом при достижении последнего этапа.
Происхождение названия динамическое программирование, вероятно, связано с использованием методов ДП в задачах принятия, решений через фиксированные промежутки времени (например, в задачах управления запасами). Однако методы ДП успешно применяются также для решения задач, в которых фактор времени не учитывается. По этой причине более удачным представляется термин многоэтапное программирование, отражающий пошаговый характер процесса решения задачи.
Фундаментальным принципом, положенным в основу теории ДП, является принцип оптимальности. По существу, он определяет порядок поэтапного решения допускающей декомпозицию задачи (это более приемлемый путь, чем непосредственное решение задачи в исходной постановке) с помощью рекуррентных вычислительных процедур.
Основные положения динамического программирования вместе с непривычными математическими обозначениями часто порождают трудности при изучении этого раздела математического программирования. В особенности это относится к тем, кто впервые знакомится с предметом. Однако опыт показывает, что систематическое обращение к задачам и методам ДП, требующее определенной настойчивости, в конечном счете, приводит начинающего к полному пониманию вначале неясных положений. Когда это происходит, динамическое программирование начинает казаться удивительно простой и стройной теорией.
7.1.2. Модель динамического программирования
Сетевые модели могут оказать существенную помощь при изучении метода построения моделей ДП. Имеющиеся различия в формулировках и вычислительных схемах не носят принципиального характера.
Необходимо внести ясность в вопрос о структуре рекуррентных вычислений в ДП. Расчеты на некотором этапе осуществляются на базе сводной информации о максимальном суммарном доходе (самом длинном пути), полученной в результате вычислений на всех предшествующих этапах. При этом отдельные решения, найденные на предшествующих этапах, не представляют существенного интереса. Действительно, все последующие решения строятся некоторым оптимальным образом независимо от решений, полученных на предшествующих этапах. Это отражает сущность принципа оптимальности, составляющего основу вычислительной схемы ДП.
Наиболее важным при построении сетевой модели, по-видимому, является способ определения величин хj, который позволяет автоматически выводить из рассмотрения недопустимые проекты (дуги). В ДП используется аналогичный прием, приводящий к понятию состояния системы. Этот термин не представляется бесспорно удачным, поскольку он описывает «состояние» системы лишь с позиций наличия ограниченного количества некоторого ресурса, что обеспечивает взаимную увязку всех этапов.
Если воспользоваться обозначениями, введенными при рассмотрении сетевой модели, можно записать рекуррентное соотношение ДП в следующем виде:
fj (xj) = max {Rj (kj) + fj-1(xj-1)}, j=1, 2, 3,
по допустимым проектам kj
где f0(x0)=0 по определению. Приведенное равенство действительно является рекуррентным, так как величина fj (xj) на этапе j вычисляется по известному значению fj-1 (xj-1) на этапе j-1 при f0(x0)=0.
Чтобы представить рекуррентное соотношение в корректной математической форме, необходимо сделать два замечания, которые к тому же помогут устранить кажущиеся различия между моделью ДП и сетевой моделью для рассматриваемой задачи.
Во-первых, заметим, что fj(xj) является функцией единственного аргумента xj. Отсюда следует, что правая часть рекуррентного соотношения должна быть выражена через xj, а не через xj-1. Вернемся к сетевой модели и вспомним, что разность между xj и xj-1 равна величине затрат (сj) на реализацию проекта kj на этапе j, т. е.
cj (kj) = xj - xj-1
Теперь можно выразить хj-1 через xj с помощью равенства xj-1 = xj – cj(kj). Такая замена обеспечивает более корректную математическую запись рекуррентного соотношения.
Во-вторых, необходимо представить в математической форме условие, предписывающее рассмотрение только допустимых проектов. Как и в случае сетевой модели, можно воспользоваться равенством cj (kj) = xj – xj-1. Однако это ограничение уже введено выше путем замены xj-1 = xj – cj (kj) в функции fj-1(xj-1). Чтобы обеспечить полную корректность, следует в явном виде учесть не требующее пояснений неравенство xj-1 ≥ 0, откуда xj – cj (kj) ≥ 0 или cj (kj) ≤ xj.
Таким образом, рекуррентное соотношение и ДП имеет следующий вид:
f0(x0) = 0,
fj(xj) = max {Rj (kj) + fj-1(xj - cj (kj))}, j=1, 2, 3.
cj (kj) ≤ xj
Ниже приводятся результаты поэтапных расчетов на основе рекуррентного соотношения для рассматриваемой задачи. Они представлены в виде таблиц, так как в ДП обычно используется табличная форма записи числовых результатов. Разумеется, весьма заманчивой выглядит перспектива проводить вычисления с использованием таблиц механически без четкого понимания, для чего выполняется та или иная операция. Однако такой путь приводит к целому ряду негативных последствий, и его ни в коем случае не следует выбирать тому, кто знакомится с основами динамического программирования. Следует придерживаться двух рекомендаций: (1) сравнивать результаты вычислений с использованием таблиц и расчетов с помощью сетевой модели и (2) всегда связывать исходные данные вычислений с использованием таблиц с соответствующими математическими символами в рекуррентном соотношении.
Выполнение указанных рекомендаций позволит достаточно быстро преодолеть психологический барьер, который обычно возникает при оперировании сложными на первый взгляд обозначениями и понятиями, связанными с расчетами по рекуррентным соотношениям.
Этап 1
f1(x1) = max {R1 (k1)}.
c1 (k1) ≤ x1, k1 = 1, 2, 3
x1 |
R1(k1) |
Оптимальное решение | |||
k1 = 1 |
k1 = 2 |
k1 = 3 |
f1(x1) |
k1* | |
0 1 2 3 4 5 |
0 0 0 0 0 0 |
- 5 5 5 5 5 |
- - 6 6 6 6 |
0 5 6 6 6 6 |
1 2 3 3 3 3 |
Этап 2
f2(x2) = max {R2 (k2) + f1 (x2 - c2 (k2))}.
c2 (k2 ) ≤ x2, k2 = 1, 2, 3, 4
x2 |
R2 (k2) + f1 (x2 - c2(k2)) |
Оптимальное решение | ||||
k2 = 1 |
k2 = 2 |
k2 = 3 |
k2 = 4 |
f2(x2) |
k2* | |
0 1 2 3 4 5 |
0+0=0 0+5=5 0+6=6 0+6=6 0+6=6 0+6=6 |
- - 8+0=8 8+5=13 8+6=14 8+6=14 |
- - - 9+0=9 9+5=14 9+6=15 |
- - - - 12+0=12 12+5=17 |
0 5 8 13 14 17 |
1 1 2 2 2 или 3 4 |
Этап 3
f3(x3) = max {R3 (k3) + f2 (x3 – c3 (k3))}.
c3 (k3 ) ≤ x3, k3 = 1, 2
x3 |
R3 (k3) + f2 (x3 – c3 (k3)) |
Оптимальное решение | ||
k3 = 1 |
k3 = 2 |
f3(x3) |
k3* | |
5 |
0+17=17 |
3+14=17 |
17 |
1 или 2 |
Оптимальное решение можно найти непосредственно из приведенных выше таблиц. Сначала рассматривается таблица, построенная на этапе 3. При х3=5 оптимальный проект имеет либо k3*=1, либо k3*=2. Пусть сначала k3*=1. Так как с3(1)=0, на этапах 2 и 1 х2=х3 – с3(1)=5. Легко видеть, что на этапе 2 из
Рис. 7.3.
x2 =5 следует k2* =4. Далее с2(4)=4, откуда х5 =5-4= 1. На этапе 1 из x1= 1 вытекает k1* =2. Таким образом, (2, 4, 1) есть оптимальный набор проектов для этапов 1, 2 и 3. На рис. 7.3 изображена схема определения всех различных оптимальных наборов проектов.