Project Overview
This project developed a linear programming model in AMPL to optimize inventory decisions across two warehouses. The objective was to minimize total inventory costs while satisfying customer demand and incorporating practical supply chain constraints, including warehouse capacity, economic order quantities (EOQ), lead times, and product shelf life.
The model demonstrates how optimization techniques can support data-driven inventory planning and improve operational efficiency.
Technologies
- Optimization: AMPL, CBC Solver
- Programming: Python
- Data Processing: Pandas
- Analysis: Sensitivity Analysis
Problem
Traditional inventory planning often relies on fixed policies that fail to balance holding costs, ordering costs, and warehouse capacity.
Our objective was to determine:
- Optimal order quantities
- Inventory levels
- Warehouse allocation strategy
while minimizing total inventory cost.
Optimization Model
The model considered:
- Holding costs
- Ordering costs
- Warehouse capacity
- EOQ requirements
- Product shelf life
- Lead times
- Customer demand
The optimization objective minimized:
- Inventory holding cost
- Ordering cost
subject to all operational constraints.

Results
The model converged to an optimal solution of $8.93 million after 586 iterations using the CBC solver.
Key findings included:
- A balanced 50/50 demand allocation minimized overall inventory cost.
- Uneven allocations (70/30 and 80/20) increased costs due to warehouse underutilization.
- Lower ordering costs significantly reduced total system cost.
- Sensitivity analysis demonstrated the model’s flexibility under changing demand scenarios.
My Contributions
- Developed the optimization model in AMPL.
- Processed and cleaned inventory datasets using Python.
- Performed sensitivity analyses for multiple demand allocation scenarios.
- Evaluated operational trade-offs between warehouse utilization and inventory costs.
- Visualized optimization results for decision-making.
Data Preparation
Inventory data was cleaned before optimization by:
- Removing missing values
- Excluding infeasible SKUs
- Splitting demand across warehouses
- Applying shelf-life constraints
df["WH1_demand"] = df["Item_Count"] * 0.5
df["WH2_demand"] = df["Item_Count"] * 0.5
df = df[
(df["EOQ"] <= df["WH1_demand"] * df["Shelf_Life"]) &
(df["EOQ"] <= df["WH2_demand"] * df["Shelf_Life"])
]AMPL Model
View optimization model
var x {I, W, T} >= 0;
var inv {I, W, T} >= 0;
var z {I, W, T} binary;
minimize Total_Inventory_Cost:
sum {i in I, w in W, t in T} (
holdingCost[i] * inv[i,w,t] +
orderingCost[i] * z[i,w,t]
);
Key Takeaways
This project strengthened my experience in:
- Operations Research
- Linear Programming
- Supply Chain Optimization
- Inventory Management
- AMPL Modeling
- Python Data Processing
- Sensitivity Analysis