Tuesday, 7 October 2025

Inventory Power of Two Policy For A Serial System

Serial System: Manufacturer → Warehouse → Retail Store

A warehouse supplies a retail store with Graphene. The store faces a steady annual demand of 2,400 units.
Each order placed by the store costs $30, and the holding cost rate is 25% of the item’s value ($20 per unit).

The warehouse replenishes the item from an external supplier.
Each order the warehouse places costs $200, and its holding cost rate is 15% of the item’s value ($15 per unit).

Assume a year has 52 weeks, and both locations operate under a Power-of-Two (PO2) policy with a 1-week base period.


Required

  1. (a) Determine the optimal EOQ and order interval for the retail store and warehouse (ignore PO2 restriction).

  2. (b) Round each order interval to the nearest Power-of-Two number of weeks.

  3. (c) Suggest a synchronized PO2 plan for the two levels.

(a) EOQ and Optimal Order Interval (no PO2 restriction)

Formula:

Formula:

Q=2Kdhc,T=Qd (in years)

✅ Final PO2 Serial System Summary

LocationEOQ (units)EOQ Interval (weeks)PO2 Interval (weeks)PO2 Q (units)
Retail Store1703.74185
Warehouse65414.216739

💬 Interpretation

  • The retail store orders 185 units every 4 weeks.

  • The warehouse orders 739 units every 16 weeks from the supplier.

  • The Power-of-Two synchronization ensures that every fourth store order triggers one warehouse order — simple and coordinated.




Code from ChatGPT

import numpy as np
import matplotlib.pyplot as plt

# ----------------------------
# Basic data for Graphene system
# ----------------------------
# Retail store parameters
d_store = 2400       # annual demand (units)
K_store = 30         # ordering cost ($)
h_store = 0.25       # holding cost rate
c_store = 20         # unit cost ($)
Q_star_store = 170   # EOQ
Q_po2_store = 185    # PO2

# Warehouse parameters
d_wh = 2400
K_wh = 200
h_wh = 0.15
c_wh = 15
Q_star_wh = 654
Q_po2_wh = 739

# ----------------------------
# Cost function
# ----------------------------
def total_cost(Q, K, d, h, c):
    return K * d / Q + h * c * Q / 2

# Range of Q values
Q_store = np.linspace(50, 400, 300)
Q_wh = np.linspace(200, 1200, 300)

# Compute total costs
cost_store = total_cost(Q_store, K_store, d_store, h_store, c_store)
cost_wh = total_cost(Q_wh, K_wh, d_wh, h_wh, c_wh)

# EOQ and PO2 total costs
cost_store_star = total_cost(Q_star_store, K_store, d_store, h_store, c_store)
cost_store_po2 = total_cost(Q_po2_store, K_store, d_store, h_store, c_store)
cost_wh_star = total_cost(Q_star_wh, K_wh, d_wh, h_wh, c_wh)
cost_wh_po2 = total_cost(Q_po2_wh, K_wh, d_wh, h_wh, c_wh)

# ----------------------------
# Plot
# ----------------------------
plt.figure(figsize=(9,6))

# Retail store curve
plt.plot(Q_store, cost_store, label='Retail Store', color='blue')
plt.scatter(Q_star_store, cost_store_star, color='blue', marker='o', s=80, label='EOQ (Store)')
plt.scatter(Q_po2_store, cost_store_po2, color='cyan', marker='s', s=80, label='PO2 (Store)')

# Warehouse curve
plt.plot(Q_wh, cost_wh, label='Warehouse', color='green')
plt.scatter(Q_star_wh, cost_wh_star, color='green', marker='o', s=80, label='EOQ (Warehouse)')
plt.scatter(Q_po2_wh, cost_wh_po2, color='lime', marker='s', s=80, label='PO2 (Warehouse)')

# ----------------------------
# Formatting
# ----------------------------
plt.title('Graphene Inventory Cost Curves')
plt.xlabel('Order Quantity (units)')
plt.ylabel('Total Annual Cost ($)')
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()
plt.tight_layout()

# Show graph
plt.show()





No comments:

Post a Comment

Machine Learning: Nearest Neighbor (NN) algorithm for stock transfers between warehouses

  🏭 Scenario: Nearest Neighbor Algorithm for Warehouse Stock Transfer Background A company, GrapheneTech , distributes graphene sheets a...