1 Introduction
2 Literature overview
3 Model development
3.1 Problem setting
3.2 Assumptions
-
Parts are of same size. Customers can only order parts available in one of the warehouses, i.e., no order backlog is permitted.
-
The transportation times of shipments and transshipments are negligible. The transports are commissioned between two locations, i.e., warehouse-warehouse or warehouse-customer paths are traveled. The costs incurred by transports depend on their origin and destination and are known deterministically beforehand. The vehicles available for transport are homogeneous in capacity and cost.
-
The warehouses maintain limited staff capacity, i.e., handling operations for storing and picking parts are limited per period. Each storing and picking operation consumes an identic proportion of capacity. Incoming parts must be stored in the period they arrive. The capacity of warehouses for storing parts is limited and known. If incoming parts exceed the capacity of a warehouse, a transshipment of parts to another warehouse is required.
-
The planner can approximate the potential future costs for shipping parts to customers depending on the warehouse they are stored in.
3.3 Notation
Sets and indices | |
\(i,j \in {N}\) | Set of all locations |
\(N^{\text {Warehouses}}\) | Set of warehouse locations, with \(N^{\text {Warehouses}}\subset {N}\) |
\(N^{\text {Customers}}\) | Set of customer locations, with \(N^{\text {Customers}}\subset {N}\) |
\(x \in P\) | Set of parts |
Parameters | |
\(B_{xi}\) | Stock of part x in warehouse i, in units, parameterized in \({\mathbb {B}}\) |
\(D_{xi}\) | Demand of part x by customer i, in units, parameterized in \({\mathbb {B}}\) |
\(C_i^{\text {Storing}}\) | Capacity of warehouse i for storing parts, in units, parameterized in \({\mathbb {N}}_0\) |
\(C_i^{\text {Handling}}\) | Capacity of warehouse i for handling parts, in units, parameterized in \({\mathbb {N}}_0\) |
\(C^{\text {Vehicles}}\) | Capacity of vehicles for transporting parts, in units per vehicle, parameterized in \({\mathbb {N}}_0\) |
\(r_{ij}^{\text {T}}\) | Cost rate for traveling locations (i, j), in monetary units per vehicle, parameterized in \({\mathbb {R}}_0^+\) |
\(r_{xi}^{\text {F}}\) | Approximated cost rate for future customer delivery of part x if stored in warehouse i, in monetary units, parameterized in \({\mathbb {R}}_0^+\) |
\(\varepsilon\) | A sufficiently small number, parameterized in (0, 1] |
Decision variables | |
\({\varvec{z}}_{xij}\in {\mathbb {B}}\) | \({\left\{ \begin{array}{ll} 1 &{} \text {if part}\ x\ \text {is (trans)shipped between locations}\ (i,j)\\ 0 &{} \text {otherwise}. \end{array}\right. }\) |
\({\varvec{w}}_{ij}\in {\mathbb {N}}_0\) | Number of vehicles traveling (i, j) |
\({\varvec{R}}^{\text {T}}\in {\mathbb {R}}_0^+\) | Sum of realized shipment and transshipment costs |
\({\varvec{R}}^{\text {F}}\in {\mathbb {R}}_0^+\) | Sum of approximated future shipment and transshipment costs |
3.4 Mathematical model
4 Numerical study
4.1 Study design and data
Warehouse | Initial inventory [units] | Handling capacity [units] | Storing capacity [units] |
---|---|---|---|
1 | 200 | 200 | 250 |
2 | 500 | 500 | 625 |
3 | 300 | 300 | 375 |
Inventory turnover | Warehouse utilization | Scenario |
---|---|---|
1% | 60% | \(C_{1\%,60\%}\) |
80% | \(C_{1\%,80\%}\) | |
95% | \(C_{1\%,95\%}\) | |
5% | 60% | \(C_{5\%,60\%}\) |
80% | \(C_{5\%,80\%}\) | |
95% | \(C_{5\%,95\%}\) | |
10% | 60% | \(C_{10\%,60\%}\) |
80% | \(C_{10\%,80\%}\) | |
95% | \(C_{10\%,95\%}\) |
4.2 Approach for comparison and computational setup
4.3 Numerical results
Scenario | Reactive | Proactive | ||
---|---|---|---|---|
Avg. (SD) [EUR] | Avg. (SD) [EUR] | Avg. (SD) rel. improvement [%] | best/worst rel. improvement [%] | |
\(C_{1\%,60\%}\) | 24,007 (728) | 20,635 (835) | 14.0 (2.6) | 19.0/8.6 |
\(C_{1\%,80\%}\) | 24,245 (660) | 20,956 (849) | 13.6 (2.8) | 17.3/6.6 |
\(C_{1\%,95\%}\) | 24,675 (671) | 21,798 (786) | 11.6 (2.8) | 15.9/5.1 |
\(C_{5\%,60\%}\) | 35,348 (252) | 32,007 (238) | 9.4 (0.6) | 10.3/8.1 |
\(C_{5\%,80\%}\) | 35,919 (212) | 32,125 (333) | 10.6 (0.8) | 11.9/8.7 |
\(C_{5\%,95\%}\) | 36,176 (193) | 33,005 (301) | 8.8 (0.5) | 10.0/7.9 |
\(C_{10\%,60\%}\) | 35,879 (397) | 32,560 (196) | 9.2 (1.1) | 11.0/7.0 |
\(C_{10\%,80\%}\) | 37,123 (120) | 33,923 (458) | 8.6 (1.3) | 10.8/5.9 |
\(C_{10\%,95\%}\) | 37,567 (28) | 34,312 (289) | 8.7 (0.8) | 10.0/7.4 |
Scenario | Reactive | Proactive | ||||
---|---|---|---|---|---|---|
Avg. (SD) transports [x] | Avg. (SD) utilization transports [%] | Avg. (SD) transshipped parts [x] | Avg. (SD) transports [x] | Avg. (SD) utilization transports [%] | Avg. (SD) transshipped parts [x] | |
\(C_{1\%,60\%}\) | 34.6 (2.7) | 34.6 (4.9) | 330.7 (81.6) | 17.4 (1.7) | 82.8 (5.7) | 714.9 (51.5) |
\(C_{1\%,80\%}\) | 35.8 (2.9) | 35.8 (4.5) | 374.9 (77.1) | 19.6 (2.2) | 71.6 (7.4) | 694.4 (43.2) |
\(C_{1\%,95\%}\) | 39.7 (3.0) | 39.7 (4.3) | 426.4 (93.1) | 25.6 (2.2) | 52.4 (6.0) | 664.5 (56.7) |
\(C_{5\%,60\%}\) | 57.0 (1.1) | 57.0 (2.9) | 1113.2 (80.3) | 39.5 (1.4) | 70.0 (2.5) | 1382.2 (41.0) |
\(C_{5\%,80\%}\) | 58.3 (0.7) | 58.3 (2.5) | 1446.0 (74.7) | 40.2 (1.5) | 68.9 (2.8) | 1382.3 (34.3) |
\(C_{5\%,95\%}\) | 59.9 (0.3) | 59.9 (2.2) | 1690.9 (64.5) | 44.8 (1.8) | 60.7 (2.6) | 1358.9 (43.0) |
\(C_{10\%,60\%}\) | 60.0 (0.9) | 60.0 (2.1) | 1847.4 (56.5) | 43.9 (0.7) | 94.9 (2.3) | 2079.7 (47.8) |
\(C_{10\%,80\%}\) | 75.4 (1.7) | 75.4 (1.2) | 2331.9 (39.8) | 50.4 (2.0) | 79.5 (3.6) | 1998.4 (56.7) |
\(C_{10\%,95\%}\) | 79.8 (0.5) | 79.8 (0.7) | 2579.2 (27.4) | 55.3 (1.5) | 76.3 (2.1) | 2107.3 (55.6) |
4.4 Computational results
Number of parts | Reactive | Proactive |
---|---|---|
Avg. (SD) CPU [s] | Avg. (SD) CPU [s] | |
1,000 | 0.65 (0.1) | 1.0 (0.3) |
10,000 | 14.0 (3.2) | 28.9 (18.3) |
50,000 | 176.4 (54.4) | 663.9 (400.0) |