Вы находитесь на странице: 1из 5

МОДУЛЬ 3.

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

В задачах динамического программирования находится ряд


оптимальных решений последовательно для каждого этапа, обеспечивающих
оптимальное развитие всего процесса в целом.
Динамическое программирование – это метод, приспособленный для
решения оптимизационных задач, связанных с многошаговыми, поэтапными
процессами.
Многошаговый процесс можно интерпретировать так: весь цикл
разбивается на этапы и на каждом этапе требуется принять то или иное
решение.
При решении задач методом ДП вводят функцию Беллмана fk, которая
представляет собой максимальную эффективность многошагового процесса,
состоящего из k шагов.
Для вычисления функции Беллмана составляется, так называемое,
функциональное уравнение Беллмана, позволяющее находить значение
функции Беллмана fk+1, если известно fk.
При выводе уравнения Беллмана используется та или иная форма
принципа оптимальности. Одной из наиболее общих формулировок является:
если на первом шаге принято решение, то дальнейшее решение принимается
таким образом, чтобы за оставшееся число шагов достичь максимального
(минимального) результата.

3.1. Оптимальное распределение ресурсов

Пусть, например, n предприятий используют некоторые ресурсы.


Известно, что если «K»-ому предприятию выделить Х единиц ресурсов, то
количество произведенной продукции будет равно φk(Х).
Требуется распределить А единиц ресурсов между n предприятиями
так, чтобы суммарный выпуск продукции был максимальным.
Обозначим через Хk количество ресурсов, которое нужно выделить к-
ому предприятию, тогда математическая модель задачи запишется так:
φ1(Х1)+φ2(Х2)+…+φn (Xn) → max
при ограничениях
x 1 +x 2 +. . .+ xn = A ,
{ x 1 ≥0 , x 2≥0 ,. .. , x n≥0
Если φ1, …, φn – линейные функции, то задача решается методами
линейного программирования.
Если φ1, …, φn – нелинейные дифференцируемые функции, то задача
решается методами нелинейного программирования.
Если функции φ1, …, φn заданы таблично, то задача решается методами
динамического программирования.
При решении задачи о распределении ресурсов введём функцию
Беллмана fk(Х) – максимальное количество продукции, которое могут
выпустить К предприятий, при этом αk(Х) – количество ресурса, получаемое
к-ым предприятием при оптимальном распределении ресурса между
первыми предприятиями.
Предположим, что fk(Х) известно, тогда вычислим fk+1(Х).
Пусть к+1-ое предприятие получает t единиц (0≤t≤X) ресурса, тогда
оно выпускает φk+1(t) единиц продукции. На долю же первых к предприятий
останется Х – t единиц ресурса.
В силу принципа оптимальности: чтобы получить больше продукции,
необходимо распределить оптимально оставшиеся Х – t единиц ресурса
между остальными к предприятиями. Тогда общий выпуск продукции будет
равен φk+1(t) + fk(X – t).
Но, чтобы этот общий выпуск продукции был максимальным,
необходимо t подобрать так, чтобы эта сумма достигла наибольшего
значения, т.е. fk+1(Х).
Итак,
f k +1 ( X )= max ( ϕk +1 ( t ) + f k ( x−t ) )
0≤t ≤x – функциональное
уравнение Беллмана.

Зная f1(X), находим f2(X), затем f3(X) и т.д.


Пример
Известно, что К-ое предприятие, получив Хk единиц ресурсов,
выпускает φk(Хk) единиц продукции (таблица 3.1).
Таблица 3.1
к (x) Продукция предприятий (усл. ед.)
x
ед. ресурсов 1 (x) 2 (x) 3 (x) 4 (x)
1 3 4 3 4
2 5 5 6 5
3 7 6 8 7
4 8 8 9 9
5 8 9 9 10

Требуется распределить 5 единиц некоторого ресурса между 4-мя


предприятиями так, чтобы общий выпуск продукции всеми предприятиями
был максимальным.
Решение. Функциональное уравнение Беллмана для оптимального
распределения ресурсов имеет вид:

f k +1 ( x )= max ( ϕk +1 ( t )+ f k ( x −t ) )
0≤t ≤x (3.1)
Найдем f1(x) – максимальный выпуск продукции одним предприятием,
например, первым. Если предприятие не имеет ресурса (x=0), то и нет
выпуска продукции, т. е. к(0)=0, а значит и f1(0)=0.
при x=1 f1 (1) =φ1 (1) = 3,
при x=2 f1 (2) = φ1 (2) =5,
при x=3 f1 (3) = φ1 (3) =7,
при x=4 f1 (4) = φ1 (4) =8,
при x=5 f1 (5) = φ1 (5) 8,
т. е. f1 (x) = φ1 (x) и α1 (Х)=Х.
Результаты записываем в колонку f1(Х) и α1(Х) таблицы 3.2.

Таблица 3.2
Расчетная матрица
Ресур Исходная информация 3(х
f1(х) 1(х) f2(х) 2(х) f3(х) f4(х) 4(х)
сы )
X φ1(x) φ2(x) φ3(x) φ4(x)

0 0 0 0 0 0 0 0 0 0 0 0 0
1 3 4 3 4 3 1 4 1 4 0 4 0,1
2 5 5 6 5 5 2 7 1 7 0,1 8 1
3 7 6 8 7 7 3 9 1 10 1,2 11 1
4 8 8 9 9 8 4 11 1 13 2 14 1
5 8 9 9 10 8 5 12 1,2 15 2,3 17 1

Для вычисления f2 (Х) и α2 (Х) составим таблицу 3.3., исходя из


формулы:

f 2(x )= max ( ϕ 2(t )+ f 1 ( x−t ) )


0≤t ≤5 (3.2)

Полученные значения f2(Х) и α2 (Х) записываем соответственно в


колонки таблицы 7.2. Следует заметить, что в формуле 8.2 первое слагаемое
φ2 (t) возрастает «сверху вниз», а второе слагаемое f1 (x-t) убывает «снизу
вверх» (отмечено стрелками в таблице 8.2), что позволяет без
дополнительной таблицы 7.3. находить максимальную сумму для каждого
t ∈ [ 0,5 ] .
Найдем f3(Х) и α3 (Х) по формуле

f 3 ( x) = max ( ϕ ( t ) +f
3 2 ( x −t ) )
0≤t ≤5 (3.3)

Можно снова составить таблицу для каждого значения Х и возможных


значений t (аналогично таблице 3.3) или же воспользоваться указанным выше
замечанием. Вычисленные значения f3(Х) и α3 (Х) записываем в таблице
3.2
f3(0)=0, α3 (0)=0;
f3(1)=4, α3 (1)=0;
f3(2)=7, α3 (2)=0 или 1;
f3(3)=10, α3 (3)=1 или 2;
f3(4)=13, α3 (4)=2;
f3(5)=15, α3 (5)=2 или 3

Таблица 3.3
Расчет функции Беллмана
X t X-t 2(t) f1(X-t) 2(t)+ f1(X-t) f2(X) 2(X)
0 1 0 3 0+3
1. 4 1
1 0 4 0 4+0
0 2 0 5 0+5
2. 1 1 4 3 4+3 7 1
2 0 5 0 5+0
0 3 0 7 0+7
1 2 4 5 4+5
3. 9 1
2 1 5 3 5+3
3 0 6 0 6+0
0 4 0 8 0+8
1 3 4 7 4+7
4. 2 2 5 5 5+5 11 1
3 1 6 3 6+3
4 0 8 0 8+0
0 5 0 8 0+8
1 4 4 8 4+8
2 3 5 7 5+7
5. 12 1,2
3 2 6 5 6+5
4 1 8 3 8+3
5 0 9 0 9+0

Затем вычислим f4(Х) и α4 (Х) по формуле

f 4 ( x )= max (ϕ 4(t ) +f 3 ( x−t ))


0≤t ≤5 (3.4)
Получим:
F4(0)=0, α4 (0)=0;
F4(1)=4, α4 (1)=0 или 1;
F4(2)=8, α4 (2)=1;
F4(3)=11, α4 (3)=1;
F4(4)=14, α4 (4)=1;
F4(5)=17, α4 (5)=1.

Заполняем столбцы f4(Х) и α4 (0)=0 таблицы 3.2 и делаем вывод, что


при распределении 5 единиц ресурсов между первым, вторым, третьим и
четвертым предприятиями, получим максимальный выпуск продукции всеми
предприятиями 17 единиц, при этом четвертому предприятию следует
выделить одну единицу ресурса, т.к. α 4 (5)=1. Осталось 5-1=4 ед. ресурса и
три предприятия, поэтому в таблице 7.2 находим α 3 (4) – количество ресурса,
необходимое третьему предприятию, α3(4)=2
После этого осталось на два предприятия 5-1-2=2 ед. ресурса. Находим
из той же таблицы α2 (2)=1, т.е. второму предприятию следует выделить одну
единицу ресурса. Тогда первому предприятию останется одна единица
ресурса, что и указано в таблице: α1 (1)=1. Если нет ошибок в вычислениях,
то это совпадение единиц ресурса обязательно.
Итак, получим:
Таблица 3.4
Самоконтроль
Количество распределенного
Предприятие Количество
ресурса
продукции
Первое 1 1(1)=3
Второе 1 2(1)=4
Третье 2 3(2)=6
Четвертое 1 4(1)=4
Сумма равна 17

Для проверки правильности расчетов (самоконтроль) найдем


количество выпускаемой продукции при данном распределении ресурсов
между предприятиями по исходной информации,
т.е. 1(1)=3; 2(1)=4; 3(2)=6; 4(1)=4.
Суммарный выпуск продукции составляет 17 единиц, что
подтверждает правильность расчета распределения ресурсов.