6 МОДЕЛИРОВАНИЕ СИСТЕМ - Страница 4

7.3. ПРИМЕР НЕПРЕРЫВНО-ДИСКРЕТНОЙ МОДЕЛИ

 

Рассмотрим упрощенный процесс приема данных, поступающих в реляционную базу равномерно с шагом DTNOW. В базе данных сначала заполняются ячейки единичного объема количеством К3=150, затем ячейки половинного объема. Вся база данных имеет объем ZP=200 единиц. После ее заполнения начинается обработка всего массива поступившей информации. Необходимо определить время заполнения единичных ячеек и общее время приема данных.

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

Если представить дискретную модель с событиями трех классов (приход порции данных, заполнение крупных ячеек, заполнение мелких ячеек), то неудобным обстоятельством оказывается большое количество реализаций всех событий (150 событий заполнения крупных ячеек, 100 событий заполнения ячеек половинного размера в оставшемся объеме 50 единиц базы данных и, таким образом, еще 250 событий поступления элементарных пакетов данных).

Если составить несложные уравнения процесса заполнения ячеек, а события сгруппировать в два класса по одному событию в каждом классе (окончание заполнения всех крупных ячеек, окончание заполнения всей базы данных), то общее количество реализаций окажется равным только двум. Алгоритм изменения времени прост: TNOW=TNOW+DTNOW.

Процедура SEVNT:

SUBROUTINE SEVNT

COMMON …

IF(ZP.GE.200) GOTO 2

IF(K.EQ.K3) GOTO 1

RETURN

1  I=1

CALL EVENT(I)

RETURN

2  I=2

CALL EVENT(I)

RETURN

END

Здесь первый оператор IF проверяет окончание приема всех данных, а второй - заполнение крупных ячеек (К - текущее число принятых элементарных пакетов). В зависимости от ситуации код I при вызове подпрограммы EVENT оказывается различным.

Процедура STATE:

SUBROUTINE STATE

COMMON…

IF(K.GE.K3) GOTO 1

K1=K1+1

GOTO 2

1  K1=K3

K2=K2+1

2  ZP=K1*EZP1+K2*EZP2

K=K1+K2

RETURN

END

Вначале, при К< К3, растет количество заполненных единичных ячеек К1 (начальное значение К1 должно быть задано). Затем идет переход по метке 2 и рассчитывается общий объем заполнения  ZP (EZP1 - размер крупной, а EZP2 - размер мелкой ячеек; К2 - число ячеек половинного размера - начальное значение должно быть определено заранее). Далее рассчитывается общее число заполненных ячеек для последующих проверок состояния базы данных.

Если  текущее К ³ К3, следует переход по метке 1, число К1 больше не меняется, растет количество заполненных ячеек половинного объема, что учитывается в следующем операторе для  ZP.

Процедура EVENT:

SUBROUTINE EVENT(J)

GOTO(1,2),J

1       CALL SOB1

RETURN

2       CALL SOB2

RETURN

END

Коды событий, передаваемые в подпрограмму (J), используются оператором перехода  GOTO(1,2),J для вызова соответствующей процедуры обработки - SOB1, SOB2.

Процедура обработки событий первого класса:

SUBROUTINE SOB1

COMMON…

TSOB1=TNOW

RETURN

END

Значение переменной TNOW берется из общей области COMMON и заносится в память для TSOB1 (время заполнения больших ячеек).

Процедура обработки событий второго класса:

SUBROUTINE SOB2

COMMON…

TSOB2=TNOW

RETURN

END

Операция запоминания текущего времени TNOW в виде момента окончания приема данных аналогична предыдущей.

Процессор управления имитацией:

SUBROUTINE SLAM

COMMON…

3       CALL INTLC

4       CALL PTNOW

IF(TNOW.GE.TSOB2) GOTO 1

CALL STATE

CALL SEVNT

GOTO 4

1       CALL OTPUTN

IF(NRNS.GE.NNRNS) GOTO 2

GOTO 3

2       CALL OTPUT

RETURN

END

После INTLC вызывается программа PTNOW для изменения системного времени. Первый оператор IF делает проверку на окончание прогона. Если прогон продолжается, в очередной раз вызывается процедура STATE, вычисляются переменные модели (время, определяющее параметры  К1 и К2 в STATE, используется неявно через вызов, увеличивающий на единицу указанные переменные  после очередного приращения TNOW в PTNOW; формально время в подпрограмме STATE легко трансформировать в числа К1, К2 через отношение TNOW/DTNOW). Если прогон должен быть завершен, переход по метке 1 приводит к офомлению прогонного отчета. Дальнейшая проверка вторым оператором IF показывает направление работы (к следующему прогону по метке 3 или к окончанию имитации - метка 2). Переменная NRNS в указанном операторе  должна увеличиваться при каждом обращении к процедуре INTLC.

Процедура изменения времени:

SUBROUTINE PTNOW

COMMON…

TNOW=TNOW+DTNOW

RETURN

END

Алгоритм изменения системного времени прост и не предусматривает коррекции и реверса. Это связано с тем, что два структурных события в модели возникают при достижении параметров К и ZP заданных пороговых уровней, не требующих уточнения времен TSOB1, TSOB2 (последние автоматически становятся известными при достижении К, ZP нужных величин). Шаг DTFUL и другие переменные отсутствуют, так как нет интегрирования.

Процедура INTLC:

SUBROUTINE INTLC

COMMON…

NRNS=NRNS+1

ZP=0.

TNOW=TTBEG

K1=0

K2=0

RETURN

END

После увеличения номера прогона проводится обнуление переменных ZP, K1, K2 и задается начальное модельное время TNOW.

Главный модуль:

COMMON…

NRNS=0

TTBEG=0

TTFIN=900

DTNOW=2.

EZP1=1.

EZP2=.5

K3=150

CALL SLAM

CALL OTPUT

STOP

END

Процедуры вывода OTPUTN и OTPUT для непрерывного моделирования не отличаются по функциям от аналогичных подпрограмм дискретных моделей.

Резюмируя вышеизложенное, можно сказать, что в зависимости от цели имитационного исследования модель может иметь разный вид и концепцию. В этом заключается один из основополагающих принципов моделирования - принцип множественности моделей. Для сложных систем отдельные ее части допустимо заменять определенными параметрами (набором параметров), упрощающими общую схему модели. Такой подход определяет принцип параметризации моделей. Далее, отсутствие сведений о характеристиках системы или ее частей делает бессмысленным само моделирование. Последнее приводит к принципу информационной достаточности. И, наконец, создаваемая модель должна обеспечить достижение цели за конечное время в условиях ограниченности ресурсов. Данный тезис говорит о принципе осуществимости моделей.



 
данных Модуль Сервер. многомерного хранения данных. предоставляет группам разработчиков