A variable, X_ijt, can be used to represent the amount ordered for stocking point i in level j at period t. The lower bound of each X_ijt is 0. A conservative upper bound on X_ijt is found simply by summing the demands at all leaves under this stocking point from now until the end of the planning horizon. This is equivalent to assuming that all necessary stock for the remaining periods will be ordered immediately.

Orders for period t are assumed to be made (and fulfilled, there is a 0 lead time assumption) before period t begins. Inventory levels for period t refer to the end of period t. There are two common methods of representing the inventory remaining after each period, as discussed below.

#### Inventory in the Conventional Model

In the conventional model, a variable, I_ijt, is used to represent the amount of stock held at stocking point i in level j after period t.

The objective can now be expressed:

• Minimise: sum_{t=1..T} sum_{j=1..L} sum_{i=1..N_j} (c_ij I_ijt + c0_ij (X_ijt > 0))
where N_j denotes the number of nodes in level j. Note that the objective as expressed above involves the reification of (X_ijt > 0). This expression can be bound to an explicit 0/1 variable (δ_ijt, the approach commonly adopted in the MIP model of this problem) and the δ variables used for branching.

Further constraints govern how inventory is supplied between stocking points:

• I_ijt = I_ij(t-1) + X_ijt - sum_{m in W(i,j,j-1)} (X_mt)
where W(i,j,j-1) denotes the children of the ith stocking point in level j. In short, the above expression specifies that the closing inventory for I_ijt is the closing inventory for the same stocking point in the previous period, plus the amount ordered, minus the amount supplied.

#### Inventory in the Echelon Model

An alternative model views the supply-chain structure in echelons. An echelon is a stocking point and all of its descendants, as follows:
Ech6*****************************  Level
*                  |            *
*                  V            *
*                +---+          *
*                | F |          *    3
*                +---+          *
*            ___/     \___      *
*           /             \     *
*Ech4******V********** Ech5V*****
**       +---+       * * +---+ **
**       | D |       * * | E | **    2
**       +---+       * * +---+ **
**     _/     \_     * *   |   **
**    /         \    * *   |   **
**   V           V   * *   V   **
**Ech1***     Ech2**** *Ech3*****
***+---+*     *+---+** **+---+***
***| A |*     *| B |** **| C |***    1
***+---+*     *+---+** **+---+***
*****|***********|**** ****|*****
V           V         V

A variable, E_ijt, represents the amount of stock held at the end of period t in the echelon whose highest node is the ith node in level j. The conventional holding cost per unit of inventory is replaced by an echelon holding cost, e_ij, defined as follows:
• e_ij = c_ij - c_iW(i,j,j+1)
where W(i,j,j+1)denotes the parent of the ith stocking point in level j. Recall the assumption that a parent always has a smaller holding cost than any of its children. Hence, e_ij can be thought of as the incremental cost of holding a unit of inventory at stocking point ij instead of its parent.

The objective can now be expressed:

• Minimise: sum_{t=1..T} sum_{j=1..L} sum_{i=1..N_j} (e_ij E_ijt + c0_ij (X_ijt > 0))
The constraints governing how inventory is supplied between stocking points are as follows:
• E_ijt = E_ij(t-1) + X_ijt - sum_{m in V(i,j)} (d_mt)
where V(i, j) denotes the leaves descended from stocking point i in level j, and d_i1t is the demand at leaf i in period t. That is, inventory held in an echelon at the end of period t is the inventory in the same echelon in the previous period plus the inventory ordered minus the demand at the leaves associated with that echelon.

One further set of constraints relate an echelon whose highest stocking point is stocking point i in level j and the echelons whose highest stocking points are the children of stocking point ij:

• E_ijt >= sum_{m in W(i,j,j-1)} (E_mt)
where again W(i,j,j-1) denotes the children of the ith stocking point in level j.

#### Implied Constraints

A variety of implied constraints can be used to improve these basic models.
• In an optimal solution, clearly the inventory for every stocking point at the end of the last period must be 0. In both models, therefore, the inventory variables for the last period can be pre-set.
• In an optimal solution, if a node in a higher level places an order, at least one of its children must also. This can be seen by considering that if no children make an order, the higher node incurs a holding cost that can be removed by delaying the order until a subsequent period when at least one child does place an order.
• An upper bound can be derived for the inventory variables in the conventional formulation by considering that it is only worth holding stock at a node if it is cheaper than ordering it at the next period. That is:
• I_ijt c_ij <= c0_ij + I_ijt c_W(i,j,j+1)
which simplifies to:
• I_ijt <= (c0_ij)/(c_ij-c_W(i,j,j+1))
This can easily be applied to the echelon model by substituting in the equality:
• I_ijt = E_ijt - sum_{m in G(i,j)} (I_mt)
where G(i,j) is the set of all descendents of stocking point i in level j
• Similarly, an upper bound can be derived for the order variables at the leaf nodes. The principle is the same: it is only worth ordering stock not absorbed by demand at the current period if it is cheaper than waiting and ordering in a subsequent period. Consider first a bound based on deferring an order into the next period:
• (X_i1t-d_i1t)c_i1 <= c0_i1+c_m(X_i1t-d_i1t)
which can be re-arranged:
• X_i1t <= d_i1t + (c0_i1)/(c_i1-c_m)
This can be generalised to consider deferring an order into any of the following periods up to the planning horizon:
• X_i1t <= min_{t’ = t .. T} sum_{i=t..t’} (d_i1t) + (c0_i1)/((t’-t+1)(c_i1-c_m))
• In an optimal solution, an order is only made at a node when the inventory is 0. This can be seen by considering that if an order is made at a node with some stock at period t, the cost incurred by holding that stock from period t-1 to t can be removed by increasing the size of the order at period t.
• The domains of the order (X) variables can be reduced by exploiting the fact that, in an optimal solution, the sizes of all orders made are composed from the demands of the children of the associated node for a continuous stretch of time from between the current period to the end of the planning horizon. It is therefore possible to enumerate the domain elements for each X variable, replacing the simple upper/lower bounds representation. The time complexity of this process is exponential in the number of leaves beneath the order node in question, but can usefully be applied when the number of leaves is small.

#### Code

A basic Ilog Solver 5.x program to solve the Wagner-Whitin problem can be found below:
File Type Notes
DistributionWagnerWhitin.essence Essence
WagCP.zip zip
WagHybrid.zip zip