Está en la página 1de 17

TEORA DE BENDERS

Ejemplo 1
*Tomado del Documento : Optimizacin Estocstica
Ramos, Andrs - Cerisola, Santiago
Algoritmo General

Inicializacin

Solucin del
Solucin del
Subproblema.
Problema Maestro
Actualizar Cota
Superior.

Solucin del
Problema de Suma
de Infactibilades. No

No Si
Fin
Si
Obtener j=j+1, Adicionar Corte
Formar Corte de de Optimalidad
Infactibilidad.

j=j+1, Adicionar Corte


de Infactibilidad
BENDERS THEORY

Min
cTy + f(x)
subject to:

F0 (x) = b0
A y + F (x) = b

y R+
xS
BENDERS THEORY

Min
cTy + f(x)
subject to:

F0(x) = b0

A y + F(x) = b

y R+
x S
BENDERS THEORY

Min
[-1]Ty - 2x
subject to:

x4

[ ] [ ] [ ]
1
3
y+
1
2
x
5
12

0 y
0x
BENDERS THEORY

MinY f(x) + Q(x)


subject to :
Min
2x + q
F0 (x) = b0
yS subject to:

x4
Q(x) k (b - F (x))
k = 1, NP q Si ik (bi - Fi (x))

0x
BENDERS THEORY

MinY f(x) + Q(x)


subject to :
Min
F0 (x) = b0 2x + q
subject to:
yS
x4

q 1k (5 - 1x)
Q(x) k (b - F (x))
k = 1, NP + 2k (12 - 2x)
k = 1, ,2

0x
BENDERS THEORY

MinY f(x) + Q(x)


subject to :
Min
- 2x + q
F0 (x) = b0
subject to:
yS
x4
q - 51k - 121k
Q(x) k (b - F (x))
k = 1, NP (1k + 22k)x
k = 1, ,2

0x
EJEMPLO
1. Suponer solucin inicial (0,4)
2. Solucin del Problema Maestro

3. Solucin del Subproblema con x=0

k
EJEMPLO
1. Suponer solucin inicial (0,4)
2. Solucin del Problema Maestro

3. Solucin del Subproblema con x=0

4. Nuevo Problema Maestro, con Corte de Optimalidad

Corte de Optimalidad
EJEMPLO

Min
- 2x + q

subject to:

x4
q - 51k - 121k (1k + 22k)x
k = 1, ,2

0x
EJEMPLO
5. Solucin del Subproblema con x=4

5. Solucin del Problema Maestro + Nuevo Corte.

6. Fin
EJEMPLO
sets
L mximo nmero de iteraciones / iter-1 * iter-5 /
J(l) iteracin actual
N1 nmero variables primera etapa
M2 nmero restricciones segunda etapa
scalar
TOL tolerancia relativa / 1e-6 /
Z_INF cota inferior / -inf /
Z_SUP cota superior / inf /
parameters
PI2(l,m2) variables duales restricciones segunda etapa
DELTA1(l) coeficiente de cortes de infactibilidad (subproblema infactible)
X1_J(n1,l) valores variables primera etapa hasta iteracin j
Z2_J(l) valores func obj segunda etapa hasta iteracin j
* comienzo datos del problema
sets
M1 nmero restricciones primera etapa / r1-1 * r1-2 /
N1 nmero variables primera etapa / x1-1 * x1-2 /
M2 nmero restricciones segunda etapa / r2-1 * r2-3 /
N2 nmero variables segunda etapa / x2-1 * x2-2 /
parameters
C1(n1) coeficientes funcin objetivo primera etapa
/ x1-1 -1
x1-2 -2 /
C2(n2) coeficientes funcin objetivo segunda etapa
/ x2-1 -2
x2-2 -3 /
B1(m1) cotas restricciones primera etapa
/ r1-1 600
r1-2 0 /
B2(m2) cotas restricciones segunda etapa
/ r2-1 1000
r2-2 500
r2-3 0 /
table A1(m1,n1) matriz de restricciones primera etapa
x1-1 x1-2
r1-1 1 1
r1-2 1 -2
table BM1(m2,n1) matriz de restricciones segunda etapa
x1-1 x1-2
r2-1 1 1
r2-2 1 0
r2-3 0 0
table A2(m2,n2) matriz de restricciones segunda etapa
x2-1 x2-2
r2-1 1 1
r2-2 1 0
r2-3 -2 1
* fin datos del problema
positive variables
X1(n1) variables primera etapa
X2(n2) variables segunda etapa
variables
TT funcin de recursos
Z1 funcin objetivo primera etapa
Z2 funcin objetivo segunda etapa
equations
FOC funcin objetivo problema completo
FO1 funcin objetivo primera etapa
FO2 funcin objetivo segunda etapa
R1(m1) restricciones primera etapa
R2(m2) restricciones segunda etapa
CORTESA(l) cortes de Benders
CORTESB(l) cortes de Benders ;
FOC .. Z1 =E= sum(n1, C1(n1)*X1(n1)) + sum(n2,
C2(n2)*X2(n2)) ;
FO1 .. Z1 =E= sum(n1, C1(n1)*X1(n1)) + TT ;
FO2 .. Z2 =E= sum(n2, C2(n2)*X2(n2)) ;
R1(m1) .. sum(n1, A1(m1,n1)*X1(n1)) =L= B1(m1) ;
R2(m2) .. sum(n1, BM1(m2,n1)*X1(n1)) + sum(n2,
A2(m2,n2)*X2(n2)) =L= B2(m2) ;
CORTESA(j) .. sum(m2, PI2(j,m2)* sum(n1,
BM1(m2,n1)*X1(n1))) + DELTA1(j) * TT =G=
sum(m2, PI2(j,m2)*B2(m2)) ;
CORTESB(j) .. DELTA1(j) * TT =G= Z2_J(j) +
sum(m2, PI2(j,m2)*sum(n1, BM1(m2,n1)*(X1_J(n1,j)
- X1(n1)))) ;
*model MAESTRO / FO1, R1, CORTESA /
model MAESTRO / FO1, R1, CORTESB /
model SUB / FO2, R2 /
model COMPLETO / FOC, R1, R2 /
file COPT / cplex.opt / ;
put COPT putclose 'scaind -1' / 'lpmethod 1' /
'preind 0' / 'epopt 1e-9' / 'eprhs 1e-9' / ;
SUB.OptFile = 1 ;
* inicializacin de parmetros del problema
J(l) = NO ;
TT.FX = 0 ;
DELTA1(l) = 0 ;
PI2(l,m2) = 0 ;
X1_J(n1,l) = 0 ;
Z2_J(l) = 0 ;
loop(l $(ABS(1-Z_INF/Z_SUP) > TOL), En la primera Iteracin se inicia con un
if (ord(l) = 1,
* alternativamente en la primera iteracin se punto.
puede dar una solucin Factible (3,3), sino solucione el
X1.L(n1) = 3 ; problema Maestro. Iteracin 1
Z1.L = sum(n1, C1(n1)*X1.L(n1)) ;
* o resolver directamente el problema maestro
X1(n1) = 3
* solve MAESTRO USING LP MINIMIZING Z1 ; X1(n2) = 3
else Z1 = -9
solve MAESTRO USING LP MINIMIZING Z1 ;
) ;
X1_J(n1,l) = X1.L(n1) ; Se Fija el valor (3,3) y se soluciona el
* fijacin de la variable de la primera etapa
X1
subproblema Iteracin 1
X1.FX(n1) = X1.L(n1) ; X2(n1) = 331.3
solve SUB USING LP MINIMIZING Z2 ;
X2(n2) = 662.6
* adquisicin de los parmetros para formar un
nuevo corte
Duales = (-2.666,0,-0.3333)
if(SUB.MODELSTAT = 4,
* subproblema infactible
DELTA1(l) = 0 ;
Z2_J(l) = SUB.SUMINFES ;
else
* actualizacin de la cota inferior y superior
Se actualizan las Cotas inferior y
Z_INF = Z1.L ; Superior y se imprimen.
Z_SUP = MIN(Z_SUP, Z1.L - TT.L + Z2.L) ;
DELTA1(l) = 1 ; Zinf = -9
Z2_J(l) = Z2.L; Zsup = -2650.667
TT.LO = -inf ; TT.UP = inf ;
) ;
display Z_INF, Z_SUP ;
PI2(l,m2) = R2.M(m2) ;
Se asignan las variables duales al
X1.LO(n1) = 0 ; X1.UP(n1) = inf ; parmetro PI2 para que la restriccin
* Incremento del conjunto de cortes Corte se actualice en el Maestro.
J(l) = yes ;
) ;

abort $(ABS(1-Z_INF/Z_SUP) > TOL) 'Mximo


nmero de iteraciones alcanzado' ;
* resolucin del problema completo
solve COMPLETO USING LP MINIMIZING Z1
loop(l $(ABS(1-Z_INF/Z_SUP) > TOL),
if (ord(l) = 1,
* alternativamente en la primera iteracin se
puede dar una solucin
X1.L(n1) = 3 ;
Z1.L = sum(n1, C1(n1)*X1.L(n1)) ;
* o resolver directamente el problema maestro
* solve MAESTRO USING LP MINIMIZING Z1 ;
else Se resuelve el maestro con el nuevo
solve MAESTRO USING LP MINIMIZING Z1 ;
) ; Corte Iteracin 2
X1_J(n1,l) = X1.L(n1) ; X1(n1) = 0
* fijacin de la variable de la primera etapa
X1(n2) = 0
X1
X1.FX(n1) = X1.L(n1) ; Z1 = -2666.6
solve SUB USING LP MINIMIZING Z2 ;
* adquisicin de los parmetros para formar un
nuevo corte
if(SUB.MODELSTAT = 4,
* subproblema infactible
DELTA1(l) = 0 ;
Z2_J(l) = SUB.SUMINFES ;
else
* actualizacin de la cota inferior y superior
Z_INF = Z1.L ;
Z_SUP = MIN(Z_SUP, Z1.L - TT.L + Z2.L) ;
DELTA1(l) = 1 ; Zinf = -2666.6
Z2_J(l) = Z2.L; Zsup = -2650.667
TT.LO = -inf ; TT.UP = inf ;
) ;
display Z_INF, Z_SUP ;
PI2(l,m2) = R2.M(m2) ;
X1.LO(n1) = 0 ; X1.UP(n1) = inf ;
* Incremento del conjunto de cortes
J(l) = yes ; FIN
) ;

abort $(ABS(1-Z_INF/Z_SUP) > TOL) 'Mximo


nmero de iteraciones alcanzado' ;
* resolucin del problema completo
solve COMPLETO USING LP MINIMIZING Z1