MODEL:
! MULLDC;
! Multilevel DC location model, based on
Geoffrion/Graves, Man. Sci., Jan., 1974;
! Original LINGO model by Kamaryn Tanner;
SETS:
! Two products;
PRODUCT/ A, B/;
! Three plants;
PLANT/ P1, P2, P3/;
! Each DC has an associated fixed cost, F,
and an "open" indicator, Z.;
DISTCTR/ DC1, DC2, DC3, DC4/: F, Z;
! Five customers;
CUSTOMER/ C1, C2, C3, C4, C5/;
! D = Demand for a product by a customer.;
DEMLINK( PRODUCT, CUSTOMER): D;
! S = Capacity for a product at a plant.;
SUPLINK( PRODUCT, PLANT): S;
! Each customer is served by one DC,
indicated by Y.;
YLINK( DISTCTR, CUSTOMER): Y;
! C= Cost/ton of a product from a plant to a DC,
X= tons shipped.;
CLINK( PRODUCT, PLANT, DISTCTR): C, X;
! G= Cost/ton of a product from a DC to a customer.;
GLINK( PRODUCT, DISTCTR, CUSTOMER): G;
ENDSETS DATA:
! Plant Capacities;
S = 80, 40, 75,
20, 60, 75;
! Shipping costs, plant to DC;
C = 1, 3, 3, 5, ! Product A;
4, 4.5, 1.5, 3.8,
2, 3.3, 2.2, 3.2,
1, 2, 2, 5, ! Product B;
4, 4.6, 1.3, 3.5,
1.8, 3, 2, 3.5;
! DC fixed costs;
F = 100, 150, 160, 139;
! Shipping costs, DC to customer;
G = 5, 5, 3, 2, 4, ! Product A;
5.1, 4.9, 3.3, 2.5, 2.7,
3.5, 2, 1.9, 4, 4.3,
1, 1.8, 4.9, 4.8, 2,
5, 4.9, 3.3, 2.5, 4.1, ! Product B;
5, 4.8, 3, 2.2, 2.5,
3.2, 2, 1.7, 3.5, 4,
1.5, 2, 5, 5, 2.3;
! Customer Demands;
D = 25, 30, 50, 15, 35,
25, 8, 0, 30, 30;
ENDDATA
!--------------------------------------------------;
! Objective function minimizes costs.;
[OBJ] MIN = SHIPDC + SHIPCUST + FXCOST;
SHIPDC = @SUM( CLINK: C * X);
SHIPCUST =
@SUM( GLINK( I, K, L):
G( I, K, L) * D( I, L) * Y( K, L));
FXCOST = @SUM( DISTCTR: F * Z);
! Supply Constraints;
@FOR( PRODUCT( I):
@FOR( PLANT( J):
@SUM( DISTCTR( K): X( I, J, K)) <= S( I, J))
);
! DC balance constraints;
@FOR( PRODUCT( I):
@FOR( DISTCTR( K):
@SUM( PLANT( J): X( I, J, K)) =
@SUM( CUSTOMER( L): D( I, L)* Y( K, L)))
);
! Demand;
@FOR( CUSTOMER( L):
@SUM( DISTCTR( K): Y( K, L)) = 1
);
! Force DC K open if it serves customer L;
@FOR( CUSTOMER( L):
@FOR( DISTCTR( K): Y( K, L) <= Z( K))
);
! Y binary;
@FOR( DISTCTR( K):
@FOR( CUSTOMER( L): @BIN( Y( K,L)))
);
END
|