| Методы оптимизации |
| Конспект лекций |
Тема 10. Динамическое программирование
10.1 Общая постановка задач динамического программирования
Динамическое программирование – метод оптимизации, применяемый в задачах, в которых процесс принятия решения может быть разбит на этапы (шаги). Такие задачи называются многошаговыми.
Возникновение этого метода связывают с именем американского ученого Р. Беллмана, который в начале 50-х годов ХХ века применил к ряду конкретных задач прием, названный впоследствии принципом оптимальности. Основной областью приложения последнего являются многошаговые процессы, т. е. процессы, развивающиеся во времени, что дало основание назвать новый метод оптимизации динамическим. Указанием на динамичность этот метод отличался от линейного программирования, исходная постановка основных задач которого имела статический характер.
Если модели линейного программирования можно использовать в экономике для принятия крупномасштабных плановых решений в сложных ситуациях, то модели динамического программирования применяются при решении задач значительно меньшего масштаба, например, при разработке правил управления запасами; при распределении инвестиционных ресурсов между альтернативными проектами; при составлении календарных планов текущего и капитального ремонта сложного оборудования и его замены и т.п.
В
задачах динамического программирования рассматривается управляемая система,
которая под влиянием управления переходит из начального состояния
в
конечное состояние
.
Предположим, что процесс управления системой можно разбить на n шагов.
Пусть
–
состояния системы после 1-го, 2-го, …, n-го шагов
(рис. 10.1).

Рисунок 10.1 – Переход системы из одного состояния в другое под воздействием управления
Состояние
системы
после k-го шага
характеризуется
параметрами
,
которые называются фазовыми координатами. Состояние можно
изобразить точкой s-мерного
пространства, называемого фазовым.
Последовательное
преобразование системы (по шагам) достигается с помощью некоторых
мероприятий
,
которые составляют управление системой
,
где
–
управление на k-м
шаге, переводящее систему из состояния
в
состояние
.
Управление
на k-м шаге
заключается в выборе значений определенных управляющих переменных
.
Предполагаем, что состояние системы в конце k-го шага
зависит только от предшествующего состояния системы
и
управления
на
данном шаге. Запишем эту зависимость в следующем виде:
(10.1)
Равенства (10.1) получили название уравнений состояний.
Варьируя управление U, получим различную эффективность процесса, которую будем оценивать количественно целевой функцией
. (10.2)
Показатель
эффективности k-го шага
процесса управления, который зависит от состояния
в
начале этого шага и управления
,
выбранного на этом шаге, обозначим через
.
В рассматриваемой задаче пошаговой оптимизации целевая функция (10.2)
полагается аддитивной, т. е.
(10.3)
Обычно условиями процесса на
управление на каждом шаге
накладываются
некоторые ограничения. Управления, удовлетворяющие этим ограничениям,
называются допустимыми.
Задачу
пошаговой оптимизации можно сформулировать следующим образом. Определить
совокупность допустимых управлений
,
переводящих систему из начального состояния
в
конечное состояние
и
максимизирующих или минимизирующих показатель эффективности (10.3). В
дальнейшем будем рассматривать задачу на максимум.
Начальное
состояние
и
конечное состояние
могут
быть заданы однозначно или могут быть указаны множество
начальных
состояний и множество
конечных
состояний так, что
,
.
В общем
случае в задаче пошаговой оптимизации требуется определить
совокупность допустимых управлений, переводящих систему из начального состояния
в
конечное состояние
и
максимизирующих целевую функцию (10.3). Управление, при котором достигается
максимум целевой функции (10.3), называется оптимальным управлением и
обозначается через
.
Итак, задача пошаговой оптимизации (задача динамического программирования) формулируется следующим образом: определить такое допустимое управление
,
переводящее
систему из состояния
в
состояние
,
при котором целевая функция Z принимает наибольшее (наименьшее)
значение.
Задача динамического программирования обладает следующими особенностями:
1. Задача оптимизации интерпретируется как n-шаговый процесс управления.
2. Целевая функция равна сумме целевых функций каждого шага.
3. Выбор управления на k-ом шаге зависит только от состояния системы к этому шагу, не влияет на предшествующие шаги (отсутствие обратной связи).
4. Состояние
после k-го
шага управления зависит только от предшествующего состояния
и управления
(«отсутствие последствия»).
5. На каждом шаге управление
зависит от конечного числа управляющих
переменных, а состояние
–
от конечного числа параметров.
10.2 Решение задач динамического программирования
Метод динамического программирования состоит в том, что оптимальное управление определяется постепенно. На каждом шаге оптимизируется управление только этого шага. Вместе с тем на каждом шаге управление выбирается с учетом последствий, так как управление, оптимизирующее целевую функцию только для данного шага, может привести к неоптимальному эффекту всего процесса. Управление на каждом шаге должно быть оптимальным с точки зрения процесса в целом. Задачи динамического программирования решаются, опираясь на следующий основной принцип, называемый принципом оптимальности Беллмана.
Принцип оптимальности. Каково бы ни было начальное состояние системы перед очередным шагом, управление на этом шаге выбирается так, чтобы выигрыш на данном шаге плюс оптимальный выигрыш на всех последующих шагах был максимальным.
Так, если система в начале k-го шага
находится в состоянии
и
мы выбираем произвольное управление
,
то она придет в новое состояние
,
и последующие управления
должны
выбираться оптимальными относительно состояния
.
Последнее означает, что при этих управлениях максимизируется
величина
,
т. е. показатель эффективности на
последующих до конца процесса шагах
.
Обозначим сумму показателей эффективности шагов k, k+1......n через Zk :
.
Выбрав оптимальное управление
на шагах
k, k+1......n, получим величину
,
которая зависит только от
,
т. е.
.
Величина
называется условным максимумом шага k. Если мы теперь выберем
на k-м шаге некоторое произвольное управление
,
то система придет в состояние
(рис.
10.2).

Рисунок 10.2n – Этап условной оптимизации
Согласно принципу оптимальности, необходимо выбирать
управление
так,
чтобы оно в совокупности с оптимальным управлением на последующих шагах
(начиная с
-го)
приводило бы сумму показателей эффективности всех шагов, начиная с k-го и до
конца, к максимуму. Это положение в аналитической форме можно записать в виде
следующих соотношений:

,
(10.4)
получивших название функциональных уравнений Беллмана.
Из уравнения (10.4) может быть получено значение функции
,
если известно значение
.
Аналогично можно получить
,
если найдено
и
т. д., пока не будет определена величина
,
представляющая по определению максимальное значение показателя эффективности
процесса в целом:
.
Решая уравнение (10.4) для определения условных максимумов показателей
эффективности шага k , можно
определить соответствующее оптимальное управление
,
при котором этот максимум достигается. Это управление также зависит от
;
оно обозначается через
![]()
и называть условным оптимальным управлением на k-м шаге.
В уравнениях (10.4) реализована идея динамического
программирования, которая заключается в том, что решение исходной задачи
определения максимума функции (10.3) n переменных
сводится
к решению последовательности n задач,
задаваемых соотношениями (10.4), каждое из которых является задачей
максимизации функции одной переменной
.
В результате последовательного решения n частных
задач на условный максимум определяют две последовательности функций:
–
условные максимумы и соответствующие им
–
условные оптимальные управления. Указанные последовательности функций в
дискретных задачах получают в табличной форме, а в непрерывных моделях –
аналитически.
Описанный этап называется этапом условной оптимизации. После его выполнения приступают ко второму этапу – безусловной оптимизации.
Если начальное состояние
задано
,
то непосредственно определяют максимум целевой функции
,
а затем – искомое безусловное оптимальное управление по цепочке
. (10.5)
Если задано множество
начальных
состояний
,
то дополнительно решают еще одну задачу на максимум
,
откуда находят
,
а затем по цепочке (10.5) – безусловное оптимальное управление.
В рассмотренных рекуррентных соотношениях предписывают начинать вычисления с последнего этапа и затем передвигаться назад до этапа 1. Такой метод вычислений известен как алгоритм обратной прогонки. Если расчеты осуществляются в естественном порядке следования этапов, то такой метод вычислений известен как алгоритм прямой прогонки.
Приведем рекуррентные соотношения для этого случая. Уравнения состояний для прямого хода удобно записывать в виде
![]()
Введем в рассмотрение условные максимумы
показателя эффективности за k шагов,
от 1-го до k-го включительно, –
величину
.
Повторив приведенные рассуждения, придем к следующей системе уравнений
Беллмана:
;
.
В результате решения этих уравнений получим последовательности
.
Далее определим безусловное оптимальное управление по цепочке
.
10.3 Примеры задач динамического программирования
Задача распределения капиталовложений
Планируется
распределение начальной суммы
средств
между n
предприятиями
.
Предполагается, что выделенные предприятию
в
начале планового периода средства uk
приносят доход fk(uk)
. Будем считать, что:
1) доход, полученный от
вложения средств в предприятие
,
не зависит от вложения средств в другие предприятия;
2) доход, полученный от разных предприятий, выражается в одинаковых единицах;
3) общий доход равен сумме доходов, полученных от всех средств, вложенных во все предприятия.
Математическая модель задачи следующая: необходимо найти вектор управлений
U=(u1,u2,..,un), при котором общий суммарный доход от всех предприятий принимает максимальное значение

при ограничениях
![]()
![]()
За номер k-го шага принимается номер предприятия, которому выделяются средства uk . Уравнениями состояния служат равенства
,
) .
Суммарный доход за n шагов составит
.
Уравнения Беллмана имеют вид

Рассмотрим числовой пример задачи распределения капиталовложений. Пусть имеется три предприятия, в которые можно инвестировать 40 млн.руб. При предварительном анализе была оценена величина валовой прибыли fi(ui) на планируемый промежуток времени для каждого предприятия i=1,2,3, которая зависит от объема инвестиций ui . Данные представлены в таблице 10.1.
Таблица 10.1 Исходная информация
Необходимо найти такое распределение между тремя предприятиями всего объема инвестиций, которое обеспечит максимальную суммарную валовую прибыль.
Управляющие
параметры uk — размер средств,
выделенных k-му предприятию, параметры
состояния xk — остаток средств,
подлежащий распределению после инвестирования в предприятие под номером k,
k =
, т.е.
x0 — начальная сумма средств в 40 млн. руб.;
x1 — сумма средств, оставшаяся после инвестирования в предприятие под номером 1;
x2 — сумма средств, оставшаяся после инвестирования в предприятия под номером 1 и 2;
x3 — сумма средств, оставшаяся после инвестирования в предприятие под номером 1,2 и 3.
Уравнения состояний:
x1 = x0 – u1
x2 = x0 – u1 – u2 = x1 – u2
x3 = x0 – u1 – u2 – u3 = x1 – u2 – u3 = x2 – u3,
т.е.
xk = F(xk-1, uk),
k=
,
где F(xk-1, uk) = xk-1 – uk.
Множество
допустимых управлений на k-м шаге определяется из очевидного условия xk ³ 0 для всех k =
.
Действительно, т.к. xk = xk-1-– uk ³ 0, то uk £ xk-1. Очевидно также, что uk ³ 0.
Показатель эффективности управления на k-м шаге определяется величиной fk(uk), зависящей только от uk. Суммарный показатель эффективности управления процессом или критерий оптимальности будет иметь вид
Z = f1(u1) + f2 (u2) + f3(u3) ® max.
Условные
максимумы
определяются по формуле
= ![]()
,
т.е.
=
(f1(u1)
+ f2(u2) + f3(u3)),
=
(f2(u2)
+ f3(u3)),
=
f3(u3 ).
И, наконец, функциональные уравнения Беллмана
= ![]()
, k =
1, 2,…
=
f3(u3),
которые, учитывая, что xk = xk-1 – uk, можно записать так
= ![]()
, k =
1, 2,…
=
f3(u3).
В соответствии с вычислительной схемой приступаем к этапу условной оптимизации и для всех возможных значений x2 решаем уравнение
=
f3(u3).
Содержательный смысл решения данного уравнения заключается в том, что мы находим условное оптимальное управление на 3-м шаге, т.е. оптимальный размер инвестиций, которые будут направлены на третье предприятие, при условии, что капиталовложений на эти цели осталось x2 млн. руб. Поскольку заранее неизвестно, сколько средств инвестировано в первое и второе предприятия, то остаток средств x2 может принимать любое значение от 0 до 40 млн. руб.
Если
x2 = 0, то
=
f3(u3) = f3(0) = 0 и
;
если
x2 = 10, то
=
f3(u3) = f3(10)
= 7 и
;
если
x2 = 20, то
=
f3(u3) = f3(20)
= 11 и
.
Аналогично
,
;
,
.
Таким
образом, найдены множества {
}и
{
} при всех возможных
значениях x2 =0, 10, 20, 30, 40.
Переходим
к нахождению множеств {
} и {
} из уравнений
= ![]()
.
Содержательный смысл решения этого уравнения состоит в том, что мы находим условное оптимальное управление на 2-м шаге, т.е. оптимальный размер инвестиций во второе предприятие при условии, что на второе и третье предприятия осталось x1 млн. руб., а на третье предприятие будет выделен оптимальный размер средств.
Поскольку заранее неизвестно, сколько средств будет выделено первому предприятию, остаток средств x1 может принимать любые значения от 0 до 40 млн. руб.
Если
x1=0,
то
= ![]()
=0 и
;
если
x1=10, то
=
=
= max
= max
=7 и
;
если
x1=20, то
=
=
= max
= max
=13 и
.
Аналогично
процедура продолжается для x1=30 и x1=40. В результате чего будут найдены множества {
} и {
}
при всех возможных значениях x1 = 0, 10, 20, 30, 40.
Легко
видеть, что приведенные выше вычисления элементарны, несмотря на кажущуюся, на
первый взгляд, громоздкость. Отметим, что рассмотренная вычислительная
процедура на этапах условной и безусловной оптимизации может быть компактно
оформлена в табличном виде. При решении задачи динамического программирования
заполняется так называемая основная таблица, в которую заносятся
значения условных максимумов
и условных оптимальных управлений
для всех возможных
значений xk-1 и k =
. Эта таблица
заполняется числовыми значениями последовательно по шагам, начиная с k = n и до k = 1.
В
нашем примере начальный вид основной таблицы, т.е. до ее последовательного
заполнения числовыми значениями
и
, будет следующим.
Таблица 10.2 – Вид основной таблицы
|
Возможные
|
k=3 (3-й шаг) |
k=2 (2-й шаг) |
k=1 (1-й шаг) |
|||
|
|
|
|
|
|
|
|
|
0 10 20 30 40 |
|
|
|
|
|
|
На первом шаге этапа условной оптимизации,
т.е. для k = 3, нами уже были
найдены значения
и
. Перепишем еще раз таблицу 10.2, заполнив
столбцы, соответствующие k = 3.
Таблица 10.2.1 - Основная таблица с результатами шага k = 3
|
Возможные
|
k=3 (3-й шаг) |
k=2 (2-й шаг) |
k=1 (1-й шаг) |
|||
|
|
|
|
|
|
|
|
|
0 10 20 30 40 |
0 7 11 13 19 |
0 10 20 30 40 |
|
|
|
|
Для заполнения остальных столбцов основной таблицы, т.е. столбцов для k =2 и k = 1, необходимо заполнить две вспомогательные таблицы: одну для k = 2, а другую для k = 1.
Таблица для второго шага условной оптимизации, т.е. для k = 2, будет иметь вид
Таблица 10.3 – Вспомогательная таблица второго шага
|
x1 |
u2 |
x2 =x1 – u2 |
|
|
|
0 |
0 |
0 |
0 + 0 |
0 |
|
10 |
0 10 |
10 0 |
0 + 7 = 7 6 + 0 = 6 |
7 |
|
20 |
0 10 20 |
20 10 0 |
0 + 11 = 11 6 + 7 = 13 9 + 0 =9 |
13 |
|
30 |
0 10 20 30 |
30 20 10 0 |
0 + 13 = 13 6 + 11 =17 9 + 7 = 16 14 + 0 = 14 |
17 |
|
40 |
0 10 20 30 40 |
40 30 20 10 0 |
0 + 19 = 19 6 + 13 = 19 9 + 11 = 20 14 + 7 = 21 16 + 0 = 16 |
21 |
В
столбце «u2» таблицы 10.3
выделены те значения u2, на которых достигается max
, т.е. выделены
значения условных оптимальных управлений
, соответствующих
условным максимумам
.
Найденные
значения
и
заносятся в основную таблицу 10.2. Для
третьего шага условной оптимизации, т.е. для k = 1, вспомогательная
таблица будет иметь вид:
Таблица 10.4 – Вспомогательная таблица шага k = 1
|
x0 |
u1 |
x1 =x0 – u1 |
|
|
|
0 |
0 |
0 |
0 + 0 |
0 |
|
10 |
0 10 |
10 0 |
0 + 7 = 7 8 + 0 = 8 |
8 |
|
20 |
0 10 20 |
20 10 0 |
0 + 13 = 13 8 + 7 = 15 10 + 0 = 10 |
15 |
|
30 |
0 10 20 30 |
30 20 10 0 |
0 + 17 = 17 8 + 13 =21 10 + 7 = 17 12 + 0 = 12 |
21 |
|
40 |
0 10 20 30 40 |
40 30 20 10 0 |
0 + 21 = 21 8 + 17 = 25 10 + 13 = 23 12 + 7 = 19 18 + 0 = 18 |
25 |
В
столбце «u1» таблицы 10.4
выделены значения условных оптимальных управлений
, соответствующих
условным максимумам
. Найденные значения
,
заносятся в основную
таблицу, которая оказывается полностью заполненной и приведена ниже.
Таблица 10.2.2 – Заполненная основная таблица
|
Возможные
значения объемов |
k=3 (3-й шаг) |
k=2 (2-й шаг) |
k=1 (1-й шаг) |
|||
|
|
|
|
|
|
|
|
|
0 10 20 30 40 |
0 7 11 13 19 |
0 10 20 30 40 |
0 7 13 17 21 |
0 0 10 10 30 |
0 8 15 21 25 |
0 10 10 10 10 |
Полное заполнение таблицы 10.2 (таблица 10.2.2) завершает этап условной оптимизации. Далее начинается второй этап решения задачи — безусловная оптимизация, в которой используется информация из таблицы 10.2.2 и уравнения состояния.
По
определению максимальное значение показателя эффективности всего процесса есть
для x0 = 40. Из таблицы10.2.2
находим
= 25.
Это значение
достигается при
=10. Поэтому Zmax =
= 25, а
=
= 10 — оптимальное
управление на первом шаге.
Так как x1 = x0 – u1, то
.
По
столбцам «x» и «
» таблицы 10.2.2
находим оптимальное управление на втором шаге
=
=
= 10. Так как x2 = x1 – u2, то
. Тогда по столбцам «x» и «
» находим
=
=
=20 — оптимальное
управление на 3-м шаге.
Таким
образом, задача полностью решена, поскольку найдено максимальное значение
целевой функции Zmax = 25 и оптимальные управления
на каждом шаге:
,
=10,
=20.
Содержательный смысл найденного решения заключается в том, что инвестировать в первое предприятие нужно 10 млн. руб., во 2-е— 10 млн. руб. и в 3-е — 20 млн. руб.
Такое распределение инвестиций позволит предприятию получить 25 млн. руб. валовой прибыли в плановом периоде.
Задача о загрузке, или задача о рюкзаке (ранце)
Задача о загрузке – это задача о рациональной загрузке судна (самолета, автомашины, рюкзака и т.п.), которое имеет ограничения по объему или грузоподъемности. Судно загружается предметами n различных типов. Каждый предмет типа i имеет вес
.При этом максимальная грузоподъемность судна равна W . Каждый помещенный на судно груз приносит определенную эффективность (доход, прибыль)
. Задача состоит в определении загрузки судна такими грузами, которые приносят наибольшую суммарную эффективность, при этом суммарный вес груза не должен превышать максимальной грузоподъемности. (Вместо веса может быть задано ограничение по объему).
Обозначим
количество предметов типа i через
.
Составим математическую модель задачи

при ограничениях

Этап j ставится
в соответствие типу j,
.
Состояние
на
этапе j выражает суммарный вес предметов, решения о погрузке которых
приняты на этапах
, при
этом
и
при
.
Варианты решения
на
этапе j описываются
количеством предметов типа j.
Значение
заключено
в пределах от нуля до
.
Пусть
–
максимальная суммарная стоимость предметов, решения о погрузке которых приняты
на этапах
при
заданном состоянии
.
Рекуррентное соотношение (для процедуры обратной прогонки) имеет следующий вид:

