математическое моделирование. Т 1 МАТ. Моделирование. Литература по теме 197 Вопрос Узловые операторы. 201 Вопрос Текст программной модели смо. 202 Вопрос Сборка и запуск исполнительного модуля модели. 205
Скачать 1.51 Mb.
|
Рис. 39. Узлы на детализирующей плоскости В этой плоскости стрелка, направленная из левого верхнего угла экрана в узел Очередь 104, обозначает, что этот узел является входом на плоскость, а стрелка из узла Сервер 105 в правый верхний угол - выходом с плоскости. При генерации программного файла получим следующую цепочку: Клапан 101 — Очередь 104 — Сервер 105 — Очередь 103, т. е. узел Действие 102 является лишь средством реализации (виртуальным узлом) и будет обработан генератором как узел Pilgrim. Вопрос 3. Использование узлов pay, rent, down. Иногда при построении модели может возникнуть необходимость выделения некоторых типовых действий по обработке данных. Это могут быть запросы на выполнение бухгалтерской проводки, требования выделения моделируемого ресурса или какие-либо другие действия. При возникновении такой задачи удобно обозначить подпрограммы, обращение к которым было бы возможно из любого места модели. Для этого используются узлы типа pay, rent, down. Такие узлы, так же как и parent, содержат переход на более низкий уровень модели, однако имеют несколько иной механизм действия и область применения. Если с помощью узла типа parent можно создавать иерархические модели, имеющие на любой сколько угодно глубоко вложенной плоскости новые узлы parent, то с помощью узлов типа pay, rent, down возможно лишь реализовать подпрограммы на двух слоях модели и невозможно построить общую иерархию уровней. Входом плоскости 2 является узел с названием «Р/счет», а выходом - узел с именем «Бухгалтерия». При генерации программного Рассмотрим принцип работы таких узлов на примере узла pay. На плоскости 1 находится узел типа pay, содержащий обращение к подпрограмме, расположенной в плоскости 2 (рис. 40): Рис. 40. Узел pay (плоскость 1, слева) и подпрограмма узла (плоскость 2, справа) файла в узле «Бухгалтерия» в качестве параметра, определяющего номер следующего узла, на который переходит транзакт, будет указано не конкретное значение, а специальный параметр транзакта updown. При этом предполагается, что каждый транзакт, попадающий в выходной узел плоскости, содержит в параметре updown номер узла, на который следует выполнить переход. Параметр транзакта updown инициализируется в узле типа pay, т.е. в данном случае в узле с названием «Плата поставщику». Аналогичным образом реализуется переход на подпрограмму с использованием узлов типа rent и down. Они также инициализируют переменную транзакта updown. Таким образом, использовать узлы типа pay, rent и down для реализации иерархических моделей нельзя: на уровне подпрограммы для узла одного из этих типов нельзя размещать никакой из узлов типа pay, rent, down, поскольку каждый из этих узлов заново выполнит инициализацию параметра updown. Т.е., значение updown, установленное уровнем выше, заменится, организуя циклическую ссылку, что приведет к семантической ошибке. Чтобы защитить пользователя от совершения таких ошибок, конструктор не позволяет создавать в текущей плоскости узлы типа pay, rent, down, если управление передано с более высокого уровня через узел перечисленного типа. Однако узлы обращения к подпрограмме имеют одно важное преимущество перед узлом parent, а именно: транзакт сам «помнит», куда ему необходимо вернуться. Поэтому из нескольких узлов или слоев можно обращаться к общей плоскости, содержащей детальное выполнение типового действия. Предположим, что в последнем примере имеется некоторая организация, имеющая собственный расчетный счет и выполняющая ряд операций по перечислению средств; часть операций необходимо смоделировать. В плоскости 2 создана подпрограмма «Плата поставщику», выполняющая бухгалтерскую проводку по перечислению средств со счета фирмы. Если возникает необходимость смоделировать аналогичную ситуацию с перечислением средств (например, возврат кредита), то можно создать новый узел типа pay и указать ему в качестве подпрограммы плоскость 2. В процессе работы с конструктором, при создании нового узла обращения к подпрограмме, появляется диалоговое окно с просьбой указать номер плоскости, на которой должна размещаться подпрограмма. По умолчанию это номер новой пустой плоскости, однако, пользователь самостоятельно может задать номер уже существующей плоскости. Иногда в модели можно выделить ряд процессов, независимых на уровне транзактов, но пересекающихся на уровне моделируемых ресурсов. Например, это может быть моделирование процесса производства с участием нескольких независимых торговых компаний, приобретающих товар у производителя и имеющих свой финансовый резерв и рынок сбыта. Тогда можно выделить как независимые процессы торговых компаний и процесс функционирования производителя. Для разработчика модели неудобно располагать в одной корневой плоскости несколько параллельных процессов, поэтому конструктор предоставляет возможность содержать несколько корневых плоскостей с целью размещения в них непересекающихся на уровне транзактов процессов. Вопрос 4. Многослойная модель бизнес-процесса. Проиллюстрируем применение описанного механизма на примере модели функционирования производственного предприятия. Пример является также хорошей иллюстрацией другого уже отмеченного ранее достоинства системы Pilgrim - возможности имитации протекания материальных, финансовых и информационных потоков в рамках одной и той же модели. Моделируемый объект (небольшое предприятие) занимается выпуском товара малыми партиями, размер которых известен. Произведенная продукция реализуется на рынке, количество единиц реализуемой на рынке продукции в одной партии является случайной величиной, распределенной по равномерному закону. Структурная схема бизнес-процесса содержит три слоя. На двух из них представлены независимо протекающие процессы производства (рис. 41). Рис. 41. Модельный граф процесса производства и сбыта (рис. 42) Рис. 42. Модельный граф процесса сбыта продукции предприятия. Независимость протекания процессов означает, что транзакты могут перемещаться только внутри каждого из фрагментов графа модели на каждом слое. Взаимодействие процессов осуществляется только через ресурсы: материальные (в виде готовой продукции) и денежные (в основном через расчетный счет предприятия). На третьем слое имитируется выполнение финансовых операций, связанных с работой предприятия (рис. 43): Рис. 43. Слой финансовых операций Если время задержки платежей с расчетного счета моделируемого предприятия (обозначив эту величину через Трс) считать критическим выходным параметром, то модель можно использовать для минимизации этой величины. Основными входными параметрами моделирования будут служить цена единицы продукции, объем выпускаемой партии и сумма кредита, запрашиваемого в банке. Зафиксировав все остальные параметры (время выпуска партии, число производственных линий, интервал поступления заказа от покупателей, разброс размеров продаваемой партии, стоимость комплектующих изделий и материалов для выпуска партии, стартовый капитал на расчетном счете), можно минимизировать Трс для конкретной рыночной ситуации. Минимум Трс достигается при одном из максимумов среднего размера денежной суммы на расчетном счете. Причем вероятность рискового события - неуплаты долгов по кредитам - близка к минимуму (это можно доказать во время статистического эксперимента с моделью). В модели первого слоя (процесс производства) имитируются следующие действия (рис. 41 ). Узел 1 имитирует поступления распоряжений на изготовление партий продукции от руководства компании. Узел 2 инициирует запрос на получение кредита, порождая для этого вспомогательный транзакт (запрос в банк). В узле 3 запрос ожидает наступления условий, при которых кредит может быть выдан (новый предоставляется, если предыдущий кредит возвращен). Узел 4 фиксирует наступление этих условий (переводом своего состояния в открытое) и имитирует разрешение на выдачу кредита. Узел 5 осуществляет перечисление кредита на расчетный счет компании. В узле 6 вспомогательный запрос уничтожается и выдается сигнал блокировки на выдачу следующего кредита (с помощью сигнальной функции hold). Основной транзакт-распоряжение проходит через узел 2 без задержки. В узле 7 производится оплата комплектующих, если на расчетном счете есть достаточная сумма (даже если кредит не получен). В противном случае транзакт будет ожидать поступления на расчетный счет предприятия либо кредитных денег, либо денег за проданную продукцию. В узле 8 транзакт становится в очередь, если все производственные линии заняты. Узел 9 (конвейерная линия) имитирует изготовление партии продукции. В узле 10 порождается дополнительный транзакт, имитирующий заявку на возврат взятого кредита. Эта заявка поступает в узел 11, имитирующий перечисление денег с расчетного счета предприятия в банк (если нужной суммы на счету предприятия нет, заявка ожидает). После возврата кредита заявка уничтожается в узле 12; в банке появилась информация о том, что кредит возвращен, и компании можно выдать следующий кредит (с помощью сигнальной функции |