You are on page 1of 8

5.

1PROBLEMAS DE PROGRAMACION ENTERA CON LINGO

1. Una decisión de la corte indica que las inscripciones en cada secundaria en la ciudad
de Metrópolis deben incluir por lo menos un 20% de negros. En la tabla se muestra
el número de alumnos negros y blancos de las secundarias en cada uno de los cinco
distritos escolares de la ciudad.

BLANCOS NEGROS
Distrito 1 80 30
Distrito 2 70 5
Distrito 3 90 10
Distrito 4 50 40
Distrito 5 60 30

La distancia, en millas, que debe viajar un alumno de cada distrito para llegar a cada
secundaria se muestra en la siguiente tabla:

ESC.SEC 1 ESC.SEC 2
Distrito 1 1 2
Distrito 2 0.5 1.7
Distrito 3 0.8 0.8
Distrito 4 1.3 0.4
Distrito 5 1.5 0.6

La política de la dirección de la escuela establece que todos los alumnos de un distrito


dado deben asistir a la misma escuela. Suponiendo que cada escuela debe tener una
población de por lo menos 150 alumnos, formule una PE para minimizar la distancia
total que deben viajar los alumnos de Metrópolis a su secundaria.

MODEL:
SETS:
BN/1,2/:;
DIS/1..5/:;
ESC/1,2/:;
BNDIS(BN,DIS):;
BNESC(BN,ESC):;
DISESC(DIS,ESC):;
ALUMNO(BN,DIS,ESC):Y,X,DISTA,NUME;
ENDSETS

DATA:
DISTA=1,2,.5,1.7,.8,.8,1.3,.4,1.5,.6,
1,2,.5,1.7,.8,.8,1.3,.4,1.5,.6;
NUME=80,80,70,70,90,90,50,50,60,60,
30,30,5,5,10,10,40,40,30,30;
ENDDATA

MIN=@SUM(ALUMNO:X*DISTA);
@FOR(ESC(K):@SUM(BNDIS(I,J):X(I,J,K))>=150);
@FOR(ESC(K):@SUM(BNDIS(I,J)|I#EQ#2:X(I,J,K))*4>=@SUM(BNDIS(I,J)|I#EQ#1:X(
I,J,K)));
@FOR(ALUMNO:X=NUME*Y);
@FOR(DISESC(J,K):Y(1,J,K)=Y(2,J,K));
@FOR(BNDIS(I,J):Y(I,J,1)+Y(I,J,2)=1);

@FOR(ALUMNO:@BIN(Y));
END

2. StateUniversity debe comprar 1100 computadoras de tres vendedores. El vendedor


1 cobra $500 por computadora, más un costo de transporte de $5000. El vendedor 2
cobra $350 más $4000, el vendedor 3 cobra $250 más $6000. El vendedor 1 venderá
a lo más 500 computadoras a la universidad, el vendedor 2 venderá a lo más 900
computadoras, y el vendedor 3 venderá a lo más 400 computadoras. Formule una
PE para minimizar el costo de la compra de las computadoras necesarias.

 EN LINGO

!Xi: #computadoras del vendedor i


Yi: Si compro o no al vendedor i;

MODEL:
SETS:
F/1..3/:CF,CV,X,Y,LIM;
ENDSETS

DATA:
CV=500,350,250;
CF=5000,4000,6000;
LIM=500,900,400;
ENDDATA

MIN=@SUM(F:CV*X+CF*Y);
@FOR(F(I):X(I)<=LIM(I)*Y(I));
@SUM(F:X)=1100;
@FOR(F:@BIN(Y));
END

 ALGEBRAICAMENTE:

MIN 5000Y(1)+4000Y(2)+6000Y(3)+500X(1)+350X(2)+250X(3)

SUBJECT TO
2]- 500 Y( 1) + X( 1) <= 0
3]- 900 Y( 2) + X( 2) <= 0
4]- 400 Y( 3) + X( 3) <= 0
5] X( 1) + X( 2) + X( 3) = 1100
END
INTE 3
Reconsiderando el problema 19, suponga que al inicio del año 1 se han construido y
están en operación las plantas generadoras de energía eléctrica 1-4. Al inicio de cada
año, PSI puede cerrar una planta que está funcionando, o volver a echar a andar una
planta cerrada. En las tablas siguientes se muestran las Capacidades generadoras
deseadas, los costos asociados a la reapertura o cierre de una planta. Formule una PE
para minimizar el costo total para poder satisfacer las demandas de los próximos cinco
años
CAPACIDAD GENERADORA (millones kwh)
AÑO 1 80
AÑO 2 100
AÑO 3 120
AÑO 4 140
AÑO 5 160

Capacidad Costo Costo Costo por


Generadora Operación Reapertura cierre
PLANTA 1 70 1.5 1.9 1.7
PLANTA 2 50 0.8 1.5 1.2
PLANTA 3 60 1.3 1.6 1.3
PLANTA 4 40 0.6 1.1 0.8

!XijYijZij i=Planta j=año;


MODEL:

SETS:
PLA/1..4/:CAPL;
ANO/1..5/:CAPAC;
FUN(PLA,ANO):Y,X,Z,COSOP,COSCIE,COSABR;
ENDSETS

DATA:
CAPL=70,50,60,40;
CAPAC=80,100,120,140,160;
COSOP=1.5,1.5,1.5,1.5,1.5,.8,.8,.8,.8,.8,1.3,1.3,1.3,1.3,1.3,.6,.6,.6,.6,.6;
COSCIE=1.7,1.7,1.7,1.7,1.7,1.2,1.2,1.2,1.2,1.2,1.3,1.3,1.3,1.3,1.3,.8,.8,.8,.8,.8;
COSABR=1.9,1.9,1.9,1.9,1.9,1.5,1.5,1.5,1.5,1.5,1.6,1.6,1.6,1.6,1.6,1.1,1.1,1.1,1.1,1.1;
ENDDATA

MIN=@SUM(FUN:X*COSOP+Y*COSCIE+Z*COSABR);

@FOR(ANO(J):@SUM(FUN(I,J):X(I,J)*CAPL(I))>=CAPAC);
@FOR(FUN(I,J)|J#EQ#1:X(I,J)=1);
@FOR(FUN(I,J)|J#EQ#1:Z(I,J)=0);
@FOR(FUN(I,J)|J#NE#5:X(I,J)-Y(I,J)=X(I,J+1));
@FOR(FUN(I,J):Y(I,J)<=X(I,J));
@FOR(FUN(I,J)|J#NE#1:X(I,J)-Z(I,J)=X(I,J-1));
@FOR(FUN(I,J):Z(I,J)<=X(I,J));

@FOR(FUN:@BIN(Y));
@FOR(FUN:@BIN(X));
@FOR(FUN:@BIN(Z));
END

3. Se disponen de cuatro camiones para entregar leche a cinco tiendas de comestibles.


En la siguiente tabla se muestran la capacidad y el costo diario de operación de cada
camión.

Nota: He supuesto que ese costo diario es por CADA operación, es decir, si el
camión 1 va a dos tiendas, el costo de operación del camión 1 será 45+45=90.

Se puede satisfacer la demanda de una tienda de comestibles mediante un solo camión


pero un mismo camión puede entregar leche a más de una tienda. La demanda diaria
de cada una de las tiendas es la siguiente: tienda 1 demanda 100 galones, tienda
2=200galones, tienda3=300 galones, tienda 4=500 galones, tienda 5 demanda 800
galones. Formule una PE que se puede usar para minimizar el costo diario para
satisfacer las demandas de las cinco tiendas.

CAPACIDAD COSTO
(galones) OPERACIÓN
($)
Camión 1 400 45
Camión 2 500 50
Camión 3 600 55
Camión 4 1100 60
! Xij=galones transportados i=camión j=tienda;

MODEL:

SETS:
CA/1..4/:CAP,OPE;
TI/1..5/:DEM;
MILK(CA,TI):X,Y,COS;
ENDSETS

DATA:
CAP=400,500,600,1100;
COS=45,45,45,45,45,50,50,50,50,50,55,55,55,55,55,60,60,60,60,60;
DEM=100,200,300,500,800;
ENDDATA

MIN=@SUM(MILK:COS*Y);
@FOR(TI(J):@SUM(CA(I):X(I,J))=DEM(J));
@FOR(MILK(I,J):X(I,J)<=CAP(I)*Y(I,J));
@FOR(CA(I):@SUM(TI(J):X(I,J))<=CAP(I));

@FOR(MILK:@BIN(Y));
END

SECUENCIACIÓN EN LINGO

Sea la siguiente matriz de tiempos:

MAQUINA
J
TRABAJO I M1 M2 M3
A 3 -- 8
B 7 3 --
C 5 4 3

Donde Dij es el tiempo de operación del trabajo i en la máquina j.


Sea la secuencia de operaciones de cada uno de los trabajos:

SECUENCIA K
TRABAJO I 1 2 3
A M3 M1 --
B M2 M1 --
C M1 M3 M2

Se pide determinar el tiempo mínimo de ejecución de los trabajos.

Tij = Tiempo de inicio del trabajo i en la máquina j


Dij = duración del trabajo i en la máquina j
TT = Tiempo total del programa
Yk = 1 Si se cumple que, por ejemplo, el trabajo1 en la máquina 1 es anterior al trabajo
2 en la máquina 1.

FORMULACIÓN EN LINGO:

!PROBLEMA DE SECUENCIACIÓN
Tij= Tiempo de Inicio del trabajo i en la máquina j
Dij = Duración
TT = tiempo total del programa;

MODEL:

SETS:
A/1/:TT;
B/1..5/:Y;
TR/1..3/:;
MQ/1..3/:;
GOL(TR,MQ):T,D;
ENDSETS
MIN=@SUM(A:TT);
@FOR(GOL(I,J)|I#EQ#1:T(1,3)+8<=T(1,1));
@FOR(GOL(I,J):T(1,1)+3<=TT(1));
@FOR(GOL(I,J)|I#EQ#2:T(2,2)+3<=T(2,1));
@FOR(GOL(I,J):T(2,1)+7<=TT(1));
@FOR(GOL(I,J)|I#EQ#3:T(3,1)+5<=T(3,3));
@FOR(GOL(I,J)|I#EQ#3:T(3,3)+3<=T(3,2));
@FOR(GOL(I,J):T(3,2)+4<=TT(1));

@FOR(GOL(I,J)|J#EQ#1:T(1,1)+3<=T(2,1)+500*Y(1));
@FOR(GOL(I,J)|J#EQ#1:T(2,1)+7<=T(1,1)+500*(1-Y(1)));
@FOR(GOL(I,J)|J#EQ#1:T(1,1)+3<=T(3,1)+500*Y(2));
@FOR(GOL(I,J)|J#EQ#1:T(3,1)+5<=T(1,1)+500*(1-Y(2)));
@FOR(GOL(I,J)|J#EQ#1:T(2,1)+7<=T(3,1)+500*Y(3));
@FOR(GOL(I,J)|J#EQ#1:T(3,1)+5<=T(2,1)+500*(1-Y(3)));
@FOR(GOL(I,J)|J#EQ#2:T(2,2)+3<=T(3,2)+500*Y(4));
@FOR(GOL(I,J)|J#EQ#2:T(3,2)+4<=T(2,2)+500*(1-Y(4)));
@FOR(GOL(I,J)|J#EQ#3:T(1,3)+8<=T(3,3)+500*Y(5));
@FOR(GOL(I,J)|J#EQ#3:T(3,3)+3<=T(1,3)+500*(1-Y(5)));

@FOR(B:@BIN(Y));
END

You might also like