Курсовая работа по курсу «Теория игр и исследование операций» на тему: «Пополнение реального склада».
Вариант 7
Выполнила: студентка гр. МП-40
Гришова Полина
Проверил: Лисовец Ю. П.
2018
Оглавление
Параметры исследуемой модели. 3
Действующая стратегия. 3
Нахождение оптимальной стратегии. 4
Оптимальное заполнение склада. 6
Сравнение двух стратегий. 7
Вывод. 8
Приложение. 9
Время ожидания пополнения склада после заказа – 30 дней.
Время отложенного платежа после доставки заказа – 60 дней.
Закупочная цена за единицу товара – 1 у.е.
Конкурентно-способная продажная цена единицы товара – 2 у.е.
Цена единицы товара в условиях дефицита – 1.5 у.е.
Стоимость пополнения склада независимо от размера партии – 10 у.е.
Стоимость хранения единицы товара (в день) после истечения 60 бесплатных дней хранения – 0.05 у.е.
Начальное количество товара на складе – 100 ед.
Начальное число средств у предприятия – 100 у.е.
Рассмотрим действующую стратегию, основываясь на предоставленных данных. (Все данные заданы в таблице sklad.xlxs)
Красными точками отмечены дни привоза товара на склад.
Из графика видно, что фирма закупает больше товара, чем раскупается. Из-за этого происходит переполнение склада, что ведет к замедлению роста доходов фирмы.
Для оптимизации работы склада следует провести оптимизацию следующих параметров:
- нахождение оптимальной точки заказа;
- оптимальное количество товара для заказа.
Воспользуемся следующими предположениями.
Для любого возможного значения времени t (в днях) будем считать среднюю скорость потребления товара
где
– количество товара, копленного в момент
времени
.
Тогда можно вычислить среднее количество дней, на которое должно хватить товара, лежащего на складе
где
– количество товара на складе в момент
времени
.
Учтем
тот факт, что скорость потребления
товара может меняться очень резко. Тогда
приходится делать заказ на новую партию
раньше, чем будет доставлена ранее
заказанная партия. Тогда пересчитаем
значение
следующим образом
где
– количество товара, заказанного, но
не доставленного на склад к моменту
времени
.
Зная срок доставки товара на склад после заказа (30 дней), выберем оптимальный момент времени для заказа из условия
Найдем оптимальное количество товара для заказа, учитывая среднюю скорость раскупаемости товара
Здесь
– масштабирующий коэффициент.
Коэффициент подбирается из требований реальных задач. Мы же рассмотрим зависимость полученной прибыли от него, и воспользуемся тем, при котором прибыль будет максимальна.
Так
же учтем, что если в момент времени
склад находится в дефиците, то оптимальное
количество товара будем считать как
где
– количество дефицитного товара.
По
графику видно (и с помощью средств Matlab
проверено), что оптимальное значение
.
Примечание.
Нахождение коэффициента с помощью средств Matlab – нахождение максимального значения в массиве прибыли (зависящего от ) и соответствующего ему .
Рассмотрим теперь заполнение склада и прибыль при оптимальных параметрах.
Мы видим, что большая часть товара находится на складе дольше 60ти-дневного срока, но стоимость за простой довольно мала, из-за чего не сильно теряем в прибыли. Вначале наблюдается резкое падение состояния склада, к концу мы видим уменьшение размера заказанных партий (из-за уменьшения спроса). В конце состояние склада стремится к нулю (что хорошо).
Проверим, что прибыль при оптимальном заполнении склада будет намного больше, чем при начальном заполнении склада.
В ходе оптимизации мы получили стратегию, при которой прибыль к концу периода становится выше, чем для начального состояния склада. Пополнение склада выглядит реалистичным – не часто и на большое количество товаров (обычно, закупка оптом выходит дешевле и для пополнения склада предпочитают большие партии)
В данной модели не учитывались многие факторы, например, что обычно стоимость товаров в дефиците довольно низка (из-за опоздания продажи), а за простой платят намного больше.
Так же для улучшения модели можно сделать коэффициент не постоянным, а зависящим от количества товаров на складе.
Таким образом, полученная оптимальная модель действительно показывает значительный рост прибыли, но требуются ее усовершенствования для приближения результата заполнения к реальности.
Далее представлен код Matlab проделанной работы.
clc; close all;
% [D, metka]=xlsread('sklad.xlsx');
% % состояние склада
Days = D(:,2); % Дата в числовом формате
Days = fix(Days - Days(1)); % Число дней с начала продаж
vvod = 0; l = 1; trata = 0; k = 1;
Q=zeros( 1,fix(Days(end)) );
Q(1) = 100; % в начальный момент
for i = 2:1:fix(Days(end))
for j=2:1:length(metka(:,4))
if ( Days(j-1)==i )
if ( strcmp(metka(j,4),'бн') || strcmp(metka(j,4),'н') )
Q(i) = Q(i) - abs(D(j-1,3));
trata(k) = j; k = k + 1;
end
if ( strcmp(metka(j,4),'vvod') )
Q(i) = Q(i) + abs(D(j-1,3));
vvod(l) = j; l = l + 1;
end
end
end
end
for i = 2:1:fix(Days(end))
Q(i) = Q(i-1) + Q(i);
end
figure; grid on; hold on;
plot(Q(1:end))
plot(Days(vvod), 0,'r*')
xlabel('Дни');
ylabel('Кол-во товаров');
title('Состояние склада');
% прибыль
Q_new=[];
Q_new=Q;
P=zeros( 1,Days(end)+60 ); % прибыль
P(1) = 100; % в начальный момент
for i = 1:1:Days(end)
for j = 1:1:length(trata)
if ( Days(trata(j)-1)==i )
% доходы
if ( Q(trata(j))>0 )
P(i) = P(i) + abs(D(trata(j)-1,3))*2;
else
P(i) = P(i) + abs(D(trata(j)-1,3))*1.5;
end
% расходы
for k = 1:1:length(vvod)
if ( Days(vvod(k)-1)==i )
if ( Q_new(i)>0 )
if ( Days(trata(j))-Days(vvod(k)) > 60 )
P(i) = P(i) - Q_new(i)*0.05;
end
end
end
end
end
end
for j = 1:1:length(vvod)
if ( Days(vvod(j)-1)==i )
P(i) = P(i) - 10;
P(i+60) = P(i+60) - abs(D(vvod(j)-1,3));
end
end
end
for i = 2:1:Days(end)+60
P(i) = P(i-1) + P(i);
end
figure; grid on; hold on;
plot(1:1:fix(Days(end)), P(1:end-60))
xlabel('Дни');
ylabel('Прибыль');
title('Прибыль');
% %%%%%%%%%%%%%%%%%
% % оптимизация
% P_all=[]; s=1;
% for K=5:5:300
Q1 = zeros( 1,Days(end) ); % массив только для расхода со склада
for i = 1:1:Days(end)
for j = 1:1:length(trata)
if ( Days(trata(j)-1)==i )
Q1(i) = Q1(i) - abs(D(trata(j)-1,3));
end
end
end
Q1_new = zeros( 1,Days(end) ); % количество товара на складе
Q1_new(1) = Q(1);
for i = 2:1:Days(end)
Q1_new(i) = Q1_new(i-1) + Q1(i);
end
v = zeros( 1,Days(end) ); % средняя скорость потребления товара
N = zeros( 1,Days(end) ); % предположительно, на сколько дней хватит товара
R = zeros( 1,Days(end) ); % на сколько надо поплнить склад
Rf = 0; % поправка
K = 290; % коэффициент
n = 1; i = 1;
vvod1=[];
for i = 1:30:Days(end)
v(i) = abs( sum(Q1(1:i)) / i );
N(i) = ( Q1_new(i) + Rf ) / fix( v(i) );
if ( N(i) < 30 )
R(i) = fix( v(i) * K );
if ( Q1_new(i) < 0 )
R(i) = R(i)-Q1_new(i);
end
vvod1(n) = i; n = n + 1;
if ( i+31 < Days(end) )
Q1_new(i+30:end) = Q1_new(i+30:end) + R(i);
end
end
if (i-30 > 1)
Rf = sum(R(i-30:i));
else
Rf = sum(R(1:i));
end
end
% результаты
figure; grid on; hold on;
plot(Q1_new)
plot(vvod1, 0,'r*')
xlabel('Дни');
ylabel('Кол-во товаров');
title('Состояние склада после оптимизации');
% пересчитаем прибыль и сравним с предыдущим значением
P1=zeros( 1,Days(end)+60 ); % прибыль
P1(1) = 100; % в начальный момент
for i = 1:1:Days(end)
for j = 1:1:length(trata)
if ( Days(trata(j)-1)==i )
% доходы
if ( Q(trata(j))>0 )
P1(i) = P1(i) + abs(D(trata(j)-1,3))*2;
else
P1(i) = P1(i) + abs(D(trata(j)-1,3))*1.5;
end
% расходы
for k = 1:1:length(vvod1)
if ( vvod1(k)==i )
if ( Q1_new(i)>0 )
if ( Days(trata(j)-1)-vvod1(k) > 60 )
P1(i) = P1(i) - Q1_new(i)*0.05;
end
end
end
end
end
end
for j = 1:1:length(vvod1)
if ( vvod1(j)==i )
P1(i) = P1(i) - 10;
P1(i+60) = P1(i+60) - R(vvod1(j));
end
end
end
for i = 2:1:Days(end)+60
P1(i) = P1(i-1) + P1(i);
end
figure; grid on; hold on;
plot(P1(1:end-60),'r')
xlabel('Дни');
ylabel('Прибыль');
title('Прибыль после оптимизации');
figure; grid on; hold on;
plot(P(1:end-60))
plot(P1(1:end-60),'r')
xlabel('Дни');
ylabel('Прибыль');
title('Сравнение прибыли');
legend('Данное','Оптимизированное')
% P_all(s)=P1(end);
% s=s+1;
% end
%
% % зависимость прибыли от К
% figure; grid on; hold on;
% plot(5:5:300, P_all);
% xlabel('Значение К');s
% ylabel('Прибыль');
% title('Зависимость прибыли от К');
% w=0;
% [P_max w]=max(P_all);
% K=5*w