Help! Keep getting error index exceeds the number of array elements(0).
Show older comments
% function [meanTot, stdTot] = RQpolicy_no(R1)
% Inventory system applying (R,Q) policy.
% Given reorder points, the function returns mean total cost and standard deviation.
function [meanTot, stdTot] = RQ_Test(R1)
n = 10; % Number of runs
lambda = 10; % Demand rates
L = 1; % Lead times
b = 20; % Backorder cost
h = 1; % Holding cost
A = 100; % Order cost
% The batch quantities by the EOQ formula
Q1 = round(sqrt(2*A*lambda/h));
costVector = []; % Vector with total cost for the runs
summa = 0; % Sum of total costs for all runs
for j = 1:n
% Creates points in time when demand will occur for each warehouse
% Times between customers are exp(lambda) distributed
nbrOfEvents = 30000;
u = rand(1,nbrOfEvents);
y = -log(1-u)/lambda;
T = cumsum(y);
stopTime = min(T(nbrOfEvents));
time = 0;
invLevel = 0; % Inventory levels
invPos = 0; % Inventory positions
invTime = []; % Arrival times for units in inventory
incom = []; % Arrival times for incoming items
backTime = []; % Times when backorders have occurred
timeInStock = 0; % Accumulated time in stock
54
timeInBackorder = 0; % Accumulated time in backorder
orderCost = 0; % Cost for all orders during simulation
Ntot = 0; % Number of customers during simulation
N1 = 0; % Number of backorders during simulation
% The first tenth of the time is start-up time
transientTime = stopTime/10;
while time < stopTime,
if time < transientTime,
timeInStock = 0;
timeInBackorder = 0;
end
% A trick to determine the next event
if isempty(incom),
incom = realmax;
end
% Determines the next event and the time when it happens
[time, event] = min([T(1) incom(1)]);
if incom(1) == realmax,
incom = [];
end
% A customer arrives at retailer 1
if event == 1,
Ntot = Ntot + 1;
% If there is stock on hand
if invLevel >= 1,
timeInStock = timeInStock + time - invTime(1);
invTime = invTime(2:length(invTime));
invLevel = invLevel - 1;
invPos = invPos - 1;
% Orders new items while the inventory position is less than R
55
while invPos <= R1,
orderCost = orderCost + A;
invPos = invPos + Q1;
for k = 1:Q1
incom = [incom time+L1];
end
end
% If there are no items in stock, the demanded item is backordered
else
N1 = N1 + 1;
backTime = [backTime time];
invLevel = invLevel - 1;
invPos = invPos - 1;
% Orders new items while the inventory position is less than R
56
while invPos <= R1,
orderCost = orderCost + A;
invPos = invPos + Q1;
for k = 1:Q1
incom = [incom time+L];
end
end
end
T = T(2:length(T));
end
if ~isempty(invTime),
for k = 1:length(invTime),
timeInStock = timeInStock + time - invTime(1);
invTime = invTime(2:length(invTime));
end
end
end
57
%%Partition%%
if ~isempty(backTime),
for k = 1:length(backTime),
timeInBackorder = timeInBackorder + time - backTime(1);
backTime = backTime(2:length(backTime));
end
end
end
stopTime = stopTime - transientTime;
% fillrate1 = 1 - N1/N1tot;
% The costs are calculated
orderCost = orderCost/stopTime;
holdCost = timeInStock*h/stopTime;
backCost = timeInBackorder*b/stopTime;
totCost = orderCost + holdCost + backCost;
costVector = [costVector totCost];
summa = summa + totCost;
% fillVector1 = [fillVector1 fillrate1];
meanTot = (1/n*summa);
end
Could someone help me with this? I have no idea why this is really happening!
4 Comments
Ardit Mehmeti
on 23 Feb 2020
Matt J
on 23 Feb 2020
How do we reproduce the error.
Eleanor Betton
on 24 Feb 2020
What is R1?
Maadhav Akula
on 4 Mar 2020
It would be helpful if you can specify the error message and your inputs to the function, to reproduce the error.
Answers (0)
Categories
Find more on Sensitivity Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!