i+1

advertisement
Динамическое программирование
(Dynamic Programming)
Основы
В основе - идея рассмотрения, наряду с заданной инд. задачей,
целого семейства инд. подзадач.
При использовании метода ДП происходит поэтапное
(пошаговое) принятие решений.
Традиционная реализация метода состоит из прямого и
обратного ходов.
На каждом шаге прямого хода находится opt зн. ц.ф. подзадачи,
а также условно-opt зн. одной переменной…
В результате обратного хода по усл.-opt решениям строится
opt решение исх. задачи.
Кратчайший путь
Пример. Дано: ориентированный взвешенный граф G=(V, A),
cij  0 – длина дуги (i, j).
Требуется найти кратчайший путь из s  t.
Если кратчайший путь из s в t проходит через вершину p, то
пути из s в p и из p в t также кратчайшие.
Принцип оптимальности: “подпуть кратчайшего пути также
является кратчайшим”.
Обозначим через d(v) длину кратчайшего пути из s  v. Тогда
d (v)  min{d (i )  civ }  d ( p(v))  c p ( v ),v ,
iI ( v )
где I(v) = {i  V : (i, v)  A}.
s
I(v)
v
t
G
Кратчайший путь (Алгоритм Дейкстры)
1
5
s
2
8
7
4
10
t
6
9
3
Итерации:
1
2
3
4
5
6
7
8
9
10
11
t
1
2
1
3









2
3
4
11
5
6
2
3
2








3
2
4







3
3.5
3






3.5
3


7



3.5
4

5



T=O(|V|2)
M=O(|V|)
Принцип оптимальности
Принцип оптимальности (Р. Беллман). Отрезок opt процесса
от любой его точки до конца процесса сам является opt
процессом с началом в данной точке.
Алг. ДП применим, если:
• выполняется принцип оптимальности Беллмана
• удается выделить отдельные шаги (этапы) процесса
• можно осуществить оптимизацию на каждом шаге.
Задача производства и хранения продукции
n

{ pt xt  ht st  f t yt };

min
x, y ,s
t 1

(I)  st 1  xt  d t  st , t  1, ..., n;
 xt  M t yt , t  1, ..., n;

n 1
n
n
s

s

0
,
s

R
,
x

R
,
y

B
,
n


 0
n
M t   di
i t
0
x1
x5
p1
x2
x4
p2
x3
1
d1
h1
s1
2
d2
h2
s2
p5
p4
p3
3
d3
h3
s3
4
d4
h4
s4
5
d5
Задача производства и хранения продукции
Лемма.
1)  opt решение: st-1xt=0, t=1,…,n.
tk
2)  opt решение : если xt >0, то xt   d i для нек. целого k  0 .
i t
Доказательство. Предположим, что моменты запуска
производства выбраны opt (известно по каким дугам (0,t) идет
положительный поток).
Т.к. в сети нет ограничений на пропускные способности дуг  
opt решение : положительные дуговые потоки определяют дерево.
Значит, только одна из дуг, имеющих концевой вершину t, может
иметь положительный поток  st-1xt = 0
 утверждение 2).
Задача производства и хранения продукции
Обоз.
t
t
st   xi  d1t ,
d it   d j
i 1
j i
n
n
t
 ( p x  h s  f y )   [ p x  h ( x  d
t 1
t t
t t
t
t
t 1
t t
t
i 1
i
1t
n
n
t 1
t 1
)  ft yt ]   (ct xt  ft yt )   ht d1t ,
n
где ct  pt   hi . Введем ц.ф. H (k )  min
i t
исключаем st
x, y
k
 c x
t 1
t t
 f t yt 
Если день t  k является последним, когда осуществлялось
производство (то есть xt=dtk), то, очевидно, функционал H(t1)
также должен принимать min зн. 
H (0)  0;
H ( k )  min {H (t  1)  f t  ct d tk } 
1 t  k
H (t ( k )  1)  f t ( k )  ct ( k ) d t ( k ), k , k  1, ..., n.
H(n) - opt зн. ц.ф.
Т.к. k = t(n) – 1 
t(k) – предпоследний
момент запуска
производства…
T=O(n2), M=O(n)
Пример
n = 4, d = (2, 4, 5, 1), p = (3, 3, 3, 3), h = (1, 2, 1, 1),
f = (12, 20, 16, 8). Вычислим c = (8, 7, 5, 4), n
(d1,1, d1,2, d1,3, d1,4) = (2, 6, 11, 12) и const  ht d1t  37
t 1
Прямой ход. Применив рекуррентные соотношения, получим:
H(0)=0.
H(1)= f1+c1d1=12+82=28; t(1)=1.
H(2)=min{H(0)+f1+c1d1,2, H(1)+f2+c2d2}=
min{12+86, 28+20+74}=min{60, 76} = 60; t(2) = 1.
H(3)=100; t(3) = 1.
H(4)=106; t(4) = 3.
Обратный ход. Из у-о решения t(4)=3  в opt решении последний
раз производство осуществлялось в 3-й день. 
y4=x4=0, y3=1, x3=d3+d4=6.
Т.к. t(2)=1, то y2=x2= 0, y1=1, x1=d1+d2=6.
 opt решение x=(6,0,6,0), y=(1,0,1,0), s=(4,0,1,0).
Другой алгоритм
Сведем исх. задачу к задаче поиска кратчайшего пути в
ориентированном взвешенном графе, в кот.:
• {0,1,...,n} - множество вершин;
• дуги (i, j), для всех i < j
• длина дуги (i, j) равна fi+1+ci+1di+1,j  стоимости запуска
производства + стоимость производства продукции в день i+1 для
удовлетворения потребностей периодов i+1,…,j.
108
100
60
0
28
1
46
48
2
41
83
90
3
12
4
H(k) - длина
кратчайшего пути из
вершины 0  k
Булева задача о ранце
n
z  maxn  c j x j ;
xB
n
a x
j 1
j
j
j 1
 A.
Для =0,1,..., A и векторов (x1,...,xk), k=1,...,n,
рассмотрим семейство задач:
k
Sk ( )  maxk  c j x j ;
(Pk())
xB
k
a x
j 1
j
j
j 1

- если k-й предмет не выбирается, то Sk() = Sk-1();
- иначе, Sk() = ck + Sk-1(  ak).  рекуррентные соотношения:
Sk ( )  max{Sk 1 ( ), ck  Sk 1 (  ak )}
Булева задача о ранце
Прямой ход
S1()=0 при 0<a1; S1()=max{0,c1} при   a1
Находим Sk() и у-о решения xk(), k=2,…,n, =0,1,...,A.
При k=n, получим opt зн. ц.ф. z=Sn(A) и opt зн. n-ой переменной.
Обратный ход
Положим k=n, и =A.
Если у-о реш. xk()=0, то ввиду Sk()=Sk-1(), полагаем xk=0.
Если xk()=1, то Sk()=сk+Sk-1( ak) и полагаем xk=1.
Если k >1, то полагаем = ak, k=k1 и повторяем итерацию.
T=O(nA)
M=O(nA)
Пример
z  max{10
x1  7 x2  25x3  24 x4 };
4
xB
2 x1  x2  6 x3  5 x4  7.

0
1
2
3
4
5
6
7
S1 / x1
0/0
0/0
10 / 1
10 / 1
10 / 1
10 / 1
10 / 1
10 / 1
S2 / x2
0/0
7/1
10 / 0
17 / 1
17 / 1
17 / 1
17 / 1
17 / 1
x*  (1,0,0,1)
S3 / x 3
0/0
7/0
10 / 0
17 / 0
17 / 0
17 / 0
25 / 1
32 / 1
S4 / x4
0/0
7/0
10 / 0
17 / 0
17 / 0
24 / 1
31 / 1
34 / 1
x4*  1
  a4  7  5  2
Целочисленная задача о ранце
n
n
z  maxn  c j x j ;
xZ 
P(A)
n
a x
j 1
j
j
z  maxn  c j x j ;
j 1
P()
 A.
xZ 
n
a x
j 1
j
j
j 1
 .
Теорема. Справедливы следующие рекуррентные соотношения:
S ( ) 

S (  ak )  ck ,
k 1,..., n|a 
max
0    A.
k
Доказательство. Пусть x*() – opt вектор задачи (P()) 
S()=(c, x*()). Если S() > 0   k :
xk* ( )  0  (c, x* ( ))  (c, x* ( )  ek )  ck 
S ( )  S (  ak )  ck  max S (  ak )  ck .
k
max S (  ak )  ck   S (  ai )  ci  (c, x* (  ai ))  ci 
k
(c, x* (  ai )  ei )  (c, x* ( ))  S ( )
Обратный ход
Полагаем x*= 0, и * = А. Найдем индекс k=1,…,n:
S(*)=S(* ak)+ck, ak *.
(*)
Полагаем xk*  xk*  1,  *   *  ak и повторяем итерацию
Если = (*) не выполняется ни для 1 номера k, то построенный
вектор x* opt
T=O(An)
M=O(A+n)
Обратная задача о ранце
n
minn
xZ 
a x ;
j 1
n
c x
j 1
j
j
j
Q( )  minn
j
 B.
P ( )
xZ 
n
c x
j 1
j
j
n
a x ;
j 1
j
j
 .
x0() – opt решение задачи ( P (  ))
Лемма. Функция Q() является неубывающей.
Доказательство. Пусть 2 > 1  x0(2)  доп. р. задачи ( P ( 1 ))
 Q(2) = (a, x0(2))  Q(1).
Рекуррентные соотношения:
Q (0)  0;
Q(  )  min Qmax{ 0,   ck }  ak , 0    B
1 k  n
T=O(nB)
M=O(B+n)
Связь прямой и обратной задач о ранце
Теорема (Связь прямой и обратной задач о ранце). Пусть
~
~
  max{  | Q(  )  A,   0}. Тогда S ( A)   и opt решение
~
0 ~
x (  ) о.з. P (  ) является opt и для п.з. P( A)
Доказательство. Обозн. S*= S(A). Так как x*(A) – доп. вектор для
обеих задач P ( S * ) и P(A), то Q(S*)  (a, x*(A))  A.
~
~
*
Из неравенства Q(S )  A и определения     S *
~
0 ~
С др. ст., т.к. opt решение x (  ) о.з. P (  ) является доп. для
~
0 ~
п.з. (P(A)) ( т.к. (a, x (  ))  Q(  )  A) 
~
~
~
~
  (c, x (  ))  (c, x ( A))  S    S  S ( A)  (c, x (  ))
0
*
*
*
0
Теорема. Пусть ~  min{  | S ( )  B,   0}. Тогда Q( B)  ~
* ~
) п.з. P (~ ) является также opt решением
и opt решение x (
x0(В) о.з. P (B )
Общая задача о ранце
n
S *  S ( A)  maxn  f j ( x j );
xZ 
n
a x
j 1
j
j
 A.
j 1
сепарабельная
функция
Рекуррентные соотношения:
S1 ( ) 
Sk ( ) 
max
x1 0,...,  / a1 
f1 ( x1 ), 0    A;

Sk 1 (  ak xk )  f k ( xk ),
x 0,...,  / a 
max
k
k
k  2,..., n, 0    A.
Задача о ближайшем соседе
• Линейный объект представлен отрезком [0, M], MZ+
• точки разбиения xk[0, M] Z
• f(x, y)  0, 0  x  y  M – затраты на обслуживание отрезка
[x, y]  [0, M]
f(x, y)
0
x
n

S n ( M )  minn1  f ( xi 1 , xi );
xZ 

i 1

0  x0  x1  ...  xn  M .
y
M
k

S k ( y )  mink 1  f ( xi 1 , xi );
P(k, y) 
xZ 
i 1

0  x0  x1  ...  xk  y.
Рекуррентные соотношения
Представим, что задан отрезок [0, y], y[0, M], и известно opt
разбиение  отрезка [0, x], x  y на k1 частей. Тогда
Sk ( y)  min {Sk 1 ( x)  f ( x, y)}
0 x  y
Sk-1(x)
0
f(x, y)
x
y
M
 рекуррентные соотношения:

 f (0, y ), k  1, y  0,..., M ;
Sk ( y)  
min {S k 1 ( x)  f ( x, y )}, k  2, ..., n;

0
  x y
y  0, ..., M .
T=O(nM2)
M=O(nM)
ЗБС с произвольным числом точек разбиения
n
 f ( xi 1 , xi )  min ;
n , xi Z 
 i 1

0  x0  x1  ...  xn  M .
S(x)
f(x, y) 0
f(x, y)
0
x
y
M
 рекуррентные соотношения:
S (0)  0;
S ( y)  min {S ( x)  f ( x, y)},
x 0,1,..., y 1
y  1,2,..., M .
T=O(M2)
M=O(M)
Условие Глебова
Функция f удовлетворяет условию  (Глебова), если  точек
x1y1y2x2 вып. неравенство f(x1, x2)+f(y1, y2)  f(x1, y2)+f(y1, x2).
f(x1, x2)
f(y1, y2)
x1
y1
y2
x2
f(y1, x2)
f(x1, y2)
Замечания
Кроме приведенных выше постановок ЗБС, на практике
встречаются случаи, когда число отрезков разбиения принадлежит
отрезку n  [a, b], где a и b заданные целые числа. Способ
решения таких задач будет рассмотрен на семинарах.
При вычислении opt значений ц.ф. Sk используются только
значения Sk-1, найденные на предыдущем шаге. Если не хранить
всю таблицу значений Sk(y), y = 0, …, Y, k = 1, …, n, а также не
запоминать у-о решения, то можно сократить память в n раз.
Такой вариант ДП называется релаксационным и состоит из
(n1)-го прямого хода…
Download