Динамическое программирование (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 , iI ( 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. tk 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(t1) также должен принимать 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+82=28; t(1)=1. H(2)=min{H(0)+f1+c1d1,2, H(1)+f2+c2d2}= min{12+86, 28+20+74}=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 ; xB 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()) xB 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=k1 и повторяем итерацию. T=O(nA) M=O(nA) Пример z max{10 x1 7 x2 25x3 24 x4 }; 4 xB 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 ; xZ P(A) n a x j 1 j j z maxn c j x j ; j 1 P() A. xZ 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 xZ a x ; j 1 n c x j 1 j j j Q( ) minn j B. P ( ) xZ 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 Qmax{ 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 ); xZ 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], MZ+ • точки разбиения 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 ) minn1 f ( xi 1 , xi ); xZ i 1 0 x0 x1 ... xn M . y M k S k ( y ) mink 1 f ( xi 1 , xi ); P(k, y) xZ i 1 0 x0 x1 ... xk y. Рекуррентные соотношения Представим, что задан отрезок [0, y], y[0, M], и известно opt разбиение отрезка [0, x], x y на k1 частей. Тогда 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 удовлетворяет условию (Глебова), если точек x1y1y2x2 вып. неравенство 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 раз. Такой вариант ДП называется релаксационным и состоит из (n1)-го прямого хода…