6 МОДЕЛИРОВАНИЕ СИСТЕМ

ВВЕДЕНИЕ

 

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

Видов моделей много. С точки зрения конкретного воплощения модели подразделяются на физические и математические. Среди последних особо выделяются аналитические и имитационные модели. Аналитические модели основаны на математических зависимостях между интересующими нас явлениями и компонентами. Эти модели обладают высокой точностью и предсказательностью, но ограничены чисто математическими, порой непреодолимыми трудностями. Разновидностями таких моделей являются таблицы и графики, отображающие поведение систем и их элементов. Аналитические модели, таблицы и графики во многих случаях ускоряют процесс создания других видов моделей и обычно предваряют его. Аналитическое моделирование представляет собой традиционные части таких областей знаний, как математика, теория информационных процессов, системы массового обслуживания, математическая статистика и т. д. Учитывая сказанное, в курсе моделирования систем аналитические модели специально не рассматриваются.

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

 

1. КОНЦЕПТУАЛЬНЫЕ  МОДЕЛИ

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

Возможны два различных концептуальных подхода к разработке имитационной модели: дискретное и непрерывное моделирование. Указанные подходы различаются способами задания времени в вычислительной среде ЭВМ.

При дискретном моделировании состояние моделируемого объекта (системы) может меняться только в определенные моменты времени TSOB (идентификаторы условны) при свершении некоторых событий SOB. Последние формируются двумя способами: безусловно (основные или временные события) или при выполнении определенных условий (вспомогательные или структурные события).

Основные события планируются во времени и реализуются по определенному алгоритму в начале имитации или в процессе работы модели.

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

Таким образом, в дискретной модели системное время TNOW всегда вторично и задается равным моменту TSOB свершения очередного (ближайшего) события SOB только после принятия решения о его программной реализации.

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

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

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

Понятие концептуальности  может быть основано на других, отличных от изложенных, принципах классификации. Так, основываясь на математических принципах [11], под дискретно-детерминированной (F-модель) и дискретно-стохастической (P-модель)  моделями принято понимать модели, основанные на теории конечных автоматов, где ход времени никак не меняет концептуальность модели (синхронные или асинхронные автоматы). Среди систем с параллельными процессами в отдельную концептуальнкю группу выделяют сети Петри (N-модели). Различают непрерывно-детерминированные (D-схемы) и непрерывно-стохастические (Q-схемы) системы. Комбинированные системы (А-схемы), включающие непрерывные, дискретные, детерминированные и стохастические компоненты, имеют свои особые структуру и взаимосвязи между элементами.

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

 

2. ЯЗЫКИ МОДЕЛИРОВАНИЯ

 

Языки моделирования относятся к средствам моделирования и представлены двумя группами: универсальные (общие) языки программирования и специальные системы (языки) моделирования.

При использовании любого универсального языка программирования разработчик модели сам должен заботиться о структуре программы, способах задания входных и мешающих воздействий, порядке и объеме сбора информации в процессе имитации, о продвижении модельного времени, синхронизации событий, обработке и форме представления выходных данных модели. Качеству и продуктивности моделирования при этом способствуют изучение примеров моделирования в специальных (имитационных) системах моделирования и практическое решение задач. С помощью универсального языка разработчик может создать модель по своему замыслу и в соответствии со спецификой задачи. Однако с точки зрения стандартизации программного обеспечения более прогрессивными следует признать системы имитации.

Специальные языки (системы) имитационного моделирования повышают производительность труда разработчика за счет готовых программных средств по имитации входных потоков, сбора и обработки информации в процессе имитации, выдачи результатов в виде графиков, документов, таблиц, продвижения модельного времени, синхронизации событий и т.д. Разработчик только дополняет системы имитации своими нестандартными подпрограммами, данными и особыми требованиями. Знакомство с языками имитационного моделирования важно не только с точки зрения их прямого использования, но и для уяснения общих подходов к моделированию сложных систем, досконально проработанных в таких системах.

 

3. СПОСОБЫ ДИСКРЕТНОГО МОДЕЛИРОВАНИЯ

 

Различают три подхода к дискретному моделированию: событийный, сканирование активностей и процессно-ориентированый.

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

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

Процессно-ориентированный подход рассматривает процесс перемещения некоторых активных компонентов (транзактов) через исследуемую систему, с которыми вступают во взаимодействие другие элементы. Над транзактами совершаются любые действия и с ними происходят любые события.

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

 

4. СОБЫТИЙНОЕ МОДЕЛИРОВАНИЕ

4.1. ОБЩИЕ ПОЛОЖЕНИЯ

Для построения дискретно-событийной модели необходимо определить все события, при которых может измениться состояние системы, и сгруппировать их в классы по способу (алгоритму) реализации. Каждое событие должно характеризоваться, кроме класса, набором параметров (атрибутов), используемых при реализации события, и временем свершения TSOB.

Планирование и реализация событий, разделенных временными интервалами, требуют хранения запланированных событий. Это делается с помощью специализированного файла-календаря или списка. Поскольку календарь используется не только для хранения событий, но и для анализа состояния имитационного процесса, события в нем расположены в порядке возрастания времени свершения. По ходу имитации из календаря события выбираются и реализуются (обрабатываются) по очереди. Имитационное время TNOW обновляется только после извлечения очередного события из календаря, когда становится известным его время свершения: TNOW=TSOB. В ходе имитации календарь поддерживается в должном состоянии подпрограммой GRUP, вызываемой после любого обращения к календарю, сопровождающегося нарушением порядка расположения его записей.

Вслед за обработкой любого события производится проверка условий завершения прогона: а) кончилось ли время TTFIN, отведенное на прогон; б) есть ли еще события в календаре; в) прочие условия.

Если очередной NNRS-ный прогон заканчивается, вызывается подпрограмма оформления отчета по прогону (OTPUTN) и осуществляется переход к следующему имитационному прогону.

После завершения всех NNRNS прогонов вызывается процедура обработки результатов всех прогонов и оформления итогового отчета OTPUT.

Сбор данных ведется в любом месте программы моделирования и при любом  TNOW в соответствии с разработанным алгоритмом.

Переменные и параметры, используемые в модели, можно разделить на четыре группы:  системные (например, TNOW), не зависящие от объекта моделирования и применяемые многократно в различных задачах; пользовательские, определяемые типом объекта и вводимые разработчиком для каждой задачи заново; всепрогонные (например, NNRNS), используемые во всех имитационных прогонах; прогонные (например, TTFIN), используемые внутри одного прогона. Всепрогонные параметры задаются перед началом общей имитации, прогонные - в начале каждого прогона процедурой INTLC.

 

4.2. АЛГОРИТМ ДИСКРЕТНО-СОБЫТИЙНОЙ ИМИТАЦИИ

После запуска модели вначале производится инициализация всепрогонных переменных (в главном модуле) и, далее, прогонных для первого прогона (в процедуре INTLC).

Поскольку алгоритм имитации ориентирован на обработку событий, необходимо перед первым обращением к календарю запланировать хотя бы одно событие. Это делается после инициализации прогонных переменных в процедуре INTLC, куда помещается оператор вызова процедуры планирования SCHDL.

Модуль SCHDL передает в календарь все сведения о событии: его атрибуты, код класса KEVNT и интервал свершения DTIME, отсчитываемый от текущего времени TNOW.

Собственно имитация работы моделируемого объекта (системы) начинается с выбора из календаря первого события с минимальным временем свершения TSOB. Информация об извлеченном событии используется для проведения ряда операций. Так, интервал свершения  DTIME дает возможность обновить системное время: TNOW=TNOW+DTIME. Код класса KEVNT необходим для поиска соответствующего алгоритма обработки (реализации) события. Атрибуты события используются для определения направления действий при реализации события.

Поиск программы обработки события осуществляет специализированная процедура EVENT, в которую при ее вызове передается код события. По коду события программа EVENT либо вызывает саму подпрограмму обработки, либо ищет у себя внутри встроенные элементы алгоритма реализации события.

После обработки (реализации) события проверяются условия окончания прогона. Если прогон можно продолжить, идет обращение в календарь для извлечения очередного ближайшего по времени события. Если прогон должен быть завершен, то накопленная в процессе прогона информация обрабатывается и формируется отчет по прогону. Затем проверяются условия окончания всех прогонов. Если прогоны продолжаются, управление передается процедуре INTLC для выполнения очередного прогона. При завершении всех прогонов составляется итоговый отчет по всей имитации.

Нетрудно заметить, что все основные шаги по дискретно-событийной имитации будут повторяться для любых моделируемых объектов. Поэтому управление ходом имитации независимо от задачи поручают отдельной процедуре системного типа - процессору имитации СЛАМ, вызываемому в начале работы программы (рис.4.1).

Как показывает анализ, всегда в модели часть процедур может быть использована в различных задачах, а часть  прорабатывается с учетом конкретной ситуации. Первая группа модулей является системной, вторая - пользовательской. Формирование и системной, и пользовательской частей зависит от средств разработки моделей. В специальных языках и пакетах моделирования системные модули вызываются из системной библиотеки, а пользовательская часть модели либо пишется в виде подпрограмм отдельно, либо представляет собой компоненты общего кода, заносимые в модель различным образом.

 

4.3. ПРИМЕР СОБЫТИЙНОЙ МОДЕЛИ

 

В качестве примера событийной модели рассмотрим часть информационной системы, куда поступают, обрабатываются и транслируются дальше заявки в моменты времени, распределенные случайно экспоненциально с математическим ожиданием =20.0 единиц. Время обработки заявок распределено случайно равномерно от 10 до 25 единиц. Имитируется работа сети в течение 480 единиц времени.

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

 

Рис.4.1. Блок-схема алгоритма управления событийной  моделью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Группировка событий. Из всех типов событий (поступление заявок, постановка их в очередь, обработка заявок, пересылка) ограничимся двумя классами: поступление (приход) и обработка (обслуживание), так как именно они регламентированы временными данными. Начало обработки и постановку в очередь следующего события (если еще не закончена обработка предыдущей заявки) совместим  с моментом поступления заявки, а пересылку - с окончанием обработки. Никаких особых операций по постановке в очередь и пересылке заявок  не предусматривается.

Атрибуты событий. Исходные данные никак не характеризуют поступающие заявки, кроме момента появления. Таким образом, число MATR атрибутов событий "приход заявки" равно единице, а сам атрибут совпадает с временем свершения (поступления) этих событий. Что касается обработки, то класс "обслуживание", не обнаруживающий никаких дополнительных характеристик событий, может иметь тот же атрибут.

Процедура планирования. Подпрограмма планирования SCHDL является системной и должна иметь три формальных параметра - код планируемого события KEVNT, интервал свершения DTIME и массив  A1, который принимает все атрибуты планируемого события. Организуем SCHDL следующим образом (ФОРТРАН):

SUBROUTINE SCHDL(KEVNT, DTIME, A1)

DIMENSION A1(MATR), A2(MATR+2), A3(MATR+2, NNQ1)

COMMON /COM/…

DO 1 N=1, MATR

1       A2(N)=A1(N)

A2(MATR+1)=KEVNT

A2(MATR+2)=TNOW+DTIME

READ(1'1) A3

DO 2 J=1, NNQ1

2       IF(A3(MATR+1, J).EQ.0) GOTO 3

3       WRITE(1'J) A2

CALL GRUP

RETURN

END

Здесь A2 - массив предварительной компоновки записи для ее дальнейшей пересылки в календарь событий (размерности всех массивов должны быть заданы); A3 - массив для копирования всего календаря в электронную память из внешнего носителя (файла); NNQ1 - число записей календаря. Поскольку планируемое событие содержит кроме атрибутов события также код класса и время (итервал) свершения, размерность массива A2 выше того же параметра для массива A1. Процедура SCHDL получает информацию из оператора ее вызова и из области COMMON (многоточие означает другие идентификаторы, используемые в программе для связи с процедурами).

С оператора DO 1 (цикл) начинается формирование записи календаря (пока массив A2), в которую поступают данные из A1. После этого в A2 копируются код и время свершения (можно ограничиться интервалом DTIME) события. Оператор READ переписывает в массив A3 (электронная память) файл календаря (номер один с прямым доступом, чтение - с первой записи) с внешнего носителя для работы с календарем. Оператор DO 2 проводит поиск первой свободной записи в календаре по коду события (запись свободна, если код отсутствует, что требует предварительного обнуления календаря в начале имитации), после чего оператор WRITE выводит в файл календаря (номер один с прямым доступом, вывод – начиная с  записи с номером J) данные из массива A2.

Оператор вызова процедуры планирования:

CALL SCHDL (KEVNTZ, DTIMEZ, ATRIB)

Здесь KEVNTZ - выражение, определяющее KEVNT, DTIMEZ - выражение для расчета DTIME, ATRIB - системный специализированный массив: при планировании события он передает информацию в календарь, при извлечении записи из календаря принимает необходимые данные.

Сортировка записей в календаре. Процедура поддержания порядка записей в календаре может иметь следующий вид:

SUBROUTINE GRUP

DIMENSION A2(MATR+2), A3(MATR+2, NNQ1)

COMMEN /COM1/ MATR, …

READ(1’1) A3

IF(A3(MATR+1, 1).EQ.0) GOTO 1

DO 2 J=1, NNQ1 –1

IF(A3(MATR+1, J).EQ.0) GOTO 3

K=J

Z=A3(MATR+2, J)

DO 4 L=J+1, NNQ1

IF(A3(MATR+1, L).EQ.0) GOTO 8

IF(A3(MATR+2, L).GE.Z) GOTO 4

Z=A3(MATR+2, L)

K=L

4   CONTINUE

8        DO 2  I=1, MATR+2

A2(I)=A3(I, J)

A3(I, J)=A3(I, K)

2        A3(I, K)=A2(I)

3        WRITE(1’1) A3

RETURN

1        DO 6  J=1, NNQ1 –1

DO 6  I=1, MATR+2

A3(I, J)=A3(I, J+1)

6        A3(I, J+1)=0

GOTO 3

RETURN

END

Как видно из приведенного фрагмента, после копирования в A3 календаря осуществляется проверка состояния первой записи. Если она пустая, ясно, что из календаря ранее выбрано событие с минимальным временем свершения и, следовательно, достаточно сдвинуть календарь на одну запись влево. Это делает блок с меткой 1, обнуляющий последним оператором с меткой 6 запись A3(I, J+1), используемую потом для планирования очередного события (хотя, возможно, эта запись уже была когда-то обнулена). Далее действие передается по метке 3, где производится вывод сформированного календаря из массива A3 в файл 1.

Если первая запись календаря не пуста, значит процедура вызвана после планирования какого-то события и необходимо расставить записи по возрастанию их времени свершения (запланированное событие могло иметь любое время свершения). Для этого с оператора DO 2 J=1, NNQ1 –1 начинается сравнение времени свершения J-й записи с аналогичным параметром остальных записей и перемещение этой записи на нужное место календаря (массива A3). Перед каждой такой последовательностью действий оператором IF(A3(MATR+1, J).EQ.0) GOTO 3  J-я запись проверяется по коду события. Если он равен нулю, календарь кончился и управление передается метке 3 для вывода готового календаря в файл.