Метод динамического программирования
Постановка задачи
Методом динамического программирования решить задачу распределения капитальных вложений между четырьмя предприятиями производственного объединения, располагающего суммой в 700 тыс. руб. (выделяемые суммы кратны 100 тыс. руб.).
Исходные данные
Значения функции fj(хj) приведены в Таблице 1 (считаем их заданными, их определение - довольно трудоемкая экономическая задача):
Таблица 1
xj | ||||||||
f1(xj) | ||||||||
f2(xj) | ||||||||
f3(xj) | ||||||||
f4(xj) |
Решение
Воспользуемся методом динамического программирования для решения этой задачи.
Введем параметр состояния x - количество рублей, выделяемых нескольким предприятиям, и определим функцию состояния Fk(x) - максимальная прибыль на первых k предприятиях, если они вместе получат хk рублей.
Табулируя последовательно функции Fk(x), получим решение, ход которого приведен в Таблицах 2-6.
Таблица 2
x-х2 | |||||||||
х2 | F(x-x2) f2(x2) | ||||||||
22* | 42* | ||||||||
57* | 70* | ||||||||
82* | |||||||||
92* | 101* | ||||||||
101* | |||||||||
Таблица 3
x | ||||||||
F2(x) | ||||||||
x2(x) | 400/500 |
Таблица 4
x-х3 | |||||||||
х3 | F(x-x3) f3(x3) | ||||||||
0* | 22* | 42* | 57* | ||||||
71* | 86* | 99* | |||||||
99* | 112* | ||||||||
Таблица 5
x | ||||||||
F2(x) | ||||||||
x2(x) | 200/300 |
Таблица 6
x-х4 | |||||||||
х4 | F(x-x4) f4(x4) | ||||||||
115* | |||||||||
Zmax = 115 тыс. руб.,
причем четвертому предприятию должно быть выделено
х4* = х4(700) = 100 тыс. руб.
На долю остальных трех предприятий остается 600 тыс. руб. Из Таблицы 5 видно, что третьему предприятию должно быть выделено
1) х3* = х3(700 - х4*) = х3(600) = 200 тыс. руб.
2) х3* = х3(700 - х4*) = х3(600) = 300 тыс. руб.
Продолжая обратный процесс, находим
1) х2* = х2(700 - х4* - х3*) = х2(400) = 200 тыс. руб.
2) х2* = х2(700 - х4* - х3*) = х2(300) = 200 тыс. руб.
На долю первого предприятия останется
1) х1* = 700 - х4* - х3* - х2* = 200 тыс. руб.
2) х1* = 700 - х4* - х3* - х2* = 100 тыс. руб.
Таким образом, наилучшим является следующее распределение капитальных вложений по предприятиям:
1) х1* = 200; х2* = 200; х3* = 200; х4* = 100
2) х1* = 100; х2* = 200; х3* = 300; х4* = 100
Оно обеспечивает производственному объединению наибольший возможный прирост прибыли 115 тыс. руб.
В качестве проверки правильности решения задачи можно использовать равенство
f1(x1*) + f2(x2*) + f3(x3*) + f4(x4*) = Zmax
1) f1(200) + f2(200) + f3(200) + f4(100) = 33 + 37 + 29 + 16 = 115 = Zmax
2) f1(100) + f2(200) + f3(300) + f4(100) = 20 + 37 + 42 + 16 = 115 = Zmax
Следовательно, полученные решения верны.
Динамическая задача управления производством и запасами
Постановка задачи
Рассмотреть динамическую задачу управления производством и запасами.
Исходные данные
Спрос (заявки) потребителей на продукцию составляют: на первый этап d1 = 5 единиц, на второй – d2 = 1, на третий - d3 = 2 единицы. К началу первого этапа на складе имеется только 4 единицы продукции, т.е. начальный уровень запаса равен y1=4. Затраты на хранение единицы продукции на разных этапах различны и составляют соответственно h1 = 2, h2 = 1, h3 = 1. Затраты на производство xj единиц продукции на j-м этапе определяются функцией
jj(xj) = 2 * xj2 + 6 (1)
т.е. а = 2; b = 0; с = 6. Требуется указать, сколько единиц продукции на отдельных этапах следует производить, чтобы заявки потребителей были удовлетворены, а общие затраты на производство и хранение за все три этапа были наименьшими.
Решение
Воспользовавшись рекурентными соотношениями, последовательно вычисляем F1 (x = y2), F2 (x = y3), ..., Fk (x = yk+1), ... и соответственно находим 1 (x= y2), 2 (x = y3 ), ..., ` k (x = yk+1), ...
Положим k = 1. Тогда имеем
F1(x= y2) = min{2 * xj2 + 6 + 2 * y2} (2)
Учтем, что параметр состояния x = у2 может принимать целые значения на отрезке
0 у2 d2 + d3
0 y2 3
т.е.
у2 = 0, 1, 2, 3
При этом каждому значению параметра состояния должна отвечать определенная область изменения переменной x1, характеризуемая условием
0 х1 d1 + у2
0 х1 5 + у2
Из балансового уравнения
х1 + у1 - d1 = у2
непосредственно следует, что объем производства связан со значением параметра состояния x= у2 соотношением
x1 = y2 + d1 - y1 = y2 + 5 - 4 = y2 + 1 (3)
Каждому значению у2 отвечает единственное значение х1 и потому
F1(x = y2) = W1 (x1, y2)
Придавая у2 различные целые значения от 0 до 3 и учитывая (3), находим
y2 = 0, x1 = 1, W1 (1;0) = 2 * 12 + 6 + 2 * 0 = 8
y2 = 1, x1 = 2, W1 (2;1) = 2 * 22 + 6 + 2 * 1 = 16
y2 = 2, x1 = 3, W1 (3;2) = 2 * 32 + 6 + 2 * 2 = 28
y2 = 3, x1 = 4, W1 (4;3) = 2 * 42 + 6 + 2 * 3 = 44
Значения функции состояния F1(x) представлены в Таблице 1.
Таблица 1
x = y2 | ||||
F1 (x = y2) | ||||
x1(x=y2) |
Переходим ко второму этапу. Полагаем k = 2 и табулируем функцию F2(x = y3):
F2(x = y3) = min W1 (x1, y2) = min{a * x22 + b * x2 + c + h2 * y3 + F1(y2)} =
= min {2 * x22 + 6 + y3 + F1(y2)} (4)
Здесь минимум берется по единственной переменной х2, которая может изменяться в пределах
0 £ x2 £ d2 + y3 или 0 £ x2 £ 1 + y3 (5)
где верхняя граница зависит от параметра состояния x = у3, который принимает значения на отрезке
0 £ y3 £ d3 , т.е. 0 £ y3 £ 2 (6)
а аргумент у2 в последнем слагаемом справа в соотношении (4) связан с х2 и у3 балансовым уравнением
x2 + y2 - d2 = y3
откуда следует
y2 = y3 + d2 - x2 = y3 + 1 - x2 (7)
Придавая параметру состояния различные значения от 0 до 2, будем последовательно вычислять W2 (x2, x), а затем определять F2(x ) и 2(x ).
Положим x = у3 = 0. Тогда, согласно (5),
0 £ x2 £ 1,
т.е. переменная х2 может принимать значения 0, 1, которым отвечает значение у2, вычисляемое по формуле (7):
у2 = 1 - х2
Последовательно находим:
x2 = 0, y2 = 1 - 0 = 1, W2 (0,0) = 2 * 02 + 6 + 0 + F1(1) = 6 + 16 = 22
x2 = 1, y2 = 1 - 1 = 0, W2 (1,0) = 2 * 12 + 6 + 0 + F1(0) = 8 + 8 = 16*
Наименьшее из полученных значений W2 есть F2 (0), т.е.
F2 (x = y3 = 0) = min W2 (x2,0) = min (22, 16) = 16,
x2
причем минимум достигается при значении х2, равном
` 2 (x = y3 = 0) = 1
Положим x = у3 = 1. Тогда, согласно (5),
0 £ x2 £ 2,
т.е. переменная х2 может принимать значения: 0, 1, 2, а каждому значению х2 отвечает определенное значение у2, вычисляемое по формуле (7):
у2 = 2 - х2
Последовательно находим:
x2 = 0, y2 = 2 - 0 = 2, W2 (0,1) = 2 * 02 + 6 + 1 + F1(2) = 7 + 28 = 35
x2 = 1, y2 = 2 - 1 = 1, W2 (1,1) = 2 * 12 + 6 + 1 + F1(1) = 9 + 16 = 25
x2 = 2, y2 = 2 - 2 = 0, W2 (2,1) = 2 * 22 + 6 + 1 + F1(0) = 15 + 8 = 23*
Наименьшее из полученных значений W2 есть F2 (1), т.е.
F2 (x = y3 = 1) = min W2 (x2,1) = min (35, 25, 23) = 23,
x2
причем минимум достигается при значении х2, равном
` 2 (x = y3 = 1) = 2
Положим x = у3 = 2. Тогда, согласно (5),
0 £ x2 £ 3,
т.е. переменная х2 может принимать значения: 0, 1, 2, 3, а каждому значению х2 отвечает определенное значение у2, вычисляемое по формуле (7):
у2 = 3 - х2
Последовательно находим:
x2 = 0, y2 = 3 - 0 = 3, W2 (0,2) = 2 * 02 + 6 + 2 + F1(3) = 8 + 44 = 52
x2 = 1, y2 = 3 - 1 = 2, W2 (1,2) = 2 * 12 + 6 + 2 + F1(2) = 10 + 28 = 38
x2 = 2, y2 = 3 - 2 = 1, W2 (2,2) = 2 * 22 + 6 + 2 + F1(1) = 16 + 16 = 32*
x2 = 3, y2 = 3 - 3 = 0, W2 (3,2) = 2 * 32 + 6 + 2 + F1(0) = 26 + 8 = 34
Наименьшее из полученных значений W2 есть F2 (2), т.е.
F2 (x = y3 = 2) = min W2 (x2,2) = min (52, 38, 32, 34) = 32,
x2
причем минимум достигается при значении х2, равном
2 (x = y3 = 2) = 2
Результаты табулирования функции F2(x = y3) сведены в Таблице 2.
Таблица 2
x= у3 | |||
F2 (x= y3) | |||
(x= y3) |
Переходим к следующему этапу. Полагаем k=3 и табулируем функцию F3 (x = y4):
F3 (x = y4) = min{a * x32 + b * x3 + c + h3 * y4 + F2(y3)} =
= min{2 * x32 + 6 + y4 + F2(y3)}
Вычисляем значение функции состояния только для одного значения аргумента x = у4 = 0, так как не имеет смысла оставлять продукцию в запас в конце исследуемого периода.
Тогда, согласно (5),
0 £ x3 £ 2,
т.е. переменная х3 может принимать значения: 0, 1, 2, а каждому значению х3 отвечает определенное значение у3, вычисляемое по формуле (7):
у3 = 2 - х3
Последовательно находим:
x3 = 0, y3 = 2 - 0 = 2, W2 (0,0) = 2 * 02 + 6 + 0 + F2(2) = 6 + 32 = 38
x3 = 1, y3 = 2 - 1 = 1, W2 (1,0) = 2 * 12 + 6 + 0 + F2(1) = 8 + 23 = 31
x3 = 2, y3 = 2 - 2 = 0, W2 (2,0) = 2 * 22 + 6 + 0 + F2(0) = 14 + 16 = 30*
Получаем
F3 (x = y4) = min W3 (x3,0) = min (38, 31, 30) = 30,
x3
причем минимум достигается в двух значениях переменной х3
` 3 (x = y4 = 0) = 2
Таким образом, мы получили не только минимальные общие затраты на производство и хранение продукции, но и последнюю компоненту оптимального решения. Она равна
x3* = 2
Остальные компоненты оптимального решения найдем по обычным правилам метода динамического программирования. Чтобы найти предпоследнюю компоненту, учтем, что
х3 + у3 - d3 = y4
2 + у3 - 2 = 0,
у3 = 0,
Из таблицы 2 значений находим
x2*= 2 (x = y3 = 0) = 1
Аналогично, продолжая двигаться в обратном направлении и учитывая, что
х2 + у2 - d2 = y3
1 + у2 - 1 = 0,
у2 = 0
из таблицы (1) значений х1(x) находим
x1*= 1 (x = y2 = 0) = 1
Итак, оптимальный план производства имеет вид
х1 = 1
х2 = 1
х3 = 2
а минимальные общие затраты составляют 30 единиц.