Сборник задач и упражнений по курсу "Моделирование" (Событийный подход. Программное моделирование), страница 3

TimeCarSys:=TIME;

comment  Задержка на время подъезда к экскаватору;

HOLD(TimeCarIn);

comment  Машина встает в очередь и активизирует экскаватор;

INTO(HeadCar);

ACTIVATE Eks;

comment Машина ожидает загрузки в очереди;

PASSIVATE;

comment Загруженная машина уезжает из системы;

HOLD(TimeCarOut);

GrAll:=GrAll+GrCar;

TimeCarAll:=TimeCarAll+(TIME-TimeCarSys);

end;

comment Класс "экскаватор";

Process  CLASS Ekskavator(PrEks);

comment  Ekskavator - имя класса;

comment Описание формальных параметров;

comment PrEks - производительность экскаватора;

integer PrEks;

Begin

comment   Описание переменных класса "экскаватор";

comment  TimeEksStart - время начала простоя;

comment  TimeEksProstoy - простой экскаватора;

real TimeEksStart,TimeEksProstoy;

comment описание ссылочной переменной на машину;

ref(Car) M;

comment Сначала простой равен времени начала работы экскаватора;

TimeEksProstoy:=TIME;

comment  Работа экскаватора;

comment Выбираем из очереди первую машину;

Work: FOR M:-HeadCar.First WHILE M=/=NONE DO

Begin

comment  Удаляем машину из очереди;  

M.out;

comment  Загружаем машину;

HOLD(M.GrCar*PrEks);

comment  Отправляем загруженную машину;

ACTIVATE  M;

End;

comment  Запоминаем время начала простоя экскаватора;

TimeEksStart:=Time;

comment  Экскаватор простаивает;

PASSIVATE;

comment Приехала машина. Конец простоя экскаватора;

TimeEksProstoy:=TimeEksProstoy+(Time-TimeEksStart);

GOTO  Work;

End;

comment Класс "генератор машин";

Process  CLASS Generator;

comment  Generator - имя класса;

Begin

comment   Описание переменных класса "генератор машин";

comment  TCarIn - время подъезда машины к экскаватору;

comment  TCarOut - время отъезда машины от экскаватора;

Real TCarIn, TCarOut;

comment GCar -грузоподъемность машины;

comment ColCar -количество созданных  машин;

Integer GCar, ColCar;

comment описание ссылочной переменной на машину;

ref(Car) Mnew;

comment Сначала количество машин равно нулю;

ColCar:=0;

WHILE (TIME<=Tmod)

DO

Begin

comment Получение случайных величин, распределенных по          равномерному закону, для времени подъезда и для                             времени отъезда машины;                           

TCarIn:=UNIFORM(A_TCarIn,B_TCarIn,U_TCarIn);

TCarOut:=UNIFORM(A_TCarOut,B_TCarOut,U_TCarOut);

comment Получение случайной величины, распределенной по          равномерному закону для целых чисел, для грузоподъемности машины;                           

GCar:=RANDINT(A_GCar,B_GCar,U_GCar);

comment Создание новой машины;

Mnew:- NEW Car(TCarIn,GCar,TCarOut);

comment Машина поехала;

ColCar:=ColCar+1;

ACTIVATE Mnew;

comment  Через случайное время появится новая машина;

HOLD(UNIFORM(A_Mnew,B_Mnew,U_Mnew));

End;

End;

comment  Создание и активизация объектов;

Gen:-NEW Generator;

HeadCar:-NEW Head;

Eks:-NEW Ekskavator(Proiz_Eks);

ACTIVATE Gen;

comment  Начало моделирования;

HOLD(Tmod);

comment Вывод результатов;

Outtext("Zagryzra =  ");

OutFix((Tmod-Eks.TimeEksProstoy)/Tmod,2,4);

Outimage;

Outtext("Gryz za cmehy  = ");

OutInt(GrAll,6);

Outimage;

Outtext(" Sredhee time =  ");

OutFix(TimeCarAll/Gen.ColCar,2,6);

Outimage;

inint;

End;

End;

Результаты работы программы:

Загрузка экскаватора  =    0.57

Объем груза за смену  =    122

Среднее время пребывание самосвалов в карьере =  49.88

3.2.2. Работы аэропорта

Описание системы

Грузы прибывают для отправки в аэропорт в контейнерах со скоростью 2 контейнера в 1 мин. В грузовом аэропорту нет фиксированного расписания, а самолеты отправляются по мере их полной загрузки. В распоряжении имеются 2 типа самолетов. Есть 3 самолета с грузоподъемностью 80 контейнеров и 2 самолета с грузоподъемностью 140 контейнеров. Время полета каждого самолета туда и обратно распределено нормально с математическим ожиданием 3 ч. и среднеквадратичным отклонением 1 ч., минимумом 2 ч. и максимумом 4 ч. Управляющий аэропортом старается как можно чаще использовать самолеты меньшей грузоподъемности. Самолеты, поднимающие 140 контейнеров, используются только тогда, когда других нет в наличии.