Sunday, September 6, 2020

Inventory Model Simulation

The overall objective of inventory (stock) control is to maintain inventory levels to that the total costs of holding stocks is minimise. A popular method of implementing stock control is through the use of inventory (stock) control charts and algorithms that automate the process.

Economic Order Quantity – EOQ Definition 
 
By Will Kenton
Reviewed By Janet Berry-Johnson
Updated Feb 10, 2020


What Is Economic Order Quantity (EOQ)?

Economic order quantity (EOQ) is the ideal order quantity a company should purchase to minimize inventory costs such as holding costs, shortage costs, and order costs. This production-scheduling model was developed in 1913 by Ford W. Harris and has been refined over time.1 The formula assumes that demand, ordering, and holding costs all remain constant.

The EOQ is a company's optimal order quantity that minimizes its total costs related to ordering, receiving, and holding inventory.
The EOQ formula is best applied in situations where demand, ordering, and holding costs remain constant over time.
Formula and Calculation of Economic Order Quantity (EOQ)

The formula for EOQ is:



​where: 

Q=EOQ units
D=Demand in units (typically on an annual basis)
S=Order cost (per purchase order)
H=Holding costs (per unit, per year)​

Matlab Simulation

The Simulation descibe a 300 days of stock. Each time the stock is at an Order Point, an Order of constant quantity is ordered to wholesaler.
The Quntity of Consuming the stock and the supply days change randomally in normal distribution.
The model take safety stock equal 2*sigma where sigma is the standard deviation of multipliction of the random variables : stock consume per day and days of supply.

Inventory Model
Inventory Model

Matlab Script:

% This Script Plot The Inventory Model of an item
pkg load statistics
clear

item_name = "Filter"

Main_ConsumePerDay = 40 % Main of items consume per day
Stdev_ConsumePerDay = 10 % Standard deviation of consume items per day

Main_SupplyDay = 10 % Main of the days to supply the item
Stdev_SupplyDay = 3   % Standard deviation of the days to supply the item

NumberDays = 300 % Number of days for simulation
N_STD = 2 % Number of standard deviation use for insurance inventory

% Calculate Quantity per Order
DaysPerYear = 250
interest_rate = 0.15 % The interest rate to hold stock

k = 300;    % Order Coast
item_price = 70 % Price of unit item
h = interest_rate * item_price  % price of holding one item per year
ConsumePerYear = DaysPerYear * Main_ConsumePerDay % Consume per Year

Optimal_QuntityOrder = round(sqrt(2*ConsumePerYear*k/h)); % Optimal Quntity Per Order
EOQ = Optimal_QuntityOrder % Economic Order Quantity
OrderExist = false

% Main consume during the supply period (in days)
MainConsumeSupplyDays = Main_ConsumePerDay*Main_SupplyDay

% standard ddeviation of consume during supply period
StdevConsumeSupplyDays = sqrt(Stdev_ConsumePerDay^2*Stdev_SupplyDay^2+
Stdev_ConsumePerDay^2*Main_SupplyDay^2+ Stdev_SupplyDay^2*Main_ConsumePerDay^2)

% Insurance inventory
InsureInventory = N_STD * StdevConsumeSupplyDays

% Order Point
OrderPoint = InsureInventory + MainConsumeSupplyDays %+ EOQ

StartStock = InsureInventory + EOQ

% Array of random consume per day of the utem
ConsumePerDayVal = normrnd(Main_ConsumePerDay, Stdev_ConsumePerDay,1, NumberDays);

stock(1) = StartStock;
i_order = 1 % index for order points
for i=1:NumberDays
  % Stock is under order point but no order yet
  if (stock(i) < OrderPoint) && (OrderExist == false)
    stock(i)
    OrderExist = true;
    j=1;
    N_SupplyDays = max(1, round(normrnd(Main_SupplyDay, Stdev_SupplyDay)))
    Xorder(i_order) = i;
    Yorder(i_order) = stock(i);
    i_order = i_order+1;
    
  % Stock is under order point and order exist
  elseif (stock(i) < OrderPoint)
    j=j+1;
    if (j-N_SupplyDays)>0.1
      OrderExist = false;
      stock(i) = stock(i) + EOQ;
    end
  end
  stock(i+1) = stock(i) - ConsumePerDayVal(i);

end

plot(stock(1:NumberDays))
axis([0 NumberDays 0 inf])
title('EOQ Model - 2*Sigma')
xlabel('Days')
ylabel('Stock')
hold
plot(Xorder, Yorder, 'ro')

grid
x(1:NumberDays) = 1:NumberDays;
y(1:NumberDays) = InsureInventory;

plot( y, 'b--')

legend('Stock','Order point', 'Insurance Stock Level')

 

No comments:

Post a Comment

Featured Post

Solve simple Absolute Value Inequality

  Exam - BARTON COLLEGE PRACTICE PLACEMENT TEST Ex. 39 Exercise: The inequality |8 - x| < 8   is equivalent to:   a) x < 0 b) x &g...