You are on page 1of 7

3.1.

Indices and sets


p=¿ index for manufacturing plants; p ∈ P ,
k =¿ index for customers; k ∈ K ,
i=¿ index for existing warehouses and new candidate sites for relocation and consolidation;
i∈ A ,
A=E ∪N ; ( j, i ) ∈ ( E × A ) , where E=¿set for existing warehouse, and N=¿ set for new candidate sites
for relocation and consolidation.

3.2. Model parameters


v pi =¿ unit production cost (including storage cost) at manufacturing plant p plus unit trans-shipment
cost between manufacturing plant pand warehouse i ,

sik =¿ unit warehousing cost at warehouse i and unit transportation cost between warehouse i and customer
k,
r ji =¿ cost of moving and relocating unit capacity j to consolidated site i ( j ≠ i ) ,

c j=¿ throughput capacity of existing warehouse j ,

q p=¿ production capacity of manufacturing plant p,

d k =¿ demand of customer k ,

f ci =¿ cost per unit capacity of warehouse i ,


m
f i =¿ fixed cost of maintaining warehouse i , excluding capacity cost,
s
f i =¿ cost savings resulted from the closure of existing warehouse i ,
t ik =¿ truck delivery time (in hours) from warehouse i to customer k ,

3.3. Decision variables


x ik = volume of products shipped from warehouse i to customer k,

y pi = volume of products supplied by plant p to warehouse i,

z ji =

{1 , if capacity of warehouse
¿
j ( j ∈ E ) is relocated site i ( i∈ A ,i ≠ j ) ,¿ ¿if existing warehouse j ( j∈ E ,i= j ) ,remains o

{
w i = 1, if a new warehouse isestablished at site i ( i ∈ N ) ,
0 , otherwise .
3.4. Mathematical formulation

Min ∑ ∑ v pi y pi + ∑
i∈ A
∑ sik x ik + ∑ ∑ r ji z ji + ∑ f ci ∑ c j z ji + ∑ f im zii + ∑ f mi wi - ∑ ¿ ¿.
p ∈ P i∈ A k∈C (i) j∈ E i∈ A i∈ A j ∈E i ∈E i ∈N j∈ A
(1)
Subject to

∑ y pi ≤ q p ∀ p ∈ P, (2)
i∈ A

∑ y pi=¿ ∑ x ik ¿ ∀ i∈ A , (3)
p∈P k ∈ C(i)

∑ xik ≤ ∑ c j x ji ∀ i∈ A , (4)
k ∈C (i) j∈C

∑ x ik =d k ∀ k ∈ K , (5)
i ∈D (k)

∑ zij ≤|E| z ij ∀ i∈ E , (6)


j∈ E

∑ z ij <|E|w i ∀ i∈ N , (7)
j∈E

∑ z ji ≤1   ∀ j ∈ E, (8)
i∈ A

x ik ≥ 0 ∀ i∈ A , k ∈ K , (9)

y pi ≥ 0 ∀ p ∈ P ,i ∈ A (10)

z ji , wi ∈( 0,1) ∀ j ∈ E , i∈ A (11)

(1): Objective function to minimizes total supply chain costs comprised of production, transportation,
warehousing, and relocation costs, while maximizing the cost savings resulting from the closure or
consolidation of redundant warehouses.
(2): The total volume of products shipped to warehouses do not exceed the capacity of a manufacturing
plant supplying such products.
(3): The total volume of products supplied by the manufacturing plant to each warehouse matches to the
total volume of products shipped from that warehouse to its customers.
(4): The total volume of products shipped to customers cannot exceed the throughput capacity (after
consolidation) of the warehouse serving them.
CPLEX Code
1.

int P = ….. ; // manufacturing plants

int K = …. ; // customers

int A = …. ; // existing and new warehouses

range p = 1..P;

range k = 1..K;

range i = 1..A;

set E; // set of existing warehouses

set N; // set of new candidate sites for relocation and consolidation

// Parameters

float v[p][i] = ...;

float s[i][k] = ...;

float r[E][i] = ...;

float c[E] = ...;

float q[p] = ...;

float d[k] = ...;

float fc[i] = ....;

float fm[i] = ...;

float fs[i] = ...;

float t[i][k] = ...;

// Variables
dvar float x[i][k];

dvar float y[p][i];

dvar boolean z[E][i];

dvar boolean w[N];

// Objective Function

minimize sum(p in P, i in A) v[p][i]*y[p][i]

+ sum(i in A, k in C[i]) s[i][k]*x[i][k]

+ sum(j in E, i in A) r[j][i]*z[i][j]

+ sum(i in A, j in E) f[i][j]*c[j]*z[i][j]

+ sum(i in E) f[i][i]*z[i][i]

+ sum(i in N) f[i][i]*w[i]

- sum(j in A) (f[j][s]*(1 - sum(i in A) z[i][j]) + f[j][m]*sum(i in E:i!=j) z[i][j]);

// Constraints

subject to {

forall (p in P)

sum(i in A) y[p][i] <= q[p];

forall (i in A)

sum(p in P) y[p][i] == sum(k in {k | k in 1..K, k in C[i]}) x[i][k];

forall (i in A)

sum(k in {k | k in 1..K, k in C[i]}) x[i][k] <= sum(j in E) c[j]*x[j][i];

forall (k in 1..K)

sum(i in {i | i in A, k in C[i]}) x[i][k] == d[k];

forall (i in E)

sum(j in E) z[j][i] <= card(E)*z[i][i];

forall (i in N)

sum(j in E) z[j][i] < card(E)*w[i];

forall (j in E)
sum(i in A) (z[j][i]) <= 1

forall(i in A, k in K) x[i][k] >= 0;

forall(p in P, i in A) y[p][i] >= 0;

forall(j in E, i in A) z[j][i] >= 0;

forall(j in E, i in A) z[j][i] <= 1;

forall(i in N) w[i] >= 0;

forall(i in N) w[i] <= 1;

2.

int np = .....; // total number of manufacturing plants

int nk = ....; // total number of customers

int ne = ...; // total number of existing warehouses

int nn = ...; // total number of new candidate sites

range P = 1.. np;

range K = 1...nk;

range E = 1...ne;

range N = ne + 1....ne+nn;

range A = E union N; // A is the set of all warehouses (existing and new)

// Parameters

float v[P][A] = ...;

float s[A][K] = ...;

float r[E][A] = ...;

float c[E] = ...;

float q[P] = ...;

float d[K] = ...;

float f[A] = ...;

float fm[A] = ...;

float fs[E] = ...;


float t[A][K] = ...;

// Variables

dvar float+ x[A][K];

dvar float+ y[P][A];

dvar boolean z[E][A];

dvar boolean w[N];

// Objective function

minimize sum(p in P, i in A) v[p][i]*y[p][i]

+ sum(i in A, k in C[i]) s[i][k]*x[i][k]

+ sum(j in E, i in A) r[j][i]*z[i][j]

+ sum(i in A, j in E) f[i][j]*c[j]*z[i][j]

+ sum(i in E) f[i][i]*z[i][i]

+ sum(i in N) f[i][i]*w[i]

- sum(j in A) (f[j][s]*(1 - sum(i in A) z[i][j]) + f[j][m]*sum(i in E:i!=j) z[i][j]);

// Define constraints

subject to {

forall(p in P, i in A) {

sum(i in A) y[p][i] <= q[p];

forall(i in A) {

sum(p in P) y[p][i] == sum(k in C[i]) x[i][k];

forall(i in A) {

sum(k in C[i]) x[i][k] <= sum(j in C) c[j]*x[j][i];

forall(k in K) {
sum(i in D[k]) x[i][k] == d[k];

forall(i in E) {

sum(j in E) z[i][j] <= card(E)*z[i][j];

forall(i in N) {

sum(j in E) z[i][j] < card(E)*w[i];

forall(j in E) {

sum(i in A) z[i][j] <= 1;

// Set variable bounds

forall(i in A, k in K) {

x[i][k] >= 0;

forall(p in P, i in A) {

y[p][i] >= 0;

forall(j in E, i in A) {

z[i][j] in {0, 1};

forall(i in N) {

w[i] in {0, 1};

You might also like