Помощь - Поиск - Пользователи - Календарь
Полная версия: Управление запасами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Yurka
Текст задания:
Компании, которая продает продукцю m видов, необходимо определить, какое количество продукции она должна иметь в запасе на каждый из следующих месяцев (n - задан входной параметр). Промежутки времени между возникновением спроса на товар являются независимыми и представленные случайными величинами с одинаковым распределением со средним значением 0,1 мес. Объемы спроса D также являются независимыми (не зависят от того, когда возникает спрос) и одинаково распределены случайные величины:
D={1 с вероятностью 1/6; 2 с вероятностью 1/3; 3 с вероятностью 1/3; 4 с вероятностью 1/6 }
В начале каждого месяца компания пересматривает уровень запасов и решает, какое количество запасов заказать у поставщика. В случае, когда компания заказывает Z единиц товара, она будет нести затраты, равные Kj +ij Z, где Kj - закупочная стоимость товара j, j=1,m ij - дополнительные затраты на единицу заказанного товара. (Если Z=0, любые затраты отсутствуют). При оформлении заказа, время необходимо для его доставки, является случайной величиной, равномерно распределенной между 0,5 и 1 мес.
Компания использует постоянную стратегию управления запасами, чтобы определить какое количество товара заказывать
Z={S-1 если I<s; 0 если I>=s}
Где I,S, s – это соответственно уровень запасов в начале месяца, после поступления заказа и критический.
При возникновении спроса на товар он немедленно удовлетворяется, если уровень запасов, хотя бы равный спросу на товар. Если спрос превышает уровень запасов, поставка той части товара, который превышает спрос над предложением, откладывается и выполняется при будущих поставках. (В этом случае новый уровень запасов равен старому уровню запасов минус объем спроса, который приводит к появлению отрицательного уровня запасов.) При поступлении заказа товар в первую очередь используется для максимального возможного выполнения отложенных поставок (если такие есть); остаток заказа (если такой есть) добавляется в запасы.
Решил смоделировать на Pascal
Код

program var1;
uses crt;
var
n,k,j,klspros:integer;
I,t,x,d,y,Z,S,sumy,sumazak,sumazap,s1,Sp:real;
Begin
clrscr;

write('n=');
readln(n);

write('Krit_yroven_zapasov s=');
readln(s1);

write('verxniy_krut_yroven_zapasov S=');
readln(S);


write('yroven_zapasov_v_nachale_1_mesyaca I=');
readln(I);
K:=32;

randomize;

for k:=1 to n do begin        {для каждого месяця моделируем значения}

  writeln(k,' mesyac');
  sumazak:=0;
  sumazap:=0;
  t:=0;
  sumy:=0;

  while sumy<=1 do begin              {пока сума промежутков появления спроса не равна 1,
                                                      то есть 1 месяцу}
  
    x:=random;
   if x<=(1/6) then d:=1                {генерируем величину спроса}
    else
    if x<=(1/6+1/3) then d:=2
    else
    if x<=(1/6+1/3+1/3) then d:=3
    else
    if x<=(1/6+1/3+1/3+1/6) then d:=4;

    sumazak:=sumazak+d;                   {суммируем величину спроса}
    
    y:=random(9)/100;                      {генерируем промежуток времени появления спроса}
    klspros:=klspros+1;

    if klspros>1 then begin              

{прибавляем к следующему промежутку 0,1, чтобы вышло среднее 0,1,
например если 10 чисел, то получиться (1ч+(2ч-1ч)+(3ч-2ч)+...(10ч-9ч))/10?}

       t:=t+0.1;
       y:=y+t;
       end;

    sumy:=sumy+y;          {суммируем промежутки времени}

    
     write('   t= ',y:7:2);                 {выводим значения на екран}
     write('  spros d=',d:7:1);
     write('  k-stvo tovara=',I:7:2);

     if I>=s1 then                    {используем заданую в условии стратегия поплнения запасов}
     Z:=0;
     if I<s1 then
     Z:=S-1;

     if I>=d then begin                {если можно удовлетворить спрос выводим +
                                                и отнимаем количество товара }
     I:=I-d;
     write ('  + ');
     end;
    
     if I<d then  begin             {если нельзя удовлетворить спрос выводим -
                                             и отнимаем количество товара }
     I:=I-d;
     write ('  - ');
     end;
     writeln(' zakazano=',Z:7:2);       {выводим значения на екран}

     I:=I+Z;
     sumazap:=sumazap+Z;               {суммируем заказынные товары}

  end;
writeln('sumasprosa=',sumazak:7:2,'  sumazazakazov_tovara=',sumazap:7:2, '  zatratu=',(sumazap*3+32):7:2
,' ostatok I=',I:7:2);                {выводим значения на екран}
writeln;
end;

readkey
end.


Пока что такие вопросы:
-правильно ли я сгенерировал промежутки времени появления спроса?
-как правильно сгенерировать значения от 0,5 до 1?

Ozzя
Цитата
-как правильно сгенерировать значения от 0,5 до 1?

(max-min)*random+min
то есть - (1-0.5)**random+0.5
Lapp
Цитата(Ozzя @ 17.03.2010 6:42) *
то есть - (1-0.5)*random+0.5
Имелось в виду умножение, полагаю..
Ozzя
Цитата
Имелось в виду умножение, полагаю..

Да-да, опечатка
Yurka
Цитата(Ozzя @ 17.03.2010 7:42) *

(max-min)*random+min
то есть - (1-0.5)**random+0.5


спасибо! с этим розобрался
хотелось бы узнать ваше мнение на первый вопрос:
правильно ли я сгенерировал промежутки времени появления спроса?

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.