Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

na_letniyu_sessiyu / МММ / CheskidovEkonMathMethods&ModelsLec / Динамическое прогаммирование

.doc
Скачиваний:
31
Добавлен:
16.03.2016
Размер:
160.26 Кб
Скачать

Тема 14

Динамическое программирование

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

В данной теме решающее значение по-прежнему имеет одновременный учет всех ограничений системы, однако излагаемый здесь материал в основном посвящен динамическим структурным зависимостям оптимизационных моделей. Вначале рассматриваются детерминированные задачи, так что в каждой из них процесс решения приводит к однозначному результату. Затем исследуются вероятностные модели.

Ниже мы изучим условия, которым должен удовлетворять оптимальный многошаговый процесс принятия решений, и покажем, каким образом использовать эти условия для нахождения лучшего варианта. Подобный анализ часто называют динамическим программированием. Будем рассматривать конечный плановый период, в конце темы обсудим особенности оптимизации в условиях бесконечного планового периода с учетом дисконтирования во времени и приведения экономических показателей к исходному моменту времени.

Вот некоторые типичные области применения моделей динамического программирования при принятии решений:

Разработка правил управления запасами, устанавливающих момент пополнения запасов и размер пополняющего заказа.

Разработка принципов календарного планирования производства и выравнивания занятости в условиях колеблющегося спроса на продукцию.

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

Распределение дефицитных капитальных вложений между возможными новыми направлениями их использования.

Выбор методов проведения рекламной кампании, знакомящей покупателя с продукцией фирмы.

Систематизация методов поиска ценного вида ресурса.

Составление календарных планов текущего и капитального ремонта сложного оборудования.

Разработка долгосрочных правил замены выбывающих из эксплуатации основных фондов.

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

На небольшом примере (эта задача встречалась в теме 12, пример 12.1) объясним важные идеи динамического программирования, а также введем необходимые условные обозначения.

Пример 14.1. Рассмотрим транспортную сеть (задача о кратчайшем маршруте).

10 7

2 12 5 3 1

5 5

10

1 7 4 4

15 7

13 1

Рис. 14.1. Задача о кратчайшем маршруте.

Пусть сij – расстояние (или стоимость переезда) от пункта i в пункт j (на рисунке заданы числами у каждой стрелки). Необходимо выбрать такой путь от пункта 1 до пункта 10, для которого его длина (или общая стоимость переезда) является минимальной.

Из пункта 1 можно переехать в пункт 2, 3 или 4; из пункта 2 в пункт 5 или 6 и т.д. Назовем нахождение в пункте – состоянием системы, переезд из пункта в пункт – процессом перехода из одного состояния в другое. Таким образом, переезд из пункта 1 в пункт 3 есть одношаговый процесс, а скажем, из пункта 1 в пункт 10 – многошаговый процесс перехода из состояния 1 в состояние 10.

Выбор процесса перехода из состояния i в состояние j назовем стратегией. Допустим мы нашли оптимальный (в данном случае минимальный) маршрут и находимся в его промежуточном пункте, тогда, независимо от пути достижения этого пункта (состояния), оптимальный путь из данного пункта до конечного состояния есть часть общего оптимального пути. Этот принцип оптимальности впервые был сформулирован Р.Беллманом в 1953 г. Приведем этот принцип в формулировке Елены Сергеевны Вентцель[12]:

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

Введем следующие обозначения:

fn(s) – стоимость, отвечающая стратегии минимальных затрат для пути от состояния s до конечного состояния, если до него остается n шагов;

хn(s) – решение, позволяющее достичь fn(s).

Т.е. хn(s) соответствует пути минимальной длины от состояния s до конечного состояния, которое достигается за n шагов.

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

Имеем f0(10)=0 для х0(10)= остановка. Затем

f1(8)=1+0=1 для х1(8)=10,

f1(9)=4+0=4 для х1(9)=10. Далее

f2(5)=min(7+1,5+4)=8 для х2(5)=8,

f2(6)=min(3+1,4+4)=4 для х2(6)=8,

f2(7)=min(7+1,1+4)=5 для х2(7)=9.

Для третьего (с конца) шага имеем:

f3(2)=min(10+8,12+4)=16 для х3(2)=6,

f3(3)=min(5+8,10+4,7+5)=12 для х3(3)=7,

f3(4)=min(15+4,13+5)=18 для х3(4)=7.

И, наконец, f4(1)=min(2+16,5+12,1+18)=17 для х4(1)=3.

Мы получили оптимальный путь (наименьшей длины или стоимости) равный 17. Он проходит через события 1-3-7-9-10.

Заметим, что на каждом шаге мы пользовались динамическим рекуррентным соотношением:

fn(s)=min(s,j)( сsj + fn-1(j)), n=1,2,3,4. (14.1)

Очевидно, динамическое программирование здесь более эффективно, чем прямой перебор всех возможных маршрутов, сопровождаемый их оценкой. В данном примере имеется 14 возможных путей; чтобы для каждого определить оценку, придется суммировать четыре числа. Следовательно, для простого перебора потребуется 3*14=42 операции сложения, тогда как мы управились за 16 операций. Преимущество рекуррентного подхода может оказаться огромным при практическом применении, когда полный перебор обычно неосуществим.

Пример 14.2. Распределение Q средств между N предприятиями.

Пусть хn – средства, выделенные n-му предприятию; они приносят в конце года прибыль сnn).

Будем считать, что хn принимает только целые значения, прибыль сnn) не зависит от вложения средств в другие предприятия и суммарная прибыль равна сумме прибылей, полученных от каждого предприятия. Тогда модель имеет вид:

Найти целочисленные неотрицательные переменные хn (n=1,2,…,N), удовлетворяющие ограничению:

nхn = Q, (14.2)

и обращающие в максимум функцию

С=∑n сnn). (14.3)

Здесь процесс распределения средств можно рассматривать как многошаговый, номер шага совпадает с номером предприятия; состояние будет определяться величиной sn – количество средств, подлежащих распределению на n-м шаге (с конца).

Обозначим fn(sn) – условную оптимальную прибыль, полученную от последних n предприятий при распределении между ними sn средств и вычисляемую в соответствие с динамическим рекуррентным соотношением:

fn(sn)=mаххnn) + fn-1(sn-1)), n=1,2,…,N. (14.4)

Пусть N = 4, Q =5, значения сnn) заданы в табл. 14.1.

Таблица 14.1.

х

с4(х)

с3(х)

с2(х)

с1(х)

1

8

6

3

4

2

10

9

4

6

3

11

11

7

8

4

12

13

11

13

5

18

15

18

16

Как и в предыдущем примере начинаем анализ с последнего предприятия. Индекс «1» соответствует последнему предприятию, а индекс «4» - первому. Для n=1 прибыль проставлена в последней колонке.

Для n=2

f2(0)=mах[с2(0)+f1(0)]=0 при x2(0)=0,

f2(1)=mах[с2(1)+f1(0),с2(0)+f1(1)]=mах[3+0,0+4]=4 при x2(1)=0,

f2(2)=mах[с2(2)+f1(0),c2(1)+f1(1),с2(0)+f1(2)]=mах[4+0,3+4,0+6]=7 при x2(2)=1,

f2(3)=mах[с2(3)+f1(0),с2(2)+f1(1),с2(1)+f1(2),с2(0)+f1(3)]=mах[7+0,4+4,3+6,0+8]=9

при x2(3)=1,

f2(4)=mах[с2(4)+f1(0),с2(3)+f1(1),с2(2)+f1(2),с2(1)+f1(3),с2(0)+f1(4)]=

=mах[11+0,7+4,4+6,3+8,0+13]=13 при х2(4)=0,

f2(5)=mах[с2(5)+f1(0),с2(4)+f1(1),с2(3)+f1(2),с2(2)+f1(3),с2(1)+f1(4),с2(0)+f1(5)]=

=mах[18+0,11+4,7+6,4+8,3+13,0+16]=18 при x2(5)=5.

Для n=3

f3(0)=mах[с3(0)+f2(0)]=0 при x3(0)=0,

f3(1)=mах[с3(1)+f2(0),с3(0)+f2(1)]=mах[6+0,0+4,]=6 при x3(1)=1,

f3(2)=mах[с3(2)+f2(0),c3(1)+f2(1),с3(0)+f2(2)]=mах[9+0,6+4,0+7]=10 при x3(2)=1,

f3(3)=mах[с3(3)+f2(0),с3(2)+f2(1),с3(1)+f2(2),с3(0)+f2(3)]=mах[11+0,9+4,6+7,0+9]=13

при x3(3)=1 или 2,

f3(4)=mах[с3(4)+f2(0),с3(3)+f2(1),с3(2)+f2(2),с3(1)+f2(3),с3(0)+f2(4)]=

=mах[13+0,11+4,9+7,6+9,0+13]=16 при х3(4)=2,

f3(5)=mах[с3(5)+f2(0),с3(4)+f2(1),с3(3)+f2(2),с3(2)+f2(3),с3(1)+f2(4),с3(0)+f2(5)]=

=mах[15+0,13+4,11+7,9+9,6+13,0+18]=19 при x3(5)=1.

И, наконец, для n=4

f4(0)=mах[с4(0)+f3(0)]=0 при x4(0)=0,

f4(1)=mах[с4(1)+f3(0),с4(0)+f3(1)]=mах[8+0,0+6,]=8 при x4(1)=1,

f4(2)=mах[с4(2)+f3(0),c4(1)+f3(1),с4(0)+f3(2)]=mах10+0,8+6,0+10]=14 при x4(2)=1,

f4(3)=mах[с4(3)+f3(0),с4(2)+f3(1),с4(1)+f3(2),с4(0)+f3(3)]=mах[11+0,10+6,8+10,0+13]=18

при x4(3)=1,

f4(4)=mах[с4(4)+f3(0),с4(3)+f3(1),с4(2)+f3(2),с4(1)+f3(3),с4(0)+f3(4)]=

=mах[12+0,11+6,10+10,8+13,0+16]=21 при х4(4)=1,

f4(5)=mах[с4(5)+f3(0),с4(4)+f3(1),с4(3)+f3(2),с4(2)+f3(3),с4(1)+f3(4),с4(0)+f3(5)]=

=mах[18+0,12+6,11+10,10+13,8+16,0+19]=24 при x4(5)=1.

Теперь соберем оптимальное решение:

Для первого предприятия, когда s4=5, видим, что x4(5)=1, значит первое предприятие получает 1 и остается s3=s4–x4(5)=5–1=4. Находим лучшее размещение средств для второго предприятия (на третьем с конца шаге) при s3 =4. Это х3(4)=2, остается s2=s3–x3(4)=4–2=2. На втором (с конца) шаге x2(2)=1 и на последнее предприятие (первый с конца шаг) остается s1 = s2 – x2(2)=2–1=1 и x1(1)=1.

Максимум суммарной прибыли равен 24 у.е.

Применим изложенный выше подход к решению простейшей задачи управления запасами.

Пример 14.3. Необходимо разработать такую календарную программу выпуска изделия на плановый период, состоящий из Т временных отрезков, при которой общая сумма затрат на производство и на содержание запасов минимизируется при условии полного и своевременного удовлетворения спроса. Обозначим:

dn – спрос на отрезке n от конца;

cn(x,s) – затраты на отрезке n, связанные с выпуском х единиц изделия и с содержанием запасов, объем которых на конец отрезка равен s единиц. В этой системе обозначений подстрочный индекс «1» соответствует конечному, а «Т» - начальному состоянию.

Состояние системы в начале каждого отрезка определяется уровнем запасов, поэтому для принятия решения об объеме выпуска не нужно знать, каким образом достигнут этот уровень, т.е. опять же имеем систему без обратной связи. Пусть fn(s) – стоимость, отвечающая стратегии минимальных затрат на n оставшихся отрезках при уровне запасов s на начало n-го от конца отрезка;

xn(s) – объем выпуска, обеспечивающий достижение fn(s).

Пусть уровень запасов на конец планового периода равен нулю, тогда при уровне запасов s на начало последнего (1-го от конца) отрезка выпуск x1(s)= d1–s и

f1(s)= c1(x,0)= c1(d1 – s,0), s=0,1,…,d1.

Заметим, что если начальный уровень запасов отрезка n равен s, а объем выпуска – х, то величина (s+х–dn) – есть уровень запасов на конец данного отрезка, отсюда получаем общее рекуррентное соотношение в виде:

fn(s) = minx[cn(x, s+х–dn)+ fn-1(s+х–dn)], n=1,…,Т, s=0,1,…,d1+…+ dn.

Для упрощения вычислений предположим, что производственные мощности и складские площади ограничены, пусть х=0,1,…,5 и s=0,1,…,4. Допустим также, что спрос и затраты постоянны во времени, и пусть dn=3, а cn(x, s)= c(x)+hs, где первое слагаемое относится к производству, а второе определяется стоимостью содержания запасов (арендная плата за складские помещения, проценты за кредит для создания запасов, страховые взносы и собственно расходы по содержанию запасов). Пусть с(0)=0, с(1)=15, с(2)=17, с(3)=19,с(4)=21, с(5)=23; h=1.

Для n=1 f1(0)=с(3)=19 при x1(0)=3,

f1(1)=с(2)=17 при x1(1)=2,

f1(2)=с(1)=15 при x1(2)=1,

f1(3)=с(0)=0 при x1(3)=0.

Для n=2 f2(0)=min[с(3)+0+f1(0),c(4)+1+f1(1),c(5)+2+f1(2)]=

=min[19+19,21+1+17,23+2+15]=38 при x2(0)=3,

f2(1)=min[с(2)+0+f1(0),c(3)+1+f1(1),c(4)+2+f1(2),c(5)+3+f1(3)]=

=min[17+19,19+1+17,21+2+15,23+3+0]=26 при x2(1)=5,

f2(2)=min[с(1)+0+f1(0),c(2)+1+f1(1),c(3)+2+f1(2),c(4)+3+f1(3)]=

=min[15+19,17+1+17,19+2+15,21+3+0]=24 при x2(2)=4,

f2(3)=min[с(0)+0+f1(0),c(1)+1+f1(1),c(2)+2+f1(2),c(3)+3+f1(3)]=

=min[0+19,15+1+17,17+2+15,19+3+0]=19 при x2(3)=0,

f2(4)=min[с(0)+1+f1(1),c(1)+2+f1(2),c(2)+3+f1(3)]=

=min[0+1+17,15+2+15,17+3+0]=18 при x2(4)=0.

Для n=3 f3(0)=min[с(3)+0+f2(0),c(4)+1+f2(1),c(5)+2+f2(2)]=

=min[19+38,21+1+26,23+2+24]=48 при x3(0)=4,

f3(1)=min[с(2)+0+f2(0),c(3)+1+f2(1),c(4)+2+f2(2),c(5)+3+f2(3)]=

=min[17+38,19+1+26,21+2+24,23+3+19]=45 при x3(1)=5,

f3(2)=min[с(1)+f2(0),c(2)+1+f2(1),c(3)+2+f2(2),c(4)+3+f2(3),c(5)+4+f2(4)]=

=min[15+38,18+26,21+24,24+19,23+4+18]=43 при x3(2)=4,

f3(3)=min[с(0)+0+f2(0),c(1)+1+f2(1),c(2)+2+f2(2),c(3)+3+f2(3),c(4)+4+f2(4)]=

=min[0+38,16+26,19+24,22+19,25+18]=38 при x3(3)=0,

f3(4)=min[с(0)+1+f2(1),c(1)+2+f2(2),c(2)+3+f2(3),c(3)+4+ f2(4)]=

=min[1+26,17+24,20+19,23+18]=27 при x3(4)=0.

И, наконец, для n=4

f4(0)=min[с(3)+0+f3(0),c(4)+1+f3(1),c(5)+2+f3(2)]=

=min[19+48,21+1+45,23+2+43]=67 при x4(0)=3 или 4,

f4(1)=min[с(2)+0+f3(0),c(3)+1+f3(1),c(4)+2+f3(2),c(5)+3+f3(3)]=

=min[17+48,19+1+46,21+2+43,23+3+38]=64 при x4(1)=5,

f4(2)=min[с(1)+f3(0),c(2)+1+f3(1),c(3)+2+f3(2),c(4)+3+f3(3),c(5)+4+f3(4)]=

=min[15+48,18+45,21+43,24+38,23+4+27]=54 при x4(2)=5,

f4(3)=min[с(0)+0+f3(0),c(1)+1+f3(1),c(2)+2+f3(2),c(3)+3+f3(3),c(4)+4+f3(4)]=

=min[0+48,16+45,19+43,22+38,25+27]=48 при x4(3)=0,

f4(4)=min[с(0)+1+f3(1),c(1)+2+f3(2),c(2)+3+f3(3),c(3)+4+ f3(4)]=

=min[1+45,17+43,20+38,23+27]=46 при x4(4)=0.

Сведем результаты вычислений в таблицу 14.2.

s

n=1

n=2

n=3

n=4

n=5

n=6

n=7

n=8

х1

f1

x2

f2

x3

f3

x4

f4

x5

f5

x6

f6

x7

f7

x8

f8

0

3

19

3

38

4

48

3,4

67

5

79

4

96

3,4

115

5

127

1

2

17

5

26

5

45

5

64

5

74

5

93

5

106

5

123

2

1

15

4

24

4

43

5

54

4

72

4

91

5

102

4

120

3

0

0

0

19

0

38

0

48

0

67

0

79

0

96

0

115

4

0

18

0

27

0

46

0

65

0

75

0

94

0

107

Читателю предоставляем возможность проверить результаты вычислений для n = 5 – 8. Теперь, задаваясь различным уровнем запасов на начало планового периода, можно определить оптимальные стратегии для любого Т от 1 до 8. Так, например, если исходный уровень запасов на начало планового периода равен нулю, то оптимальный календарный план при Т=4 будет:

x4(0)=3, x3(0)=4, x2(1)=5, x1(3)=0 или

x4(0)=4, x3(1)=5, x2(3)=0, x1(0)=3

и минимальная общая сумма затрат составит 67.

Пусть Т=8, тогда минимальная общая сумма затрат составит 127 и x8(0)=5, останется на следующий отрезок 5-3=2, имеем x7(2)=5, значит на следующий отрезок останется 2+5-3=4 и x6(4)=0, останется 4-3=1 и x5(1)=5, останется 1+5-3=3, x4(3)=0, останется 3-3=0, x3(0)=4, останется 4-3=1, x2(1)=5, останется 1+5-3=3 и x1(3)=0.

В таблицу 14.3 сведем оптимальные стратегии (планы выпуска) для плановых периодов длительностью Т и начальным уровнем запасов равным нулю.

Таблица. 14.3

Плановый период

Т

n=8

янв

n=7

фев

n=6

мар

n=5

апр

n=4

май

n=3

июн

n=2

июл

n=1

авг

Общая

сумма

затрат

Средне- месячные

затраты

1

3

19

19

2

3

3

38

19

3

4

5

0

48

16

4

3

4

4

5

5

0

0

3

67

16.75

5

5

5

0

5

0

79

15.8

6

4

5

0

4

5

0

96

16

7

3

4

4

4

5

5

5

0

0

0

3

4

4

4

5

5

5

0

0

0

3

115

16.43

8

5

5

0

5

0

4

5

0

127

15.9