Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Управление запасами

Автор: Yurka 17.03.2010 2:54

Текст задания:
Компании, которая продает продукцю 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я 17.03.2010 10:42

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

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

Автор: Lapp 17.03.2010 12:49

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

Автор: Ozzя 17.03.2010 15:12

Цитата
Имелось в виду умножение, полагаю..

Да-да, опечатка

Автор: Yurka 17.03.2010 16:37

Цитата(Ozzя @ 17.03.2010 7:42) *

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


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