
- •Введение
- •1. Концептуальные модели
- •2. Языки моделирования
- •3. Способы дискретного моделирования
- •4. Событийное моделирование
- •4.1. Общие положения
- •4.2. Алгоритм дискретно-событийной имитации
- •4.3. Пример событийной модели
- •5. Сканирование активностей
- •6. Процессно-ориентированный подход
- •7. Непрерывное имитационное моделирование
- •7.1. Общие положения
- •7.2. Алгоритм интегрирования рунге-кутта-фелберга
- •7.3. Пример непрерывно-дискретной модели
- •8.1. Стохастические системы и процессы
- •8.2. Вероятность
- •8.3. Законы распределения
- •8.4. Генерация псевдослучайных чисел
- •8.5. Основные понятия математической статистики
- •9. Системы имитационного моделирования
- •9.1. Gpss
- •9.2. Слам II
- •9.3. Matlab
- •9.4. BpSimulator
- •9.5. Uml
- •9.6. Rational Rose
- •9.7. AnyLogic
- •10. Технология имитационного моделирования
7.2. Алгоритм интегрирования рунге-кутта-фелберга
Это самозапускающийся метод с переменным размером шага, позволяющий интегрировать системы обыкновенных дифференциальных уравнений первого порядка, представленных в виде
(
)=
(
(
),
)
и при начальных условиях
(
),
где
(
)=
,
(
)
- в общем случае вектор. Причем
(
)=SS(I),
(
)=DD(I),
(
)=SSL(I).
Алгоритм представляет собой одношаговую
процедуру, включающую вычисление шести
функций в течение шага
=DTFUL.
Пусть
=
+
,
где
=TTLAS.
Для вычисления
надо
решить следующие уравнения:
=
(
(
),
),
где
(
)=
(
)
(начальный уровень);
=
(
(
)+
,
+
);
=
(
(
)+
+
,
+
);
=
(
(
)+
-
+
,
+
);
=
(
(
)+
-
+
-
,
+
);
=
(
(
)-
+
-
+
-
,
+
);
EERR=-
-
+
+
;
(
)=
(
)+
+
+
-
;
TERR=AAERR+RRERR*(
),
где AAERR,RRERR- заданные пользователем значения
абсолютной и относительной ошибок. ЕслиEERRTERR, значение(
)
считается допустимым. ЕслиQ=EERR/TERR1,
значение
уменьшают; еслиQ1, значение
увеличивают; всегдаDTMIN
=
/Q1/5=DTACCDTMAX.
7.3. Пример непрерывно-дискретной модели
Рассмотрим упрощенный процесс приема данных, поступающих в базу данных равномерно с шагом DTNOW. В базе данных сначала заполняются единичные ячейки с общим объемом К3=150, затем ячейки половинного размера. Вся база данных имеет объемZP=200 единиц. После ее заполнения начинается обработка всего массива поступившей информации. Необходимо определить время заполнения единичных ячеек и общее время приема данных.
Выбор концептуальной модели. В самой постановке задачи нет явных сведений о наличии функциональной зависимости между какими-либо параметрами и временем. Поэтому возможны различные подходы к моделированию информационных процессов.
Если представить разрабатываемую модель как дискретную с основными событиями трех классов (приход порции данных, заполнение крупных ячеек, заполнение мелких ячеек), то неудобным обстоятельством оказывается большое количество реализаций событий (150 событий заполнения единичных ячеек, 100 событий заполнения ячеек половинного размера).
Если составить несложные уравнения процесса заполнения ячеек и выделить два класса структурных событий (окончание заполнения крупных ячеек и окончание заполнения всей базы данных), то общее количество реализаций событий окажется равным только двум.
Процедура проверкиусловий возникновения событийSEVNTдолжна вырабатывать два значенияI:
SUBROUTINE SEVNT
COMMON …
IF(ZP.EQ.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проверяет окончание приема всех данных, а второй - заполнение крупных ячеек (К - текущее число принятых элементарных пакетов). Таким образом, формально налицо два класса структурных событий: первый класс определяется условиемIF(K.EQ.K3), второй -IF(ZP.EQ.200).
Подпрограмму уравнений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=0). Затем идет переход по метке 2 и рассчитывается общий объем заполненияZP(EZP1 - размер крупной, аEZP2 - размер мелкой ячеек; К2 - число заполненных ячеек половинного размера с начальным значением К2=0). Далее рассчитывается общее число К заполненных ячеек для последующих проверок состояния базы данных. Когда текущее К=К3, следует переход по метке 1, число К1 больше не меняется, растет количество заполненных ячеек половинного объема, что учитывается в следующем операторе дляZP.
Если второе структурное событие в рассматриваемом примере традиционно по своему назначению (окончание имитации), то первое существенно меняет ход самой имитации, поскольку приводит к вариации K2 вместоK1. Кроме того, так как необходимые условия для возникновения этих событий (см. процедуруSEVNT) выполняются с предельной для ЭВМ точностью, соответствующие временаTSOBдолжны быть приняты равными моментамTNOW, при которых выполняются указанные условия. Таким образом, уточнениеTSOBне имеет смысла, и сканирование активностей в данном случае использовано в узком плане.
Процедура поискапрограммы реализации событийEVENTимеет обычный вид:
SUBROUTINE EVENT(J)
GOTO(1,2),J
CALL SOB1
RETURN
CALL SOB2
RETURN
END
Коды событий (J), передаваемые в подпрограмму, используются оператором переходаGOTO(1,2),Jдля вызова соответствующей процедуры обработки -SOB1,SOB2.
Процедура обработки событий первого классазапоминает время, соответствующее заполнению единичных ячеек:
SUBROUTINE SOB1
COMMON…
TSOB1=TNOW
RETURN
END
Поскольку вызов SOB1 происходит из процедурыEVENTсразу после проверки условий в модулеSEVNTдля событияSOB1 в моментTNOW, это время оказывается равнымTSOB1, что и фиксируется операторомTSOB1=TNOW. Значение переменнойTNOWпередается в процедуруSOB1 через общую областьCOMMON.
Процедура обработки событий второгокласса имеет аналогичный вид:
SUBROUTINE SOB2
COMMON…
TSOB2=TNOW
RETURN
END
Здесь, как и в предыдущем случае, вызов SOB2 производится изEVENTпри выполнении условий возникновения событияSOB2 в момент времениTNOW. Сказанное формально подтверждается операторомTSOB2=TNOW.
Модуль управления имитациейможет содержать операторы задания времени или вызов соответствующей процедурыPTNOWизменения системного времени:
SUBROUTINE SLAM
COMMON…
CALL INTLC
CALL PTNOW
IF(TNOW.GE.TSOB2) GOTO 1
CALL STATE
CALL SEVNT
GOTO 4
CALL OTPUTN
IF(NRNS.GE.NNRNS) GOTO 2
GOTO 3
CALL OTPUT
RETURN
END
После INTLCвызывается программаPTNOWдля изменения модельного времени. Первый операторIFделает проверку на окончание прогона. Если прогон продолжается, в очередной раз вызывается процедураSTATE, вычисляются переменные модели (время, определяющее параметры К1 и К2 вSTATE, используется неявно через последовательные вызовыPTNOWиSTATE, что каждый раз приводит к увеличению К1 или К2 на единицу в соответствии с очередным приращениемTNOW). Если прогон должен быть завершен, переход по метке 1 приводит к оформлению прогонного отчета. Дальнейшая проверка вторым операторомIFпоказывает направление работы (к следующему прогону по метке 3 или к окончанию имитации - метка 2). Очевидно, что к этому моменту значенияNRNSиNNRNSдолжны быть известны.NNRNS(всепрогонный параметр) и начальное значениеNRNS(прогонные параметры) задаются в главном модуле.
Процедура изменения времениможет быть достаточно простой:
SUBROUTINE PTNOW
COMMON…
TNOW=TNOW+DTNOW
RETURN
END
Алгоритм изменения системного времени не предусматривает реверса и коррекции, как было пояснено выше. Шаг DTFULотсутствует, так как нет численного интегрирования. ИнтервалDTNOWпостоянен, поскольку отсутствуют другие компоненты времени, требующие учета –TTSAVиTNEXT.
Процедура INTLCсодержит операторы инициализации прогонных переменных (в том числе момента начала прогона):
SUBROUTINE
COMMON…
NRNS=NRNS+1
ZP=0.
TNOW=TTBEG
K1=0
K2=0
RETURN
END
Главный модульзадает значения всепрогонных, а также начальное значение прогонного параметраNRNSдля первого прогона:
COMMON…
NNRNS=1 (один прогон, для учебных целей)
NRNS=0
TTBEG=0
TTFIN=900
DTNOW=2.
EZP1=1.
EZP2=.5
K3=150
CALL SLAM
STOP
END
Процедуры выводаOTPUTNиOTPUTдля непрерывного моделирования не отличаются по функциям от аналогичных подпрограмм дискретных моделей.
Резюмируя вышеизложенное, можно сказать, что в зависимости от цели имитационного исследования модель может иметь разный вид и концепцию. В этом заключается один из основополагающих принципов моделирования - принцип множественности моделей. При анализе процессов в сложной системы отдельные ее части допустимо заменять определенными параметрами (набором параметров), упрощающими общую схему модели. Такой подход определяет принцип параметризации моделей. Далее, отсутствие сведений о характеристиках системы, ее частей и процессов, протекающих в ней, делает бессмысленным само моделирование. Последнее приводит кпринципу информационной достаточности.И, наконец, создаваемая модель должна обеспечить достижение цели за конечное время в условиях ограниченности ресурсов. Данный тезис говорит опринципе осуществимости моделей.
8. СТАТИСТИЧЕСКИЕ АСПЕКТЫ ИМИТАЦИОННОГО МОДЕЛИРОВАНИЯ