Multi Echelon Network
Multi-echelon arborescent tree of nodes. Each node has at most one parent (its supplier) and any number of children (its customers). Two node types are supported today and both implement NetworkNodeIfc:
InventoryHoldingPoint — holds Inventory per item type and replenishes from its upstream supplier; contributes to the network-wide AggregateInventoryResponse.
InventoryCrossDock — routing node, holds no inventory; clones incoming demand upstream and ships the original out on clone delivery.
The root is a LeadTimeDemandFiller (the external supplier) with an infinite supply that produces each item type after a lead time.
Transport between locations is controlled by transportStrategy:
TransportStrategy.SharedCarrier — one DemandCarrierIfc for the whole network (the original
MultiEchelonNetworkbehaviour); the carrier slot is mutable via demandCarrier.TransportStrategy.PerIHPTimeBased — each node and the external supplier own a TimeBasedDemandCarrier.
TransportStrategy.NetworkTimeBased — a single shared TimeBasedNetworkDemandCarrier supplied by the caller.
Setting levelResponses = true allocates a per-level AggregateInventoryResponse in addition to the network-wide one so callers can compare echelon performance. Only IHPs feed these aggregates; cross-docks are tracked in level buckets but do not subscribe (they hold no inventory).
Parameters
the owning supply-chain model
optional model-element name
how to wire transport between nodes; defaults to TransportStrategy.SharedCarrier with NoDelayDemandCarrier
if true, collect statistics per level too
See also
Constructors
Properties
Snapshot of formulations currently attached to this network.
The network's active demand carrier under TransportStrategy.SharedCarrier. Reading or writing under any other strategy throws — use transportStrategy to access the carrier of a time-based variant instead.
The external supplier acting as the root of the tree.
Per-line Backorder rollup Response from the first attached default formulation, summing the continuous-rate backorder cost across every per-IHP ksl.modeling.supplychain.cost.BackorderCostCalculator. Emits a rate in the time unit of the modeler's backorderRate.
Top-line total-cost Response from the first attached ksl.modeling.supplychain.cost.DefaultMultiEchelonCostFormulation, or null when no default formulation is attached. Construct one via DefaultMultiEchelonCostFormulation(network, params) after building the topology to populate this accessor.
Cross-dock-tier rollup Response from the first attached default formulation.
External-supplier-tier rollup Response from the first attached default formulation.
IHP-tier rollup Response from the first attached default formulation.
Per-line LostSale rollup Response from the first attached default formulation, summing per-rejected-demand cost across every per-(IHP, item) ksl.modeling.supplychain.cost.InventoryCostCalculator.
Per-line Stockout rollup Response from the first attached default formulation, summing the per-stockout-event cost across every per-(IHP, item) ksl.modeling.supplychain.cost.InventoryCostCalculator.
Per-line UnitShortage rollup Response from the first attached default formulation, summing per-unit-short cost across every per-(IHP, item) ksl.modeling.supplychain.cost.InventoryCostCalculator.
Functions
Flip every per-node carrier into "immediate transport" mode so external demand generators (with no pre-registered transport time) can ship through it. Subsequent nodes added after this call also inherit the flag.
Register a ksl.modeling.supplychain.cost.CostFormulation with this network. Called automatically from ksl.modeling.supplychain.cost.DefaultMultiEchelonCostFormulation's init block; custom formulations should call this directly from their own init block to participate in costFormulations lookup.
Typed delegate for IHP-only callers.
Register sender as a no-delay destination of every node-filler on the shared network carrier. Useful when an external demand generator can send to any node via a DemandFillerFinderIfc — this ensures the network carrier knows how to ship filled demands back.
Typed overload for InventoryHoldingPoint — delegates to the NetworkNodeIfc form.
Typed overload for InventoryHoldingPoint-only edges.
Downstream customer nodes of supplier — every node attached via attachToSupplier with supplier as its supplier. Returns an empty list when supplier is a leaf (or unknown). Useful for walking the network's outbound-edge topology, for example when constructing per-edge cost calculators.
Per-level aggregate response (when levelResponses = true), or null.
Snapshot of all cross-docks currently in the network.
Cross-docks at a given level, in attachment order.
Snapshot of all IHPs currently in the network.
IHPs at a given level, in attachment order.
Look up an item type by name, or null.
Snapshot of every node (IHP and cross-dock) in the network.
Every node at a given level, in attachment order.
Build a complete results report for this network: a network overview, a cost summary (per formulation, tier × line), and an inventory performance table. Call after model.simulate(), then render with the standard KSL helpers (toMarkdown(), writeHtml(), showInBrowser(), …).
Undo subscribeTo.