Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
Recordemos el problema de la
mochila:
Se tienen n objetos fraccionables y una
mochila.
El objeto i tiene peso pi y una fraccin xi
(0xi1) del objeto i produce un beneficio
bixi.
maximizar
b
i ximochila, de capacidad
El objetivo
es llenar
la
1i n
C, de manera que se maximice el beneficio.
sujeto a pi xi C
1i n
con 0 xi 1, bi 0, pi 0, 1 i n
Programacin dinmica:
Introduccin
Ejemplo:
n=3
C=15
(b1,b2,b3)=(38,40,24)
(p1,p2,p3)=(9,6,5)
Programacin dinmica:
Introduccin
R. Bellman: Dynamic Programming,
Princeton University Press, 1957.
Programacin dinmica:
Introduccin
Supongamos que un problema se resuelve
tras tomar un secuencia d1, d2, , dn de
decisiones.
Si hay d opciones posibles para cada una
de las decisiones, una tcnica de fuerza
bruta explorara un total de dn secuencias
posibles de decisiones (explosin
combinatoria).
La tcnica de programacin dinmica evita
explorar todas las secuencias posibles por
medio de la resolucin de subproblemas de
tamao creciente y almacenamiento en
una tabla de las soluciones ptimas de
esos subproblemas para facilitar la
solucin de los problemas ms
grandes.
El problema de la
mochila 0-1
maximizar bi xi
ik
sujeto a pi xi P
ik
con xi {0,1}, k i l
El problema de la
mochila 0-1
g
j (c)
Si es el beneficio (o ganancia total)
de una
gj (c) max gj1(c), gj1(c pj ) bj
solucin
ptima de mochila(j,n,c), entonces
c-pj0).
g
c
n1(c) 0, para cualquier capacidad
Adems,
v
g1(C)
Ambas ecuaciones permiten calcular,
que es el valor de una solucin ptima de
mochila(1,n,C).
El problema de la
mochila 0-1
g
j (c)
Sies el beneficio (o ganancia total)
de g
una
j (c) max gj1(c), gj1(c pj ) bj
solucin
ptima de mochila(1,j,c), entonces
Adems,
w
gn(C)
Ambas ecuaciones permiten calcular,
que es el valor de una solucin ptima de
mochila(1,n,C).
El problema de la
mochila 0-1
El problema de la
mochila 0-1
Problema: ineficiencia
Un problema de tamao n se reduce a dos
subproblemas de tamao (n-1).
Cada uno de los dos subproblemas se reduce
a otros dos
Por tanto, se obtiene un algoritmo
exponencial.
gj (c)
grande:
La funcintiene dos parmetros:
el primero puede tomar n valores
distintos y
el segundo, C valores.
Luego slo hay nC problemas diferentes!
El problema de la
mochila 0-1
g
se
j (c)
deben almacenan en una tabla.
Matriz nC cuyo elemento (j,c) almacena
Para el ejemplo anterior:
n=3
C=15
(b1,b2,b3)=(38,40,24)
01 2 3 4 5
1,p2,p3)=(9,6,5)
p(p
1 9 0 0 0 0 0 0
p2 6 0 0 0 0 0 0
p3 5 0 0 0 0 0 24
6
0
40
40
7
0
40
40
8 9
0 38
40 40
40 40
10 11 12 13 14
38 38 38 38 38
40 40 40 40 40
40 64 64 64 64
15
38
78
78
El problema de la
mochila 0-1
algoritmomochila(entp,b:vect[1..n]denat;
algoritmomochila(entp,b:vect[1..n]denat;
entCap:nat;
entCap:nat;
salg:vect[0..n,0..Cap]denat)
salg:vect[0..n,0..Cap]denat)
variablesc,j:nat
variablesc,j:nat
principio
principio
parac:=0hastaCaphacerg[0,c]:=0fpara;
parac:=0hastaCaphacerg[0,c]:=0fpara;
paraj:=1hastanhacerg[j,0]:=0fpara;
paraj:=1hastanhacerg[j,0]:=0fpara;
paraj:=1hastanhacer
paraj:=1hastanhacer
parac:=1hastaCaphacer
parac:=1hastaCaphacer
sic<p[j]
sic<p[j]
entonces
entonces
g[j,c]:=g[j1,c]
g[j,c]:=g[j1,c]
sino
sino
sig[j1,c]?g[j1,cp[j]]+b[j]
sig[j1,c]?g[j1,cp[j]]+b[j]
entonces
entonces
g[j,c]:=g[j1,c]
g[j,c]:=g[j1,c]
sino
sino
g[j,c]:=g[j1,cp[j]]+b[j]
g[j,c]:=g[j1,cp[j]]+b[j]
fsi
fsi
fsi
fsi
fpara
fpara
fpara
fpara
fin
fin
El problema de la
mochila 0-1
algoritmoobjetos(entp,b:vect[1..n]denat;
algoritmoobjetos(entp,b:vect[1..n]denat;
entCap:nat;
entCap:nat;
entg:vect[0..n,0..Cap]denat)
entg:vect[0..n,0..Cap]denat)
principio
principio
test(n,Cap)
test(n,Cap)
fin
fin
algoritmotest(entj,c:nat)
algoritmotest(entj,c:nat)
principio
principio
sij>0entonces
sij>0entonces
sic<p[j]entoncestest(j1,c)
sic<p[j]entoncestest(j1,c)
sino
sino
sig[j1,cp[j]]+b[j]>g[j1,c]
sig[j1,cp[j]]+b[j]>g[j1,c]
entonces
entonces
test(j1,cp[j]);
test(j1,cp[j]);
escribir('meter',j)
escribir('meter',j)
sinotest(j1,c)
sinotest(j1,c)
fsi
fsi
fsi
fsi
fsi
fsi
fin
fin
El problema de la
mochila 0-1
Consideraciones finales
Cada componente de la tabla g se calcula
en tiempo constante, luego el coste de
construccin de la tabla es O(nC).
El algoritmo test se ejecuta una vez por
cada
valor de j, desde n descendiendo hasta 0,
luego su coste es O(n).
Si C es muy grande, entonces esta solucin
no es buena.
Si los pesos pi o la capacidad C son reales,
esta solucin no sirve.
Grafo multietapa:
Un grafo multietapa G=(V,A) es un grafo
dirigido en el que se puede hacer una
particin del conjunto V de vrtices en k
(k2) conjuntos
distintos Vi, 1ik, tal que todo arco del
grafo
(u,v) es tal que uVi y vVi+1 para algn i,
1i<k.
Los conjuntos V1 y Vk tienen un solo vrtice
que se llama vrtice origen, o, y vrtice
V1 d, respectivamente.
V2
V3
V4
V5
destino,
2
5
1
2
3
1
3 4
4
11
6
8
9
5
9
10 d
12
1
2
3
1
3 4
4
11
6
5
9
12
10 d
Ejemplo de aplicacin:
Se tienen n unidades de un recurso que
deben asignarse a r proyectos.
Si se asignan j, 0jn, unidades al
proyecto i se obtiene un beneficio Ni,j.
El problema es asignar el recurso a los r
proyectos maximizando el beneficio total.
v2,0
v3,0
N 1,0
max {N 3,i }
i 0,1,2,3,4
N 2,1
N 1,1
N 2,0
v2,1
o v1,0
i 0,1,2,3
N 2,1
v2,2
N 2,0
v3,2
N 2,1
N 1,3
N 2,2
v2,3
N 1,4
max {N 3,i }
N 2,2
N 2,3
N 1,2
v3,1
N 2,0
N 2,1
v2,4
N
N 2,2 2,3
max{N 3,i }
i 0,1
v3,3
N 2,4
N 2,0
max{N 3,i }
i 0,1,2
v3,4
N 3,0
d v4,4
V2
V3
2
5
1
2
3
1
3 4
4
8
11
6
V4
8
9
V5
5
9
10 d
12
V1
V2
V3
2
5
1
2
3
1
3 4
4
8
11
6
V4
8
9
V5
5
9
12
10 d
si ( j ,d) A
en otro caso
V1
V2
V3
2
5
1
2
3
1
3 4
4
8
11
6
V4
V5
5
9
10 d
12
V2
V3
2
5
1
2
3
1
3 4
4
8
11
6
V4
8
9
D(3,5) 7; D(3,6) 8
D(2,2) 6; D(2,3) 5; D(2,4) 5
D(1,1) 2
v1 1
v2 D(1,1) 2
v3 D(2,D(1,1)) 6
v4 D(3,D(2,D(1,1))) 8
V5
5
9
12
10 d
variablesC:vect[1..n]dereal;
variablesC:vect[1..n]dereal;
D:vect[1..n]de1..n;
D:vect[1..n]de1..n;
j,r:1..n
j,r:1..n
principio
principio
*
C[n]:=0.0;
*
C[n]:=0.0;{ClculodeC
{ClculodeCyD}
yD}
paraj:=n1descendiendohasta1hacer
paraj:=n1descendiendohasta1hacer
r:=vrticet.q.(j,r)A3
r:=vrticet.q.(j,r)A3
c(j,r)+C[r]esmnimo;
c(j,r)+C[r]esmnimo;
C[j]:=c(j,r)+C[r];
C[j]:=c(j,r)+C[r];
D[j]:=r
D[j]:=r
fpara;
fpara;
P[1]:=1;P[k]:=n;
P[1]:=1;P[k]:=n;{Construccindelcamino}
{Construccindelcamino}
paraj:=2hastak1hacer
paraj:=2hastak1hacer
P[j]:=D[P[j1]]
P[j]:=D[P[j1]]
fpara
fpara
fin
fin
Anlogamente, se desarrolla la
recurrencia hacia atrs.
Ecuacin de recurrencia hacia atrs:
Sea s(i,j) un camino de coste mnimo
C*(i,j) desde el vrtice origen o hasta el
vrtice j del conjunto Vi.
Entonces:
c(o, j),
C (2, j)
,
si (o, j) A
en otro caso
V1
V2
V3
2
5
1
2
3
1
3 4
4
8
11
6
V4
V5
5
9
12
10 d
variablesC:vect[1..n]dereal;
variablesC:vect[1..n]dereal;
D:vect[1..n]de1..n;
D:vect[1..n]de1..n;
j,r:1..n
j,r:1..n
principio
principio
*
C[1]:=0.0;
*
C[1]:=0.0;{ClculodeC
{ClculodeCyD}
yD}
paraj:=2hastanhacer
paraj:=2hastanhacer
r:=vrticet.q.(r,j)A3
r:=vrticet.q.(r,j)A3
c(r,j)+C[r]esmnimo;
c(r,j)+C[r]esmnimo;
C[j]:=c(r,j)+C[r];
C[j]:=c(r,j)+C[r];
D[j]:=r
D[j]:=r
fpara;
fpara;
P[1]:=1;P[k]:=n;
P[1]:=1;P[k]:=n;{Construccindelcamino}
{Construccindelcamino}
paraj:=k1descendiendohasta2hacer
paraj:=k1descendiendohasta2hacer
P[j]:=D[P[j+1]]
P[j]:=D[P[j+1]]
fpara
fpara
fin
fin
Multiplicacin de una
secuencia de matrices
Multiplicacin de una
secuencia de matrices
M (M1M 2L Mi )(Mi 1M i 2L M n)
Entonces tenemos T(i)T(n-i) formas distintas.
Como i puede tomar valores entre 1 y n-1:
T (n)
n1
T (i)T (n i) ,
i 1
T (1) 1
Nmeros de Catalan
para n 1
Multiplicacin de una
secuencia de matrices
Por ejemplo:
n 1 2 3 4 5 10
15
T (n) 1 1 2 5 14 4862 2674440
Multiplicacin de una
secuencia de matrices
S. Godbole: On efficient computation
of matrix chain
products, IEEE Transactions on
Computers, 22(9),
pp. 864-866, 1973.
M1M 2L M i y M i1Mi 2L Mn
debern ser realizados de forma ptima para
que el total tambin sea ptimo.
Mtodo:
Construir la matriz [mij], 1ijn, donde mij
da el ptimo (i.e., el nmero de
multiplicaciones
Mi Mi 1L M j
escalares requeridas) para la parte
del producto total.
La solucin final vendr dada por m1n.
Multiplicacin de una
secuencia de matrices
Construccin de [mij], 1ijn:
i ,i
s 1:
1 s n: mi ,i s
min
i ki s1
para i 1,2,K ,n s
Mi Mi 1L M i s
El tercer caso(Mrepresenta
que para
i M i 1L M k)(M k1M k 2L M i s)
calcular
se intentan todas las
posibilidades
y se escoge
0, la mejor.
si i j
ij min
{mcompacta:
De m
forma
ms
ik mk1, j di 1dkdj }, si i j
i k j
Multiplicacin de una
secuencia de matrices
j 1 2
3
4
i 1 0 57851530 2856
La matriz es:
2
s 3
1335 1845
s 2
9078
s1
0
s0
Multiplicacin de una
secuencia de matrices
Multiplicacin de una
secuencia de matrices
algoritmoparentOpt(entd:vect[0..n]denat;
algoritmoparentOpt(entd:vect[0..n]denat;
salm:vect[1..n,1..n]denat;
salm:vect[1..n,1..n]denat;
salkm:vect[1..n,1..n]de1..n)
salkm:vect[1..n,1..n]de1..n)
{meslamatriz[m
{meslamatriz[mijij]definidaantes;
]definidaantes;
km[i,j]guardaelndicekparaelquesealcanza
km[i,j]guardaelndicekparaelquesealcanza
elmnimoalcalcularm[i,j].}
elmnimoalcalcularm[i,j].}
variablesi,r,j,k,q:nat;
variablesi,r,j,k,q:nat;
principio
principio
parai:=1hastanhacer
parai:=1hastanhacer
m[i,i]:=0
m[i,i]:=0
fpara;
fpara;
parar:=2hastanhacer
parar:=2hastanhacer
parai:=1hastanr+1hacer
parai:=1hastanr+1hacer
j:=i+r1;
j:=i+r1;
m[i,j]:=?;
m[i,j]:=?;
parak:=ihastaj1hacer
parak:=ihastaj1hacer
q:=m[i,k]+m[k+1,j]+d[i1]*d[k]*d[j];
q:=m[i,k]+m[k+1,j]+d[i1]*d[k]*d[j];
siq<m[i,j]
siq<m[i,j]
entonces
entonces
m[i,j]:=q;
m[i,j]:=q;
km[i,j]:=k
km[i,j]:=k
fsi
fsi
fpara
fpara
fpara
fpara
fpara
fpara
fin
fin
Multiplicacin de una
secuencia de matrices
Coste en tiempo:
(n3)
Coste en memoria:
(n2)
Multiplicacin de una
secuencia de matrices
funcinmultSec(M:vect[1..n]dematriz;
funcinmultSec(M:vect[1..n]dematriz;
km:vect[1..n,1..n]de1..n;
km:vect[1..n,1..n]de1..n;
i,j:1..n)
i,j:1..n)
devuelvematriz
devuelvematriz
variablesX,Y:matriz
variablesX,Y:matriz
principio
principio
sij>i
sij>i
entonces
entonces
X:=multSec(M,km,i,km[i,j]);
X:=multSec(M,km,i,km[i,j]);
Y:=multSec(M,km,km[i,j]+1,j];
Y:=multSec(M,km,km[i,j]+1,j];
devuelvemult(X,Y)
devuelvemult(X,Y)
sino
sino
devuelveM[i]
devuelveM[i]
fsi
fsi
fin
fin
Problema:
Clculo de los caminos de coste mnimo entre
todos los pares de vrtices de un grafo dirigido sin
ciclos de peso negativo.
Principio de optimalidad:
Si i1, i2, , ik, ik+1, , in es un camino de coste
mnimo de i1 a in, entonces:
En resumen:
k1
funcinFloyd(g:grafo)
funcinFloyd(g:grafo)
devuelvevector[vrt,vrt]deetiq
devuelvevector[vrt,vrt]deetiq
variablesD:vector[vrt,vrt]deetiq;
variablesD:vector[vrt,vrt]deetiq;
u,v,w:vrt;et,val:etiq
u,v,w:vrt;et,val:etiq
principio
principio
{inicialmenteladistanciaentredosvrtices
{inicialmenteladistanciaentredosvrtices
tieneelvalordelaaristaquelosune;
tieneelvalordelaaristaquelosune;
lasdiagonalesseponenacero}
lasdiagonalesseponenacero}
paratodovenvrthacer
paratodovenvrthacer
paratodowenvrthacer
paratodowenvrthacer
D[v,w]:=etiqueta(g,v,w)
D[v,w]:=etiqueta(g,v,w)
{?sinohayarco}
{?sinohayarco}
fpara;
fpara;
D[v,v]:=0
D[v,v]:=0
fpara;
fpara;
...
...
Espacio:
Floyd exige (n2) mientras que Dijkstra precisa
(n)
Un problema de
fiabilidad de sistemas
El problema:
Disear un sistema compuesto de varios
dispositivos conectados en serie.
D1
D2
D3
Dn
Un problema de
fiabilidad de sistemas
Una forma de aumentar la fiabilidad es
duplicar los dispositivos (en paralelo).
D1
D1
D1
Fase 1
D2
D2
Fase 2
D3
D3
D3
D3
Fase 3
Dn
Dn
Dn
Fase n
(1 ri )mi
Luego la fiabilidad de la fase i es
1 (1r i )mi
Por tanto, si ri=0,99 y mi=2, la fiabilidad de la
fase i es 0,9999.
En realidad, la fiabilidad de la fase i es algo
menor que
(las copias de un
m
i
1 (1rno
mismo dispositivo
i ) son completamente
independien-tes pues su diseo es comn,
por ejemplo);
si denotamos la fiabilidad de la fase i por
i (mi )
entonces la fiabilidad del sistema es:
1i n i (mi )
Un problema de
fiabilidad de sistemas
El problema: maximizar la fiabilidad
duplicando los dispositivos y con alguna
limitacin en el coste.
maximizar
i (mi )
1i n
sujeto a
ci mi c
1i m
mi 1 y entero
, 1 i n
ci
Un problema de
fiabilidad de sistemas
Una solucin ptima m1, m2, , mn es el
resultado de una secuencia de decisiones,
una por cada mi.
Denotemos:
fi (x) mximo
sujeto a
1 j i
j (mj )
1 j i
cj mj x
1 mj u j , 1 j i
Un problema de
fiabilidad de sistemas
La ltima decisin requiere elegir mn de
entre
{1,2,3,,un}.
Una vez tomada la ltima decisin, las
restantes decisiones deben utilizar el resto
de fondos
c-cnmn de forma ptima.
fn (c) elmax
n (mde
Se cumple
n) foptimalidad
n1(c cnmn) y
principio
1mnun
En general,
se
tiene:
fi (x) para
max fi(x),
) f i 1
(x
ci mi )
i (mii1,
1mi ui
Recordar:
Encontrar un recorrido de longitud mnima
para un viajante que tiene que visitar
varias ciudades y volver al punto de
partida, conocida la
distancia existente entre cada dos
ciudades.
Es decir, dado un grafo dirigido con arcos
de
longitud no negativa, se trata de encontrar
un circuito de longitud mnima que
comience y termine en el mismo vrtice y
Ms
pase exactamente una
vez por cada uno
vueltas!
de los vrtices restantes
(circuito hamiltoniano).
Adems:
g(i ,) Li 1,
(*)
i 2,3,,n
Mtodo de resolucin:
Usar (*) y calcular g para todos los
conjunto S con un solo vrtice (distinto
del 1).
Volver a usar (*) y calcular g para
todos los conjuntos S de dos vrtices
(distintos del 1) y as sucesivamente.
Cuando se conoce el valor de g para
todos
los conjuntos S a los que slo les falta
un vrtice (distinto del 1) basta
calcular
g(1,V\{1}).
10
0
13
8
15
9
0
9
20
10
12
0
Inicializacin:
g(2,) = 5;
g(3,) = 6;
g(4,) = 8.
g(3,{4}) = 20;
g(4,{3}) = 15.
Finalmente:
g(1,{2,3,4}) min{ L12 g(2,{3,4}),
L13 g(3,{2,4}),
L14 g(4,{2,3}) }
min{ 35,40,43 } 35.
En el ejemplo:
J(2,{3,4}) = 4;
J(4,{2,3}) = 2;
J(3,{2,4}) = 4;
J(1,{2,3,4}) = 2.
(n 1) n 2 k sumas en total
,
k
clculo de g(1,V\{1}): n-1 sumas.
Tiempo de clculo:
n2
n 2
2(n 1) (n 1)k
n22n
k
k1
r
k
r 2r 1
Puesto que k 1 k
(Este tiempo es mejor que (n!) que
resultara de la estrategia de fuerza bruta,
pero)
Coste en espacio (para conservar g y J):
(n2n)
120
3628800
1,31 1012
2,43 1018
800
102400
7372800
419430400
160
10240
491520
20971520
Implementacin recursiva
ineficiente:
funcing(i,S)devuelvenat
funcing(i,S)devuelvenat
variablesmsCorto,distancia,j:nat
variablesmsCorto,distancia,j:nat
principio
principio
siS=
siS=
entonces
entonces
devuelveL[i,1]
devuelveL[i,1]
sino
sino
msCorto:=?;
msCorto:=?;
paratodojenShacer
paratodojenShacer
distancia:=L[i,j]+g(j,S\{j});
distancia:=L[i,j]+g(j,S\{j});
sidistancia<msCorto
sidistancia<msCorto
entonces
entonces
msCorto:=distancia
msCorto:=distancia
fsi
fsi
fpara;
fpara;
devuelvemsCorto
devuelvemsCorto
fsi
fsi
fin
fin
funcing(i,S)devuelvenat
funcing(i,S)devuelvenat
variablesmsCorto,distancia,j:nat
variablesmsCorto,distancia,j:nat
principio
principio
siS=entoncesdevuelveL[i,1]
siS=entoncesdevuelveL[i,1]
sino
sino
sigtab[i,S]?0
sigtab[i,S]?0
entoncesdevuelvegtab[i,S]
entoncesdevuelvegtab[i,S]
sino
sino
msCorto:=?;
msCorto:=?;
paratodojenShacer
paratodojenShacer
distancia:=L[i,j]+g(j,S\{j});
distancia:=L[i,j]+g(j,S\{j});
sidistancia<msCorto
sidistancia<msCorto
entoncesmsCorto:=distancia
entoncesmsCorto:=distancia
fsi
fsi
fpara;
fpara;
gtab[i,S]:=msCorto;
gtab[i,S]:=msCorto;
devuelvemsCorto
devuelvemsCorto
fsi
fsi
fsi
fsi
fin
fin
Planificacin de trabajos
El problema:
Sea un sistema en el que la realizacin de un
con-junto de trabajos requiere la ejecucin por
parte de un conjunto de agentes (o
procesadores) de una serie de tareas
diferentes para cada trabajo.
n trabajos requiriendo cada uno m tareas:
T1i, T2i, , Tmi, 1in
Planificacin de trabajos
Ejemplo:
Se tiene que planificar la ejecucin de dos
trabajos en tres procesadores, de forma que los
tiempos de cada tarea vienen dados por:
2 0
T 3 3
5 2
tiempo 0 1
P1
T11
(a)
P2
T22
P3
2
T21
5
T22
T31
10 11 12
T32
tiempo 0 1 2 3 4 5 6 7 8 9 10 11 12
P1
T11
(b)
P2planificacin
T22
La
(b)Tse
21 dice no apropiativa (nonpreemptive)
porque
de una
P3
T32el procesamiento
T31
tarea no se interrumpe hasta que sta ha
terminado.
La planificacin (a) se dice apropiativa
(preemptive) porque el trabajo 1 se apropia del
procesador 2 antes de que ste termine con el
trabajo 2.
Planificacin de trabajos
El tiempo de terminacin del trabajo i en la
planificacin S es el instante, fi(S), en que
todas
las tareas del trabajo i han terminado.
En el ejemplo (a), f1(Sa)=10 y f2(Sa)=12.
En el ejemplo (b), f1(Sb)=11 y f2(Sb)=5.
El tiempo de
terminacin,
F(S)
max f i (S) f(S), de la
1i n
planificacin S es:
Planificacin de trabajos
Planificacin con tiempo de terminacin
ptimo (OFT) para un conjunto de trabajos:
es una planificacin no apropiativa, S, para la
que F(S) es mnimo entre todas las
planificaciones no apropiativas.
Planificacin apropiativa y con tiempo de
terminacin ptimo (POFT):
es una planificacin apropiativa, S, para la
que F(S) es mnimo entre todas las
planificaciones apropiativas.
Planificacin con tiempo medio de
terminacin
ptimo (OMFT):
es una planificacin no apropiativa, S, para la
que MFT(S) es mnimo entre todas las
planificaciones no apropiativas.
Planificacin apropiativa y con tiempo medio
de terminacin ptimo (POMFT):
es una planificacin apropiativa , S, para la
que MFT(S) es mnimo entre todas las
planificaciones apropiativas.
Planificacin de trabajos
El clculo de OFT y POFT para m>2 y el
clculo de OMFT es computacionalmente
difcil
(es NP-duro).
El clculo de OFT para m=2 puede hacerse
mediante programacin dinmica.
Caso m=2:
Denotemos T1i como ai y T2i como bi.
Una planificacin est completamente
especificada fijando una permutacin de
los trabajos en uno de los procesadores
(coincidir con el otro procesador).
Cada tarea empezar tan pronto como sea
posible.
Ejemplo con 5 trabajos:
P1
P2
a5
a1 a3 a2
b5
a4
b1 b3 b2
b4
planificacin (5,1,3,2,4)
Planificacin de trabajos
Supongamos, para simplificar, que ai0,
1in
(si hay trabajos con ai=0, se construye
primero la planificacin ptima para los
trabajos con ai0 y despus se aaden
delante los trabajos con ai=0).
Principio de optimalidad:
Una permutacin (planificacin) ptima es
tal que, fijado el primer trabajo de la
permutacin, el resto de la permutacin es
ptimo con respecto al estado en que
quedan los dos procesadores despus de
terminar el primer trabajo.
Planificacin de trabajos
Sea g(S,t) la longitud (duracin) de una
planificacin ptima para el subconjunto
de trabajos S suponiendo que el
procesador 2 no estar disponible hasta el
instante t.
Entonces:
g(S,t) min a g S\ {i},b max{t a ,0}
i S
caso tai: 0
t+bi
aj, jS\{i}
ai
bi
bj, jS\{i}
t+bi-ai
ai
bj, jS\{i}
bi
0
bi
Planificacin de trabajos
La ecuacin recursiva resultante podra
resolverse de forma anloga a la del
problema del viajante de comercio, pero
existe una
solucin mejor
Supongamos que i y j son los dos primeros
trabajos (y en ese orden) en la
planificacin
g(S,t) ai g(S\ {i},bi max{t ai ,0})
ptima del subconjunto S; entonces:
ai aj g(S\ {i , j},bj max{bi max{t ai ,0} aj ,0})
1 4 4 4 4 4 44 2 4 4 4 4 4 4 43
tij
Pero:
bj bi aj max{max{t ai ,0},aj bi }
bj bi aj max{t ai ,aj bi ,0}
bj bi aj ai max{t,ai aj bi ,ai }
trabajos
je
g(S,t) aSi
ai dos
g(S\primeros
{j ,i},bi b
max{t,a
j los
j ai aj fueran
j i:ai bj ,aj })
Planificacin de trabajos
Entonces:
g(S,t) g(S,t)
max{t,ai aj bi ,ai } max{t,aj ai bj ,aj }
Para que esto sea cierto para todo valor de t, se
precisa:
O sea:
(*)
Planificacin de trabajos
Ahora, si
min{a1,a2,K ,an ,b1,b2,K bn} ai
Planificacin de trabajos
Planificacin de trabajos
Ejemplo:
Sean n=4, (a1,a2,a3,a4) = (3,4,8,10) y
(b1,b2,b3,b4) = (6,2,9,15).
La secuencia ordenada de los ai y los bi es:
(b2,a1,a2,b1,a3,b3,a4,b4) =
(2,3,4,6,8,9,10,15).
Sea 1,2,3,4 la secuencia ptima.
Planificacin de trabajos