Управление складскими запасами при наличии тренда, «сезонной составляющей» и элемента случайности в одной характеристике — скорости расходования продукта на примере задачи 1 из Занятия 5.
Жидкие продукты разливается в пакеты на линии упаковки. Затраты на подвоз 700 у.е. Совокупная потребность в этих продуктах составляет 140 000 литров в месяц. Стоимость хранения 1 литра в течение месяца составляет 4 у.е. Определить оптимальные параметры пополнения склада цеха разлива.
1 этап (в аудитории)
Заданные в условии этой задачи параметры служат Вам для ориентира и сравнения полученных Вами результатов с исходной задачей. Моделируемый Вами параметр — потребность в этих продуктах (скорость расходования).
Сначала включим элемент случайности в этот параметр. Пусть скорость расходования за какой-то промежуток времени (его определите сами) случайным образом меняется. В этом случае у Вас может образоваться дефицит (отсутствие товара на складе) или переполнение склада (довоз товара еще при его наличии). Чтобы оценить эффективность Вашего управления введите еще одну экономическую характеристику — доход от реализации единицы товара. Объясните, почему на прошлом занятии мы не нуждались в такой характеристике. Постройте график состояния склада за три месяца, а также график дохода. Как, используя статистический анализ, снизить потери.
Далее, (без фактора случайности) предполагаем наличие линейного тренда и сезонной (по дням недели), затем сезонной составляющей (аддитивной и (или) мультипликативной). Срок управления три месяца.
Основная выходная характеристика — размер первого пополнения склада. Вычисляемые в зависимости от этой величины параметры — интервалы между следующими пополнениями склада и размеры этих пополнений. Графическая иллюстрация — состояние склада. Оценка проекта — расходы на эту деятельность за три месяца.
Полная свобода творчества.
2 этап (дома)
Усложнение модели — добавление случайности в смоделированную Вами потребность в этих продуктах (скорость расходования) при наличии тренда и сезонной составляющей.
Дополнительно (дома)
Экспортировать смоделированный Вами в MATLAB вектор (векторы) случайных потребностей (скоростей расходования) продукта в Excel и в этой программной среде дать графическую иллюстрацию Вашего управления складом.
Основные параметры:
(условных денежных единиц) — стоимость
хранения единицы товара на складе в
единицу времени (в день)
(условных денежных единиц) — затраты
на организацию поставки сырья
(литров в день) — скорость расходования
товара (жидких продуктов) в единицу
времени
(условных денежных единиц) — доход от
реализации единицы товара в единицу
времени
При этом будем считать, что:
Скорость расходования товара остается постоянной в течение дня
Скорость
расходования товара меняется по
следующему закону:
,
где
— нормальное распределение,
— текущая скорость расходования товара
Размер
заказа так же, как и раньше, равен
Пополнение склада так же, как и раньше, осуществляется раз в полтора дня
Если подвоз товара осуществляется при его наличии на складе, то прибыль будет уменьшаться за счет увеличения затрат на хранения товара.
Ситуация, когда количество товара на складе выражается отрицательным числом, соответствует тому, что происходит продажа отсутствующего товара. Будем рассматривать такую ситуацию как продажу с задержкой. Товар, продаваемый с задержкой, будем отпускать по вдвое меньшей цене, т.о. прибыль будет уменьшаться за счет продажи товара по сниженной цене.
Matlab.
clc; clear all;
% основные параметры модели
v = 140000/30;
k = 700;
S = 4/30;
r = 1;
% рассмотрим работу склада в течение 3 месяцев (90 дней)
times = 0:0.01:90;
% оптимальные параметры
q_opt = sqrt(2*k*v/S);
t_opt = sqrt(2*k/(v*S));
% при постоянной скорости расходования товара
Q1 = zeros(1, length(times));
P1 = zeros(1, length(times));
for i = 1:(length(times)-1)
if (mod(times(i), t_opt) == 0)
Q1(i) = Q1(i) + q_opt;
P1(i+1) = P1(i) - 700;
end
% затраты на хранение
P1(i+1) = P1(i) - S*Q1(i)*0.01;
% доход за реализацию товара
P1(i+1) = P1(i) + r*v*0.01;
Q1(i+1) = Q1(i) - v*0.01;
end
% при случайной скорости расходования товара
Q2 = zeros(1, length(times));
P2 = zeros(1, length(times));
for i = 1:(length(times)-1)
if (mod(times(i), t_opt) == 0)
Q2(i) = Q2(i) + q_opt;
P2(i+1) = P2(i) - 700;
end
% в течение дня (1) скорость расходования остается постоянной
if (mod(times(i), 1) == 0)
% vc (v current) - текущая скорость
vc = v + randn*0.1*v;
end
% затраты на хранение
P2(i+1) = P2(i) - S*Q2(i)*0.01;
if (Q2(i) >= 0)
% второе слагаемое - доход за реализацию товара
P2(i+1) = P2(i) + r*vc*0.01;
else
% второе слагаемое - вдвое меньший доход за реализацию товара
P2(i+1) = P2(i) + 0.5*r*vc*0.01;
end
Q2(i+1) = Q2(i) - vc*0.01;
end
% график состояния склада
figure;
hold on;
stairs(times, Q1, 'b');
stairs(times, Q2, 'r');
legend('Оптимальная система разлива', 'Случайная скорость расходования');
ylabel('Q (в литрах)');
xlabel('t (в днях)');
grid on;
hold off;
% график прибыли
figure;
plot(times, P1, 'b', times, P2, 'r');
legend('Оптимальная система разлива', 'Случайная скорость расходования');
ylabel('P (в условных денежных единицах)');
xlabel('t (в днях)');
grid on;
График состояния склада.
График
прибыли.
Проверим графики еще раз.
График
состояния склада.
График
прибыли.
Новая экономическая характеристика — доход от реализации единицы товара в единицу времени — необходима для учета продаж с задержкой. В прошлой лабораторной работе доход можно было вычислить заранее.
Линейный тренд:
,
где
,
.
Будем считать, что:
Подвоз товара на склад осуществляется мгновенно
Продолжительность одного цикла постоянна и равна продолжительности одного цикла оптимальной системы разлива
В качестве начального пополнения склада (размера заказа) возьмем соответствующее значение оптимальной системы разлива
Для вычисления
величины очередного подвоза
используем линейную интерполяцию:
где
,
— скорости расходования товара в текущий
и начальный момент времени,
— продолжительность одного цикла, 0.02
— удвоенный шаг по времени,
— состояние склада на конец цикла.
Таким образом, на каждом цикле новое значение подбирается так, чтобы компенсировать увеличение скорости расходование товара (за счет тренда) и остаток товара после предыдущего цикла.
Matlab.
clc; clear all;
% основные параметры модели
v = 140000/30;
k = 700;
S = 4/30;
r = 1;
P = 0; % прибыль (или расходы?) за 3 месяца работы склада
% рассмотрим работу склада в течение 3 месяцев (90 дней)
times = 0:0.01:90;
% оптимальные параметры
q_opt = sqrt(2*k*v/S);
t_opt = sqrt(2*k/(v*S));
% параметры линейного тренда
v0 = v/2;
a = v/90;
Q = zeros(1, length(times));
vc = zeros(1, length(times)-1);
q = q_opt*ones(1, ceil(90/t_opt));
% period - номер цикла
period = 1;
for i = 1:(length(times)-1)
% в течение дня (1) скорость расходования остается постоянной
if (mod(times(i), 1) == 0)
% без учета фактора случайности
vc(i) = v0 + a*times(i);
% с учетом фактора случайности
% vc(i) = (1/5*(rand-0.5)+1)*(v0 + a*times(i));
else
vc(i) = vc(i-1);
end
if (mod(times(i), t_opt) == 0)
% на первой итерации размер пополнения не предсказывается
if (times(i) > 0)
period = period + 1;
q(period) = (vc(i) + (vc(i)-vc(1))/(i-1)*t_opt/2/0.01)*t_opt - Q(i-1);
% отрицательный размер пополнения невозможен
if (q(period) < 0)
q(period) = 0;
end
end
Q(i) = Q(i) + q(period);
P = P - 700;
end
% затраты на хранение
P = P - S*Q(i)*0.01;
% второе слагаемое - доход за реализацию товара
P = P + r*vc(i)*0.01;
Q(i+1) = Q(i) - vc(i)*0.01;
end
% график состояния склада
figure;
plot(times, Q, 'b', 0:t_opt:90, 0, 'r.');
ylabel('Q (в литрах)');
xlabel('t (в днях)');
grid on;
% график изменения величины размера пополнения склада
figure;
plot(1:length(q), q, 'b');
ylabel('q (в литрах)');
xlabel('t (в днях)');
grid on;
% основные параметры модели
fprintf('Линейный тренд:\n');
fprintf('Средний размер пополнения склада: %.0f\n', mean(q));
fprintf('Прибыль за три месяца: %.0f\n', P);
График состояния склада (красными точками отмечено время подвоза товара).
График
изменения размера пополнения склада.
Линейный тренд:
Средний размер пополнения склада: 6960
Прибыль за три месяца: 333153
Будем считать, что продолжительность одного цикла постоянна и равна семи дням.
Сделаем следующее упрощение модели: убытки, связанные с дефицитом товара, учитывать не будем. Подвоз товара, как и раньше, осуществляется мгновенно.
Величина очередного подвоза — значение интеграла от функции скорости расходования товара за предыдущую неделю. В вычисленное значение , будем вносить соответствующую поправку, учитывая состояние склада на конец недели.
Matlab.
clc; clear all;
% основные параметры модели
v = 140000/30;
k = 700;
S = 4/30;
r = 1;
P = 0;
% рассмотрим работу склада в течение 3 месяцев (90 дней)
times = 0:0.01:90;
% оптимальные параметры
q_opt = sqrt(2*k*v/S);
t_opt = 7;
% параметры сезонной составляющей:
% скорость расходования товара
% в зависимости от дня недели (в процентах от v)
w = [0.6 0.3 0.1 0.9 1.3 1.7 2.3];
Q = zeros(1, length(times));
vc = zeros(1, length(times));
q = q_opt*ones(1, ceil(90/t_opt));
% period - номер цикла
period = 1;
for i = 1:(length(times)-1)
if (mod(times(i), 1) == 0)
% без учета фактора случайности
vc(i) = w(mod(times(i), 7) + 1)*v
% с учетом фактора случайности
% vc(i) = (1/5*(rand-0.5)+1)*w(mod(times(i), 7) + 1)*v;
else
vc(i) = vc(i-1);
end
if (mod(times(i), t_opt) == 0)
% на первой итерации размер пополнения не предсказывается
if (times(i) > 0)
period = period + 1;
q(period) = sum(vc(i-t_opt/0.01:i)*0.01) - Q(i-1);
% отрицательный размер пополнения невозможен
if (q(period) < 0)
q(period) = 0;
end
end
Q(i) = Q(i) + q(period);
P = P - 700;
end
% затраты на хранение
P = P - S*Q(i)*0.01;
% второе слагаемое - доход за реализацию товара
P = P + r*vc(i)*0.01;
Q(i+1) = Q(i) - vc(i)*0.01;
end
% график состояния склада
figure;
plot(times, Q, 'b', 0:t_opt:90, 0, 'r.');
ylabel('Q (в литрах)');
xlabel('t (в днях)');
grid on;
% график изменения величины размера пополнения склада
figure;
plot(1:length(q), q, 'b');
ylabel('q (в литрах)');
xlabel('t (в днях)');
grid on;
% основные параметры модели
fprintf('Сезонная составляющая:\n');
fprintf('Средний размер пополнения склада: %.0f\n', mean(q));
fprintf('Прибыль за три месяца: %.0f\n', P);
Результаты.
Сезонная составляющая:
Средний размер пополнения склада: 33594
Прибыль за три месяца: 165654
График состояния склада (красными точками отмечено время подвоза товара).
График
изменения размера пополнения склада.