Académique Documents
Professionnel Documents
Culture Documents
6
Postgrado de Investigación de Operaciones
Una Solución
Entrada xk
Proceso
Algoritmo para
bajar de peso
Algoritmo
Salida xk+1
Una Mejor
Solución
Inicio
Fin
Inicio
Fin
… … …
DERECHA IZQUIERDA
DERECHA
ÚNICA EXCEPCIÓN
k =N
S = ∑k
k =0
k =N k=0
S = ∑k
k =0
k =N k=0
S = ∑k k<N
k =0 Verdadero
Se incrementa k hasta N k=k+1
k =N k=0
S = ∑k k<N
k =0 Verdadero
k=k+1
Se suma k a S S=S+k
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 37
Representación de un algoritmo
Ejemplo 6.1: Construir un algoritmo que sume los
primeros N números enteros:
Entrada: N S debe tener un valor inicial de 0
Salida: Sumatoria S
k =N k = 0, S = 0
S = ∑k k<N
k =0 Verdadero
k=k+1
S=S+k
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 38
Representación de un algoritmo
Ejemplo 6.1: Construir un algoritmo que sume los
primeros N números enteros:
Entrada: N
Salida: Sumatoria S Comienzo
k =N k = 0, S = 0
S = ∑k k<N Falso
Fin
k =0 Verdadero
k=k+1
S=S+k
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 39
Matlab
Matlab: Matrix Laboratory, Herramienta de
investigación, desarrollo y análisis que permite
expresar en notación matemática familiar el problema,
el método de resolución y la solución.
Ventana
de
comandos
Ventana
de
variables
Ventana
de
historia
2 1
A = 3 5
6 2
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 50
Conceptos Básicos de Matlab
Todo es una matriz.
Escalar es una matriz 1x1.
A = [Escalar] = Escalar
2 1 A(1,1)
A = 3 5
6 2
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 51
Conceptos Básicos de Matlab
Todo es una matriz.
Escalar es una matriz 1x1.
A = [Escalar] = Escalar
2 1
A = 3 5
6 2 A(3,1)
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 52
Operadores Aritméticos
Operadores Aritméticos:
Suma: +
Resta: -
Multiplicación: *
División: /
Exponenciación: ^
Transpuesta: '
F
Condición if Condición
V Paso 1
Paso 1 …
Paso N
Paso n end
F
Condición if Condición
V Paso 1
Paso 1 …
Paso N
Paso n end
Negación: ~
k =N k = 0, S = 0
S = ∑k k<N Falso
Fin
k =0 Verdadero
k=k+1
S=S+k
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 69
Algoritmos en Matlab
Ejemplo 6.1: Construir un programa en Matlab que
sume los primeros N números enteros:
Entrada: N
Salida: Sumatoria S Comienzo
k =N k = 0, S = 0
S = ∑k k<N Falso
Fin
k =0 Verdadero
Estructura repetitiva
k=k+1
while
S=S+k
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 70
Algoritmos en Matlab
Ejemplo 6.1: Construir un programa en Matlab que
sume los primeros N números enteros:
Entrada: N
Salida: Sumatoria S Comienzo
N=5
k = 0, S = 0
k=0
S=0 Falso
k<N Fin
while k < N Verdadero
k=k+1
k=k+1
S=S+1
end S=S+k
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 71
Operaciones útiles en Matlab
Otras operaciones útiles:
; : se coloca al final de una instrucción para evitar la
presentación en pantalla del resultado.
disp(variable): instrucción que presenta en pantalla el
valor de la variable sin incluir el nombre.
: : genera una fila de valores
comienzo:final
comienzo:delta:final
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
-3 -2 -1 0 1 2 3
15
10
0
4
2 4
0 2
0
-2 -2
-4 -4
Iteración 2
Iteración 1 Iteración n
Comienzo
x 0 ∈ S, k = 0
x∈Ω Fin
F
V
xk+1 ∈ A(xk)
k=k+1
Comienzo
Inicialización x 0 ∈ S, k = 0
x∈Ω Fin
F
Búsqueda V
xk+1 ∈ A(xk)
k=k+1
Comienzo
Inicialización x 0 ∈ S, k = 0
Búsqueda V
xk+1 ∈ A(xk)
k=k+1
ε : Error aceptable
K g(n)
f(n)
n0
K g(n)
f(n)
n0
K g(n)
f(n)
n0
K g(n)
f(n)
n0
n
O *m*m
m
n m
≤ n
m
O(n m *m 2 )
O(n m
)
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 110
Desempeño de un Algoritmo
Determinar la complejidad de un
algoritmo es una arte que requiere de
mucha destreza, ingenio y experiencia
La complejidad de un algoritmo
establecerá su utilidad práctica
Programación No Lineal
Programación Convexa
Programación Lineal
Politope en R2
Punto Extremo
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 120
Conjuntos poliédricos
Ejemplo 6.7: Determinar el conjunto de puntos
extremos Eext del siguiente conjunto:
S={x∈R2:[1 1] x ≤ 2, [–1 2] x ≤ 2, [–1 0] x ≤ 0, [0 –1]
x ≤ 0}
x2
S
x1
d R
x=x0+µd
x0
∀x∈S, x + µd ∈ S, ∀µ ≥ 0
x B B −1b
x= =
x N 0
Si:
1. xj = 0, se obtiene la solución básica original.
xB = B-1b
Si:
1. xj = 0, se obtiene la solución básica original.
xB = B-1b
2. A medida que xj aumenta se tienen soluciones
factibles más no básicas al desplazarse sobre B-1aj:
xB = B-1b – B-1ajxj
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 144
Conjuntos poliédricos
S = {x∈En: A x ≤ b, x ≥ 0}
donde A∈E
∈ m,n, b∈E
∈ m y rgo(A) = m.
j=1 j=1
5
x = ∑ α jx j
j=1
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 152
Programación Lineal
Problema de Programación Lineal (PL): Consiste en la
optimización de una función lineal sobre un conjunto
poliédrico.
Muchos problemas reales pueden formularse o
aproximarse mediante programas lineales. La PL se
utiliza con frecuencia en la resolución de problemas
no lineales y aún en casos discretos.
min cTx
s. a:
x∈S
siendo S un conjunto poliédrico en En.
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 153
Programación Lineal
El problema PL puede expresarse como:
k q
min ∑ (
j=1
c T j
x )α j + ∑ d )µ j
( c T j
j=1
s. a: k
∑α
j=1
j =1
αj ≥ 0 (j = 1, 2,…,k)
µj ≥ 0 (j = 1, 2,…,q)
s. a:
min ∑ x )α j
( c
j=1
T j
∑αj=1
j =1
αj ≥ 0 (j = 1, 2,…,k)
donde las variables de decisión son α1, α2, ..., αk
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 157
Programación Lineal
Sea xp un punto extremo que corresponde al mínimo
de z, entonces:
αp = 1
αj = 0 (j=1,2,...,p – 1,p + 1,...k).
min{cTxj}
x2
f
x3 x*
f*
x2
f(x3)
S f(x2)
x1 x1 f(x1)
x2
f* f
x3
x2
f(x3)
S f(x2)
x1 x1 f(x1)
x2
f
x*
x2
f*
S f(x2)
x1 x1 f(x1)
luego:
x B
Ax = (B N ) = Bx B + Nx N = b
x N
Por lo tanto:
−1 −1
xB = B b − B N xN
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 163
Método Simplex
Al evaluar el objetivo se llega a
T T xB T T
z = c x = [cB cN ] x = c B x B + c N xN
N
B0=I, xB0 = b, k = 0
T k-1 k T F
k
cB B N - cN >
k 0T Fin
k= k + 1
V
T k-1 k T
Bk+1 = Bk cambiar k
max{cB B N - cN }=cj
k
br por aj de A
-1 j V
yk = k
B a ≤0 Fin
xk+1=xk+λdk
F
− y k
x kBh k x kB r
k
d = k λ = min k : y h > 0 = k
1≤ h ≤ m y y r
e h
T k-1 k T F
k
cB B N - cN >
k 0T Fin
k= k + 1
V
T k-1 k T
Bk+1 = Bk cambiar k
max{cB B N - cN }=cj
k
br por aj de A
Búsqueda
-1 j V
yk = k
B a ≤0 Fin
xk+1=xk+λdk
F
− y k
x kBh k x kB r
k
d = k λ = min k : y h > 0 = k
1≤ h ≤ m y y r
e h
T k-1 k T F
k
cB B N - cN >
k 0T Fin
k= k + 1
V Solución finita
T k-1 k T
Bk+1 = Bk cambiar k
max{cB B N - cN }=cj
k
br por aj de A
Búsqueda
-1 j V
yk = k
B a ≤0 Fin
xk+1=xk+λdk
F Solución ilimitada
− y k
x kBh k x kB r − y j
x = x + λ k
k
k
d = k λ = min k : y h > 0 = k e
1≤ h ≤ m y y r
e h
max z = x1 + 2x2
s. a:
x1 + x2 ≤ 6
x2 ≤ 3
x1, x2 ≥ 0
min – x1 – 2x2
s. a:
x1 + x2 ≤ 6
x2 ≤ 3
x1, x2 ≥ 0
min – x1 – 2x2
s. a:
x1 + x2 + x3 = 6
x2 + x4 = 3
x1, x2, x3, x4 ≥ 0
x1
x
x=
2
x 3
x 4
1 0
B = 0
= a 3
[ a 4
]
0 1
↓
0 x 3 6
xB = =
x 4 3
k=0
01 1 0 0 0 − 1
N = cB = cN =
0 1 0 − 2
−1
1 0 1 1
[0 0] − [− 1 − 2]
0 1 0 1
[1 2] > [0 0]
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 182
Método Simplex
T k-1 k T
k
max{cB B N - cN }=cj
k
F
−1
0 1 0 1 1
y = =
0 1 1 1
0 0
y >
0
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 183
Método Simplex
x kBh k x kB r
Hallar λ: λ = min k : y h > 0 = k
1≤ h ≤ m y y r
h
0
B1 x 6 x 3 x
0
B2
0
B2
λ = min = , = = = 3 → r=2
0
1≤h ≤ 2 y
1 1 y 1 y 0
2
0
2
− y k
Calcular d0:
k
d = k
0 e
1 k=2
d =
0
− 1
y0
− 1
Hallar la nueva solución: xk+1=xk+λdk
0 0 0 0
1 0 3 3
x 1 = x 0 + 3 = + =
− 1 6 − 3 3
− 1 3 − 3 0
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 185
Método Simplex
1 1 x 3
B = a1
[ 3
a =2
0 1
]
xB 1
=
x 2
Hacer k = k + 1 = 1
Siguiente Iteración
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 186
Método Simplex
F
Iteración 2: T -1
cBk Bk Nk - cNk > 0T
T
Fin
Se calcula cB 1TB1-1N1 -
T
cN :
1 V
11 0 1 0 1 − 1
N = cB = cN =
0 1 − 2 0
−1
1 1 1 0
[0 − 2] − [− 1 0]
0 1 0 1
[1 − 2] > [0 0]
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 187
Método Simplex
T -1 T
max{cBk Bk Nk - cNk }=cj
F
−1
1 1 1 1
1
y = =
0 1 0 0
1 0
y >
0
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 188
Método Simplex
x kBh k x kB r
Hallar λ: λ = min k : y h > 0 = k
1≤ h ≤ m y y r
h
x 1B1 3 x 1B1
λ = min 1 = = 1 = 3 → r=1
1 1 y1
1≤h ≤ 2 y
− y k
Calcular d1:
k
d = k
1 k=1 e
0 y1
1 1
d =
− 1 y10
0
Hallar la nueva solución: xk+1=xk+λdk
1 0 3 3
0 3 0 3
x 2 = x 1 + 3 = + =
− 1 3 − 3 0
0 0 0 0
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 190
Método Simplex
1 1 x1
B = a2
[ 1
a =2
0 1
]
xB 2
=
x 2
Hacer k = k + 1 = 2
Más Iteraciones
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 191
Método Simplex
T -
cBk Bk
yk = Bk
k
1 k T
Bk N - cNk yk -1 j
a ≤0 bk dk xk+1 Bk+1
> 0T
0 0
1 0 1 6 1 3 1 1
0 F F
1 0 3 0 1
− 1 0
0
0
0
1 1
2 V - - - - - -
0 1
Con 2 Iteraciones completas se obtuvo el óptimo
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 192
Método del Elipsoide
El método del elipsoide desarrollado por los
matemáticos soviético Shor, Yudin y Nemirovskii, fue
propuesto en 1979 por el matemático soviético, L. G.
Khachian, como una solución de tiempo polinomial,
O(n2), para problemas de Programación Lineal.
El método del Elipsoide consiste en mantener un
elipsoide que contenga una solución del problema
de PL, es decir utilizar un elipsoide cuyo centro sea
una solución factible del PL.
x12 + x22 ≤ 1
en R2
en R2
en R2
∑xk2 ≤ 1
en R2
xT x ≤ 1
en R2
en R2
(x – x0)T(x – x0) ≤ 1
en R2
∇f(x0)T(x – x0) ≥ 0
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 206
Separación de Conjuntos Convexos
El gradiente ∇f(x0)T define un hiperplano que
establece dos semiespacios:
H + = {x ∈ En : ∇f(x0)T(x – x0) ≥ 0}
H – = {x ∈ En : ∇f(x0)T(x – x0) ≤ 0}
x* ∈ {x ∈ En : ∇f(x0)T(x – x0) ≤ 0}
x* ∈ {x ∈ En : ∇f(x0)T(x – x0) ≤ 0}
2
k +1 k
n 2 k + 1 k +1 T
B = 2 B − d ⋅ d
n − 1 n +1
k +1 B • ∇f( x )
k 0
d =−
∇f( x ) B ∇f( x )0 T k 0
min cTx
Ax≤b
cTx ≤ cTx0
Ax≤b
cTx0: Costo en el centro del elipsoide inicial.
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 217
Método del Elipsoide
El método del elipsoide reduce el problema de
optimización a una serie de problema de factibilidad:
{x ∈ En : ∇f(x0)T(x – x0) ≥ 0}
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 220
Método del Elipsoide
En R2:
x2
(0,30)
(20,0) x1
x2
(0,30)
x0
(x1, x2)
S
Solución óptima
(0,0) (20,0) x1
x2
(0,30)
x0
(x1, x2)
cTx ≤ cTx0
S
Solución óptima
(0,0) (20,0) x1
x2
(0,30)
x0
(x1, x2)
cTx ≤ cTx0
Sk
Solución óptima
(0,0) (20,0) x1
{x ∈ En : ∇gk(x0)T(x – x0) ≥ 0}
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 225
Método del Elipsoide
En R2:
x2
(0,30)
(20,0) x1
x2
(0,30)
x0
(x1, x2)
S
Solución óptima
(0,0) (20,0) x1
x2
∇gk(x0)T(x – x0) ≥ 0
(0,30)
∇gk(x0)T(x – x0) ≤ 0 x0
(x1, x2)
S
Solución óptima ∇gk(x0)T(x – x0) )= 0
(0,0) (20,0) x1
n2 k 2 k +1 k +1 T
B k +1 = 2 B − d ⋅d
n −1 n +1
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 231
Método del Elipsoide
Comienzo
Inicialización k = 0, xk=0, Bk = n2 * 22L * I
V F
xk∈S
r= c r = aj
D = r T Bk r
F
D≥ε
Búsqueda
Fin
V
k= k + 1 Bk r
d k +1 =−
D
x k +1 = x k + 1/( n + 1) ⋅ d k +1
n2 k 2 k +1 k +1 T
B k +1 = 2 B − d ⋅d
n −1 n +1
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 232
Método del Elipsoide
Comienzo
Algoritmo k = 0, xk=0, Bk = n2 * 22L * I Se parte de un
esfera centra en 0
V F
xk∈S
r= c r = aj
a j fila j de la matriz A
T k
D constituye la D = r B r
Restricción j | xk∉S
distancia que F
separa los puntos D ≥ ε Fin
V Si xk∉S → PL no
k= k + 1 k +1 B k
r tiene solución factible
d =−
D
x k +1 = x k + 1/( n + 1) ⋅ d k +1
n2 k 2 k +1 k +1 T
B k +1 = 2 B − d ⋅d
n −1 n +1
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 233
Método del Elipsoide
Ejemplo 6.12: Resolver el siguiente problema
utilizando el algoritmo del Elipsoide:
max x1 + 2x2
s. a:
x1 + x2 ≤ 6
x2 ≤ 3
x1, x2 ≥ 0
min – x1 – 2x2
s. a:
x1 + x2 ≤ 6
x2 ≤ 3
x1, x2 ≥ 0
− 1
c=
− 2
x1
x=
x 2
0 x 3 0
xB = =
x 4 0
1 0 14
2 2⋅6
1 0
B =2 2
0
=2
0 1 0 1
16384
0
0
B =
0 16384
k=0
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 240
Método del Elipsoide
V
xk ∈ S
Iteración 1: r= c
Hallar la restricción violada:
Todas las restricciones se satisfacen.
− 1
r =c=
− 2
Calcular la norma: D = r T Bk r
16384 0 − 1
D = [− 1 − 2] − 2
0 16384
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 241
Método del Elipsoide
− 16384
D = [− 1 − 2] = 16384 + 65536
− 32768
D = 81920
Determinar la dirección: k +1 Bk r
d =−
D
16384 0 − 1
0 16384 − 2
1
d =−
81920
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 242
Método del Elipsoide
− 16384
− 32768 16384 / 5
1
d =
d1 = −
65536 / 5
81920
Hallar la nueva solución:
x k +1 = x k + 1/( n + 1) ⋅ d k +1
1 1 16384 5
0
x =x +
2 + 1 65536 5
16384 45 19.08111
1
1
x = x ≅
38. 16223
65536 45
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 243
Método del Elipsoide
Calcular la matriz que define el elipsoide:
k +1 n2 k 2 k +1 k +1 T
B = 2 B − d ⋅d
n −1 n +1
4 16384 0 2 16384 5
B = 1
4 − 1 0 −
16384 3 65536 5
16384 5 [ ]
65536 5
4 16384 0 2 16384 5 32768 5
B =
1
−
3 0 16384 3 32768 5 65536 5
4 212992 15 − 65536 15
B =
1
3 − 65536 15 114688 15 k= k + 1=1
1 851968 45 − 262144 45
B =
− 262144 45 458752 45
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 244
Método del Elipsoide
Iteración 2:
F
Hallar la restricción violada: xk∈S
r = aj
x1 + x2 ≤ 6
1
1
a =
1
Calcular la norma: D = r T Bk r
1114112 45
D = [1 1] = 1114112 45 + 720896 45
720896 45
D = 1835008 45
Determinar la dirección: k +1 Bk r
d =−
D
1114112 45
720896 45
d2 = −
1835008 45
2
− 1114112 45 45 1835008
d =
− 720896 45 45 1835008
2
− 1114112 * 17 /( 28 * 45 )
d =
− 720896 * 11/( 28 * 45 )
2
− 278528 * 17 /( 7 * 45 ) − 278528 * 17 / 315
d = =
− 180224 * 11/( 7 * 45 ) − 180224 * 11/ 315
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 247
Método del Elipsoide
Hallar la nueva solución:
x k +1 = x k + 1/( n + 1) ⋅ d k +1
2 1 − 278528 * 17 / 315
1
x =x +
3 − 180224 * 11/ 315
2
16384 45 1 − 278528 * 17 / 315
x = +
65536 45 3 − 180224 * 11/ 315
− 21.78679
2
x ≅
11. 71829
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 248
Método del Elipsoide
Calcular la matriz que define el elipsoide:
k +1 n2 k 2 k +1 k +1 T
B = 2 B − d ⋅d
n −1 n +1
16505,363 − 10679,941
2
B ≅
− 10679,941 12621, 748
k= k + 1 = 2
Más Iteraciones
Programación No Lineal – Prof. Gonzalo Müller – Clase 6 – GM – 249
Método del Elipsoide