Public class: ChowdhuryBakiAzabSolver.
This is a separate exact linear-time algorithm for the Wagner-Whitin model. It does not call the Wagelmans or Federgruen-Tzur implementations.
Reference:
N. T. Chowdhury, M. F. Baki and A. Azab (2018), Dynamic Economic Lot-Sizing Problem: A new O(T) Algorithm for the Wagner-Whitin Model, Computers & Industrial Engineering 117, 6-18. DOI: https://doi.org/10.1016/j.cie.2018.01.010
The implementation follows Algorithm 1 in Chapter 2 of Chowdhury's doctoral dissertation, where the paper's definitions, lemmas, theorems and pseudocode are reproduced in full.
The paper introduces triangular advantage matrices A and B for exposition, but Algorithm 1 never materializes them. It keeps:
ULSAlgorithms represents all of these with pooled primitive arrays.
Scheduled list entries use a compact singly-linked event pool. The proof in the paper bounds the total list cardinality by 2T-4 for T >= 3, so the storage is O(T).
For each backward period k:
\[a(k)=G(k+1)-G(k+2)-h d_{k+1}, \qquad b(k)=h d_{k+1}. \]
The deletion event is scheduled using
\[u=\max\{\min\{\lceil a(k)/b(k)\rceil,T\},0\}. \]
The implementation also reproduces the stack-compression update of Algorithm 1 and computes G(k) from the selected successor in O(1) using cumulative demand and cumulative weighted demand.
The paper's ELSP specialization uses stationary holding cost and time-varying setup costs. Constant production cost is policy-independent and is therefore permitted.
For numerical faithfulness to Algorithm 1, this implementation currently requires:
Zero-demand periods are rejected rather than silently modifying the published b(k)=h d(k+1) divisions.
The paper proves:
ULSAlgorithms additionally uses O(T) pooled memory and no per-period managed candidate allocations.
The suite cross-validates 5,000 deterministic random instances against: