Н
АЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МИЭТ»
Факультет микроприборов и технической кибернетики
Кафедра высшей математики ВМ-1
Выполнил студент группы МП-40
Стукалов А.В.
Проверил преподаватель
Лисовец Ю. П.
_____________зачтено/ не зачтено__________
Оглавление
Исследование данных о состоянии склада во временном пространстве 3
Стратегия для определения оптимальных характеристик оформления заказа: 3
Результаты исследования: 3
DUCER_14.05.08.xls Товар 64 (Вариант - 10) 3
Вывод 10
Приложения 11
Исследование данных о состоянии склада во временном пространстве
Изучим изменение состояния склада во времени и постараемся оптимизировать процесс пополнения склада с целью увеличения прибыли. Постараемся создать «движок», который сможет определить лучшую дату осуществления заказа и его объем. Будем использовать следующие параметры управления складом:
время ожидания пополнения склада после отправки заказа - 30 дней;
время отложенного платежа после доставки заказа 60 дней;
закупочная цена 1 у.е.;
продажная цена 2 у.е.;
стоимость пополнения склада 10 у.е. независимо от размера партии;
цена в условии дефицита (отсутствие товара с поставкой позже) 1.5 у.е.;
стоимость хранения 0.05 у.е. в день после истечения 60 дней хранения;
для каждой поставки свой счетчик (до 60 дней ноль, а остаток партии до обнуления оплачиваем).
Стратегия для определения оптимальных характеристик оформления заказа:
В каждый момент времени будем считать среднюю скорость потребления товара. Используя среднюю скорость потребления товара, предполагаем, на сколько дней хватит товара, присутствующего на складе. Если это количество дней меньше срока прихода заказа (30 дней), то делаем новый заказ. Количество заказываемого товара выбираем из расчета на то, что при текущей скорости потребления весь товар со склада должен быть распродан быстрее, чем товар будет доставлен и пройдет срок его бесплатного хранения.
Результаты исследования:
DUCER_14.05.08.xls Товар 64 (Вариант - 10)
Выгода, полученная после оптимизации 4.9067e+03
Применение стратегии для последующего временного ряда состояния склада. Данные взяты из DUCER_FUTURE.xls
Выгода, полученная после оптимизации 3.6347e+03
Применение
стратегии для последующего временного
ряда состояния склада. Данные взяты из
DUCER_FUTURE.xls
Выгода, полученная после оптимизации 5.8467e+03
Применение стратегии для последующего временного ряда состояния склада. Данные взяли из DUCER_FUTURE.xls
Вывод
Итак, выполнив данную курсовую работу можно сделать следующие выводы.
Результат применения адаптивной статистики напрямую зависит от сезонной составляющей спроса на товар. Товар №64 имеет малый вклад сезонной составляющей в продажи. Либо это товар какого-то повседневного пользования, либо его сезонность имеет большой период.
модели ограничен заранее спрос на товар. Однако, введение в модель возможности изменения цены сбыта позволило бы управлять спросом, а также оптимизировать цену приходящей партии, назначая минимальную цену, при которой новая партия гарантированно бы себя окупала.
Верный прогноз о расходах товара в будущем позволяет нам экономить на расходах, связанных с хранением товара и затратами на подвоз товара.
Engine.m
% dates - даты состояния складом
% trend - спрос
% window_size - размер сканирующего окна
% start_up_capital - стартовый капитал
% cost_replenishment_warehouse - стоимость пополнения склада
% selling_price - продажная цена
% price - себестоимость товара (закупочная цена)
% price_after_deficit - цена при условии дефицита
% cost_storage - стоимость хранения
% time_replenishment_warehouse - время ожидания пополнения склада после отправки заказа
% time_deferred_payment - время отложенного платежа после доставки заказа
function [ Q, profit, date_order, q_order ] = Engine(dates,trend, time_replenishment_warehouse, time_deferred_paymen, ...
start_up_capital, cost_replenishment_warehouse, ...
selling_price, price, price_after_deficit, cost_storage, window_size)
% [num data]= xlsread('DUCER_14.05.08.xls','Продажи');
% date = data(var,3);
% date = date(225:518);
% dates = datenum(date, 'dd.mm.yyyy') - datenum(date(1), 'dd.mm.yyyy');
% trend = num(var,6);
% transaction_attribute = data(var,10);
% тенденция покупок товара
remember=inf;
date_order = zeros(1, length(dates));
% начальное состояние склада
Q(1) = start_up_capital;
% доход
profit(1) = 0;
was_made_order = 0; % был ли уже сделан заказ
num_day = 1;
k = 0;%счетчик дней хранения полученного товара на складе с момента его поставки.
for i = 1:numel(trend)-1
k = k + 1;
num_day=num_day+1;
if i - 1 < window_size
Q_sum = abs(sum(trend(1 : i)))/(i);
else
Q_sum = fix( abs( sum(trend (i - window_size : i) ) )/ window_size );
end
% был ли уже сделан заказ?
if was_made_order == 0
if Q(i) - Q_sum * time_replenishment_warehouse < 0
% hold on
date_order(i) = dates(i);
q_order(i) = Q_sum * time_replenishment_warehouse;
% отмечаем точку заказа
%plot(dates(i),Q(i),'*r');
% запоминаем дату заказа
remember = dates(i);
% скорость расхода
flow_rate = Q_sum;
% отмечаем, что заказ сделан
was_made_order = 1;
end
end
if k < 60
storage = 0;
else
storage = cost_storage;
k = 0;
end
% рассчитываем доход, если товаров на складе достаточно, то есть находимся не в условии
% дефицита
if Q(i) - trend(i) > 0
profit(i+1) = profit(i) + selling_price * trend(i)-storage;
% находимся в условии дефицина
else
if Q(i) > 0 % если на складе присутствует некоторое кол-во товаров, то
% продаем их по обычной цене, недостающий товар продаем по цене
% при условии дефицита
profit(i+1) = profit(i) + selling_price*Q(i) + price_after_deficit * (trend(i) - Q(i))-storage;
else
% продаем по цене при дефиците
profit(i+1) = profit(i) + price_after_deficit * trend(i)-storage;
end
end
Q(i+1) = Q(i) - trend(i);
if dates(i) >= remember + time_replenishment_warehouse %если с момента заказа прошло 30 дней, т.е.
% заказ уже доставили, пополняем склад
% Объем закупки
q = flow_rate * time_deferred_paymen;
Q(i+1) = Q(i) + q;
remember = inf;
was_made_order = 0;
% вычитаем накладные расходы на приобретение товара, а также на его
% хранение
profit(i+1) = profit(i) - cost_replenishment_warehouse - price*q-storage;
end
end
end
KR.m
clc
close all
clear all
start_up_capital = 100; %стартовый капитал
cost_replenishment_warehouse = 10;% стоимость пополнения склада
selling_price = 2; % цена продажи
price = 1; % закупочна цена
price_after_deficit = 1.5; %цена в условии дефицита
cost_storage = 0.05; % стоимость хранения 0.05 у.е. в день после истечения 60 дней хранения;
var = [1100:1460]; % товар 64
var_future = [2011:2509]; % товар 64 в будущем
[num data]= xlsread('DUCER_14.05.08.xls','Продажи');
date = data(var,3);
dates = datenum(date, 'dd.mm.yyyy') - datenum(date(1), 'dd.mm.yyyy');
trend = num(var,6);
transaction_attribute = data(var,10);
time_replenishment_warehouse = 30;
time_deferred_paymen = 60;
window_size =300; % размер сканирующего окна
for i =1:numel(trend)
if strcmp(transaction_attribute{i}, 'vvod') % поступление товара на склад
trend(i) =-trend(i);
end
end
i = 1;
Q(1) = start_up_capital;
profit(1) = 0;
for i = 1:numel(trend)-1
Q(i+1) = Q(i) + trend(i);
if(Q(i)<0)
cost = price_after_deficit;
else
cost = selling_price;
end
if(trend(i)<0)
profit(i+1) = profit(i) + abs(cost*trend(i));
else
profit(i+1) = profit(i) - cost_replenishment_warehouse - price*trend(i);
end
end
[ new_Q, new_profit, date_order, q_order] = Engine(dates,trend, time_replenishment_warehouse, time_deferred_paymen, ...
start_up_capital, cost_replenishment_warehouse, ...
selling_price, price, price_after_deficit, cost_storage, window_size);
figure
plot(dates,Q, 'r');
hold on
% после оптимизвциии
plot(dates,new_Q, 'g');
DO = find(date_order ~= 0);
plot(dates(DO), new_Q(DO),'s','LineWidth',2,...
'MarkerSize',5,...
'MarkerEdgeColor','b',...
'MarkerFaceColor',[0.2,0.2,0.2]);
xlabel('Время, дни')
ylabel('Кол-во товаров на складе')
grid on
title('Состояние склада')
legend('до оптимизации', 'после оптимизации', 'точка заказа')
figure
hold on
plot(dates,profit,'r')
plot(dates,new_profit , 'g')
xlabel('Время, дни')
ylabel('Доход, у.е.')
grid on
title('Доход')
legend('до оптимизации', 'после оптимизации')
disp('Размер сканирующего окна')
disp(window_size)
disp('Выгода, полученная после оптимизации')
disp(new_profit(end) - profit(end));
Data_ORder = dates(DO);
fprintf('[')
for i = 1:1:length(Data_ORder)
if i~=length(Data_ORder)
fprintf('%.16f ',Data_ORder(i))
else
fprintf('%.16f',Data_ORder(i))
end
end
fprintf(']\n')
ZA = q_order(DO);
fprintf('[')
for i = 1:1:length(ZA)
if i~=length(ZA)
fprintf('%.16f ',ZA(i))
else
fprintf('%.16f',ZA(i))
end
end
fprintf(']\n')
Opt_Zak = ZA;
Opt_day = Data_ORder;
[num data]= xlsread('DUCER_FUTURE.xls','Анализ');
date = data(var_future,3);
dates = datenum(date, 'dd.mm.yyyy') - datenum(date(1), 'dd.mm.yyyy');
trend = num(var_future,6);
transaction_attribute = data(var_future,10);
for i =1:numel(trend)
if strcmp(transaction_attribute{i}, 'vvod') % поступление товара на склад
trend(i) = 0;
end
end
i = 1;
Q(1) = start_up_capital;
profit(1) = 0;
l=1;
figure
hold on
for i = 1:numel(trend)-1
if (Q(i)-trend(i)>0)
profit(i+1) = profit(i)+selling_price*trend(i);
else
profit(i+1)= profit(i)+selling_price*Q(i);
profit(i+1)=profit(i+1)+price_after_deficit*(trend(i)-Q(i));
end
Q(i+1)=Q(i)-trend(i);
if l<=length(Data_ORder)
if dates(i)>=Opt_day(l)
hold on
plot(dates(i),Q(i),'*r');
Q(i+1) = Q(i)+Opt_Zak(l);
profit(i+1) = profit(i) - cost_replenishment_warehouse - price*Opt_Zak(l);
l=l+1;
end
end
end
hold on
plot(dates,Q, 'g');
DO = find(date_order ~= 0);
xlabel('Время, дни')
ylabel('Кол-во товаров на складе')
grid on
title('Состояние склада')
figure
plot(dates,profit,'r')
xlabel('Время, дни')
ylabel('Доход, у.е.')
grid on
title('Предсказание дохода')