Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 6. Симула - универсальный процессо-ориент...doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
386.56 Кб
Скачать

Общая структура программы моделирования

Описание модели в языке Симула оформляется в виде блока с префиксом SIMULATION. Типичная структура программы моделирования приведена ниже:

begin

<описание глобальных переменных, массивов, процедур>;

<задание значений глобальных переменных>;

simulation

begin

<описание переменных, массивов, общих для всех процедур>;

<декларации классов, определяющие процессы, используемые в модели>;

<процедуры, доступные всем объектам модели>;

<операторы, задающие начальные значения общим переменным и массивам>;

<операторы генерации процессов и объектов, отображающих исходное состояние моделируемой системы>;

<начальная активизация процессов и задание условий окончания моделирования>;

<вывод результатов работы модели>;

end блока simulation;

<продолжение программы>;

end программы

Описание блока simulation beginend определяют декларации классов для процессов, которые будут функционировать в модели, задают переменные, массивы, процедуры, являющиеся общими для всех процессов. Операторы тела блока с префиксом simulation обычно используются для инициализации работы модели и выдачи результатов моделирования.

Работа блока с префиксом simulation начинается с операторов, заданных в теле класса simulation, которые выполняют стандартные действия, необходимые при инициализации работы любой модели. В частности, модельное время обнуляется.

Для разработчика модели инициализация состоит в задании начальных значений общим переменным и массивам, генерации процессов и объектов, образующих исходное состояние моделируемой системы, запуск этих процессов в работу и указании условий окончания работы модели.

Программное моделирование работы карьера

В карьере работает один экскаватор, который нагружает машины различной грузоподъемности. Машины подъезжают в карьер через случайные промежутки времени, равномерно распределенные в интервале от 7 до 12 минут. Время, затрачиваемое машиной на подъезд к экскаватору и отъезд от экскаватора, и грузоподъемность машин также случайные величины, распределенные равномерно в интервалах [20,30] и [3,5], соответственно. Экскаватор тратит на погрузку одной тонны породы 2 минуты. Время прибытия машин в карьер носит случайный характер и распределено равномерно в пределах [10,20].

Необходимо промоделировать данную систему с целью получения загрузки самосвала, объема груза за смену и среднее время пребывание самосвалов в карьере в течение 8 ч.

Описание классов

Объект «машина»

Правила поведения объекта «машина»:

  1. Машина подъезжает к экскаватору и встает в очередь на погрузку.

  2. Экскаватор загружает машину по очереди.

  3. Загруженная машина уезжает от экскаватора и покидает систему.

Описание класса «машина»

Process CLASS Car (TimeCarIn,GrCar,TimeCarout);

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

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

comment TimeCarIn,GrCar,TimeCarout - формальные параметры;

comment TimeCarIn - время подъезда к экскаватору;

comment GrCar - грузоподъемность;

comment TimeCarOut - время отъезда от экскаватора;

Real TimeCarIn,TimeCarOut;

Integer GrCar;

Begin

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

comment TimeCarSys - время входа машины в систему;

real TimeCarSys;

comment Запоминание времени входа в систему;

TimeCarSys:=TIME;

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

HOLD(TimeCarIn);

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

INTO(HeadCar);

ACTIVATE Eks;

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

PASSIVATE;

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

HOLD(TimeCarOut);

GrAll:=GrAll+GrCar;

TimeCarAll:=TimeCarAll+(TIME-TimeCarSys);

end;

Объект «экскаватор»

Правила поведения объекта «экскаватор»:

  1. Если в очереди есть машины, экскаватор выбирает первую машину из очереди.

  2. Экскаватор загружает машину.

  3. Загруженная машина уезжает от экскаватора и покидает систему.

  4. Если в очереди нет машин, экскаватор переходит в режим простоя до тех пор, пока не приедет машина.

Описание класса «экскаватор»

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;

Объект «генератор машин»

Правила поведения объекта «генератор машин»:

  1. До времени окончания моделирования создавать объекты «машина» с соответствующими параметрами через случайные промежутки времени.

Описание класса «генератор машин»

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]