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

Постановка задачи

Методом динамического программирования решить задачу распределения капитальных вложений между четырьмя предприятиями производственного объединения, располагающего суммой в 700 тыс. руб. (выделяемые суммы кратны 100 тыс. руб.).

Исходные данные

Значения функции fjj) приведены в Таблице 1 (считаем их заданными, их определение - довольно трудоемкая экономическая задача):

Таблица 1

xj
f1(xj)
f2(xj)
f3(xj)
f4(xj)

Решение

Воспользуемся методом динамического программирования для решения этой задачи.

Введем параметр состояния x - количество рублей, выделяемых нескольким предприятиям, и определим функцию состояния Fk(x) - максимальная прибыль на первых k предприятиях, если они вместе получат хk рублей.

Табулируя последовательно функции Fk(x), получим решение, ход которого приведен в Таблицах 2-6.

Таблица 2

Метод динамического программирования - student2.ru x-х2
х2 F(x-x2) f2(x2)
22* 42*  
57* 70*    
82*      
92* 101*        
101*          
           
             

Таблица 3

x
F2(x)
x2(x) 400/500

Метод динамического программирования - student2.ru Таблица 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

Метод динамического программирования - student2.ru 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 Метод динамического программирования - student2.ru (1)

т.е. а = 2; b = 0; с = 6. Требуется указать, сколько единиц продукции на отдельных этапах следует производить, чтобы заявки потребителей были удовлетворены, а общие затраты на производство и хранение за все три этапа были наименьшими.

Решение

Воспользовавшись рекурентными соотношениями, последовательно вычисляем F1 (x = y2), F2 (x = y3), ..., Fk (x = yk+1), ... и соответственно находим Метод динамического программирования - student2.ru 1 (x= y2), Метод динамического программирования - student2.ru 2 (x = y3 ), ..., ` Метод динамического программирования - student2.ru k (x = yk+1), ...

Положим k = 1. Тогда имеем

F1(x= y2) = min{2 * xj2 + 6 + 2 * y2} (2)

Учтем, что параметр состояния x = у2 может принимать целые значения на отрезке

0 Метод динамического программирования - student2.ru у2 Метод динамического программирования - student2.ru d2 + d3

0 Метод динамического программирования - student2.ru y2 Метод динамического программирования - student2.ru 3

т.е.

у2 = 0, 1, 2, 3

При этом каждому значению параметра состояния должна отвечать определенная область изменения переменной x1, характеризуемая условием

0 Метод динамического программирования - student2.ru х1 Метод динамического программирования - student2.ru d1 + у2

0 Метод динамического программирования - student2.ru х1 Метод динамического программирования - student2.ru 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 ) и Метод динамического программирования - student2.ru 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, равном

` Метод динамического программирования - student2.ru 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, равном

` Метод динамического программирования - student2.ru 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, равном

Метод динамического программирования - student2.ru 2 (x = y3 = 2) = 2

Результаты табулирования функции F2(x = y3) сведены в Таблице 2.

Таблица 2

x= у3
F2 (x= y3)
Метод динамического программирования - student2.ru (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

` Метод динамического программирования - student2.ru 3 (x = y4 = 0) = 2

Таким образом, мы получили не только минимальные общие затраты на производство и хранение продукции, но и последнюю компоненту оптимального решения. Она равна

x3* = 2

Остальные компоненты оптимального решения найдем по обычным правилам метода динамического программирования. Чтобы найти предпоследнюю компоненту, учтем, что

х3 + у3 - d3 = y4

2 + у3 - 2 = 0,

у3 = 0,

Из таблицы 2 значений Метод динамического программирования - student2.ru находим

x2*= Метод динамического программирования - student2.ru 2 (x = y3 = 0) = 1

Аналогично, продолжая двигаться в обратном направлении и учитывая, что

х2 + у2 - d2 = y3

1 + у2 - 1 = 0,

у2 = 0

из таблицы (1) значений х1(x) находим

x1*= Метод динамического программирования - student2.ru 1 (x = y2 = 0) = 1

Итак, оптимальный план производства имеет вид

х1 = 1

х2 = 1

х3 = 2

а минимальные общие затраты составляют 30 единиц.


Наши рекомендации