Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ИМЭП 2007.doc
Скачиваний:
18
Добавлен:
18.12.2018
Размер:
729.6 Кб
Скачать

Методические указания по разработке модели

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

Описание узла-счета send имеет следующий вид:

send(p1, p2, p3, p4, p5),

где p1 – символическое имя узла-счета, строка длиной до 14 символов включая пробелы (char);

p2 – узел-счет, на который необходимо перевести сумму, т.е. узел-приемник (int);

p3 – размер заданной суммы (double). Единицы измерения финансовых средств – любые (рубли, доллары, евро и т.д.). После точки обязательно следует указывать одно чило или два – доли используемых единиц измерений. Например:. 100000. 00 ( сто тысяч руб. 00 коп.).

p4 – признак работы с приоритетами: none или prty. Если указано prty, то транзакты располагаются в случае отсутствия на счете необходимой суммы в соответствии с приоритетами. Ближе к голове очереди находится самая приоритетная группа транзактов. Внутри приоритетной группы транзакты расположены следующим образом: чем меньше требуемая сумма, тем ближе транзакт находится к голове своей приоритетной группы. Если же суммы одинаковы, то транзакты расположены в хронологическом порядке – чем раньше транзакт пришел в очередь, тем раньше он обслужен (правило fifo). Если указано значение none, то работает только правило fifo.

p5 – номер узла типа direct, который осуществляет финансовый менеджмент и выполняет проводки по мере необходимости.

В каждом узле send имеется два внутренних атрибута: saldo и defic. Атрибут saldo отражает остаток средств на счете send. При отсутствии средств на счете бухгалтерского учета в узле send скапливаются транзакты. Суммарный дефицит затребованных этими транзактами сумм автоматически отражается в атрибуте defic.

Для управления узлом send используется функция assign. С ее помощью можно изменять остаток средств на соответствующем узлу бухгалтерском счете. Команда assign(n,ko,s) помещает денежную сумму s (double) на счет n. Если значение кода операции ko равно add, сальдо счета увеличивается на сумму s (режим добавления), если ko=none, сальдо счета становится равным s (режим замещения).

Следующим за узлом send обязательно должен стоять узел direct, играющий роль “финансового директора”. Узел direct является своеобразным клапаном, через который могут пройти только те транзакты, проводки по которым можно выполнить. В принципе один узел direct может обслуживать все узлы send, имеющиеся в модели. Однако можно имитировать одновременную работу нескольких бухгалтеров, каждый из которых отвечает за свою группу бухгалтерских операций, например, «касса», «банк», «материальный учет», «заработная плата» и т.д.

Описание узла direct имеет следующий вид:

direct (p1, p2)

где p1 – символическое имя узла (char);

p2 – номер следующего узла за узлом direct (int).

Краткая характеристика узлов Pilgrim для моделирования материальных потоков. Каждый склад ресурсов описывается в имитационной модели в виде узла типа attach. При посещении транзактом узла attach ему выдается некоторое количество единиц хранящегося там ресурса. Если ресурса на складе меньше, чем требуется транзакту, он остается в узле до тех пор, пока объем имеющегося ресурса не станет больше. Таким образом, узел attach является также очередью запросов на получение ресурса. Очередь может быть организована в хронологическом порядке или по приоритетным правилам.

Описание узла имеет следующий вид:

attach(p1, p2, p3, p4),

где p1 – символическое имя узла-ресурса (char);

p2 – требуемое число элементов ресурса (long);

p3 – признак работы с приоритетами: none или prty. Если указано prty, то транзакты-требования ресурса в случае отсутствия необходимого числа единиц ресурса образуют очередь в узле attach, организованную по приоритетному принципу. Ближе к голове очереди находится самая приоритетная группа транзактов. Внутри приоритетной группы транзакты расположены следующим образом: чем меньше элементов необходимо транзакту, тем ближе транзакт находится к голове своей приоритетной группы. Если же запрашиваемое количество ресурса одинаково, то транзакты расположены в хронологическом порядке: чем раньше транзакт пришел в очередь, тем рантше он обслужен (правило fifo). Если указано значение none, то работает только правило fifo.

Полученный на складе ресурс транзакт “носит” по модели и все, что он может с ним сделать - это вернуть обратно на склад. Вернуть ресурс транзакт может из любого узла модели с помощью команды detach. Возвращать ресурс не обязательно. Команда detach(n,r) возвращает на склад с номером n число единиц ресурса, равное r. Для корректной работы модели необходимо, чтобы указанный объем ресурса был ранее взят возвращающим транзактом на указанном в команде складе. (Возвращающим является транзакт, активизирующий команду detach).

Изменить объем имеющегося на складе ресурса можно с помощью команды supply. Команда supply(n,ko,r) помещает r (long) единиц ресурса на склад n. Если значение кода операции ko равно add, запас ресурса на складе увеличивается на величину r (режим добавления), если ko=none, запас ресурса становится равным r (режим замещения).

После узла attach в модели должен обязательно стоять узел manage - “управляющий складом”. Этот узел проверяет наличие требуемого количества ресурса для каждого транзакта, пришедшего в attach. Если ресурса достаточно, транзакт проходит через узел manage дальше. Иначе транзакт остается в узле attach. Таким образом, узел manage - это своеобразный клапан.

Описание узла manage имеет следующий вид:

manage (p1, p2),

где p1 – символическое имя узла менеджера (char);

p2 – номер следующего узла после узла manage (int).

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

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

Существует четыре разновидности декомпозиции процессов:

  • общий случай декомпозиции сложного процесса с помощью узлов типа down;

  • декомпозиция процессов перечисления денег (платежей, бухгалтерских проводок и др.) с помощью узла типа pay;

  • декомпозиция процессов выделения ресурсов с помощью узлов типа rent;

  • абстрактное объединение группы процессов в один псевдопроцесс с помощью виртуального (мнимого, не существующего в реальности) узла типа parent без образования нового узла.

Рассмотрим более второй и третий разновидности декомпозиции процессов (с помощью узлов типа pay и rent).

Имитация перечисления денежной суммы с помощью узла pay выглядит гораздо понятнее, чем сем это делается с помощью запутанных цепочек send->direct. Однако узел pay подлежит детализации на более нижнем слое с помощью все тех же узлов send и direct. Описание узла pay имеет следующий вид:

pay(p1, p2, p3, p4, p5, p6, p7),

где p1 – символическое имя узла типа pay (char);

p2 – номер узла-счета типа send, на который переводится денежная сумма (int);

p3 – значение денежной суммы (double);

p4 – номер узла-счета типа send, с которого переводится денежная сумма (int);

p5 –признак работы с приоритетами (prty или none);

p6 – номер узла-приемника на нижнем слое (int);

p7 – номер узла возврата на данном слое модели, где расположен узел pay (int).

Имитация получения ресурса со склада осуществляется с помощью узла типа rent. Этот узел подлежит декомпозиции на более низком уровне с помощью узлов типа attach и manage.

Описание узла rent имеет следующий вид:

rent(p1, p2, p3, p4, p5, p6, p7),

где p1 – символическое имя узла типа rent (char);

p2 – количество требуемого ресурса (long);

p3 – номер узла-склада ресурсов типа attach, с которого отпускается ресурс (int);

p4 –признак работы с приоритетами (prty или none);

p5 – номер узла-приемника на нижнем слое (int);

p6 – номер узла возврата на данном слое модели, где расположен узел rent (int).

Описание моделируемой предметной области: бизнес-процесс производственного предприятия

Моделируется бизнес-процесс небольшой фирмы, которая производит некоторую продукцию на заказ небольшими партиями. Стартовый капитал фирмы – 10 000 у.е. После получения каждого заказа фирма берет в банке кредит и одновременно начинает производство заказанной партии товара. До тех пор, пока взятый кредит не будет возвращен, новый кредит банком не выдается. Проценты по кредиту фирма не платит. Кредит возвращается после производства партии товара по полученному фирмой заказу.

Оплата заказа производится заказчиком после получения товара.

Для производства продукции по каждому заказу фирма покупает сырье, за которое предварительно вносит плату поставщику.

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

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

Структурная схема бизнес-процесса содержит три слоя: «Производство», «Сбыт» и «Денежные операции». Схемы процессов «Производство» и «Сбыт» независимы друг от друга, т.к. нет путей для передачи транзактов. Опосредованное взаимодействие этих процессов осуществляется только через ресурсы: материальные ресурсы в виде готовой продукции и денежные ресурсы. Управление денежными ресурсами производится на отдельном слое «Lенежные операции».

Первый процесс «Производство» (рис. 9) реализует основные элементарные процессы. Узел 101 имитирует поступления распоряжений на изготовление партий продукции от руководства компании. Узел 102 – попытка получить кредит. В этом узле появляется вспомогательный транзакт – запрос в банк. Узел 103 – ожидание кредита этим запросом. Узел 104 – это администрация банка: если предыдущий кредит возвращен, то предоставляется новый (в противном случае запрос ждет в очереди). Узел 105 осуществляет перечисление кредита на расчетный счет компании. В узле 106 вспомогательный запрос уничтожается, но информация о том, что кредит предоставлен, – это «шлагбаум» на пути следующего запроса на получение другого кредита (операция hold).

Основной транзакт-распоряжение проходит через узел 102 без задержки. В узле 107 производится оплата комплектующих, если на расчетном счете есть достаточная сумма (даже если кредит не получен). В противном случае происходит ожидание либо кредита, либо оплаты продаваемой продукции. В узле 108 транзакт становится в очередь, если все производственные линии заняты. В узле 109 осуществляется изготовление партии продукции. В узле 110 возникает дополнительная заявка на возврат кредита, если ссуда ранее была выделена. Эта заявка поступает в узел 111, где происходит перечисление денег с расчетного счета компании в банк; если денег нет, то заявка ожидает. После возврата кредита эта заявка уничтожается ( в узле 112); в банке появилась информация о том, что кредит возвращен и компании можно выдать следующий кредит (операция rels).

Транзакт-распоряжение проходит узел 110 без задержки, а в узле 113 он уничтожается. Далее считается, что партия изготовлена и поступила на склад готовой продукции.

Второй процесс «Сбыт» (рис. 10) имитирует основные функции по реализации продукции. Узел 114 – это генератор транзактов- покупателей продукции. Эти транзакты обращаются на склад, и если там есть запрашиваемое количество товара, то товар отпускается покупателю; в противном случае покупатель ждет. Узел 116 имитирует отпуск товара и контроль очереди. После получения товара покупатель перечисляет деньги на расчетный счет компании (узел 117). В узле 118 покупатель считается обслуженным; соответствующий ему транзакт больше не нужен и уничтожается.

Третий процесс «Денежные операции» (рис. 11) имитирует проводки в бухгалтерии. Запросы на проводки поступают с первого слоя из узлов 105, 107, 111 (процесс «Производство») и из узла 117 (процесс «Сбыт». Узел 123 имитирует работу финансового директора. Обслуженные транзакты осле бухгалтерских проводок попадают обратно в те узлы, откуда они поступили; номера этих узлов находятся в параметре транзакта t->updown.

Рис.9. Схема бизнес-процесса «Производство»

Рис. 10 – Схема процесса реализации продукции «Сбыт»

Рис. 10. Схема управления потоками «Денежные операции»

Процесс «Производство» построить на плоскости «Корень 1», процесс «Сбыт» – на плоскости «Корень 2». ВАЖНО! При нанесении на рабочую плоскость узлов типа pay необходимо указывать один и тот же номер подплоскости (например, 10). Двойной щелчок мышкой по любому узлу типа pay позволяет перейти на подплоскость 10, на которой следует представить узлы слоя «Денежные операции».

Настройка параметров модели и узлов:

  1. Описать необходимые для построения модели переменные:

float T_cust=7;

float T_work=14;

float S_bank=2500.00;

float S_supp=2500.00;

float Mod_time=365*3;

float N_work=2;

int Max=300;

float The_price=30;

Описание переменных производится по нажатию кнопки «Переменные» в конструкторе GEM1. В соответствующих полях окна последовательно для каждой переменной вводится: имя переменной, начальное значение и тип.

  1. По нажатию кнопки «ModBeg» в поле «С++ текст (инициализация ресурсов)» записать следующие команды:

assign(119, add,10000000.00);

assign(120, add,10000.00);

assign(121, add,10000000.00);

В поле «Время» указать общее время моделирования – Mod_time.

  1. Узел ag 101: Имя – «Заказы-распоряжения», Закон распределения – нормальный, Параметр 1– T_work; Параметр 2 –0.0;

  2. Узел create 102: Имя – «Развилка_1», Мощность – 1, Дети – 103; Родитель – 107;

  3. Узел pay 105: Имя – «Перевод кредита», Приемник – 120, Сумма – S_bank, Источник – 119.

  4. Узел term 106: Имя – «Запрет выдачи», на вкладке «После вхождения в узел» указать команду hold(104);

  5. Узел pay 107: Имя – «Плата поставщикам», Приемник – 122, Сумма – S_supp, Источник – 120;

  6. Узел serv 109: Имя – «Выполнение заказа», Количество каналов – N_work, Закон распределения – нормальный, Параметр 1 – T_work, Параметр 2 – 0.0;

  7. Узел create 110: Имя – «Развилка_2», Наследование – copy, Мощность – 1, Дети – 111, Родитель – 113;

  8. Узел pay 111: Имя – «Возврат кредита», Приемник – 119, Сумма – S_bank, Источник – 120;

  9. Узел term 112: Имя – «Разрешение выдачи», на вкладке «После вхождения в узел» указать команду rels(104);

  10. Узел term 113: Имя – «Заказ-распоряжение выполнен», на вкладке «После вхождения в узел» указать команду supply(115, add, Max);

  11. Узел ag 114: Имя – «Клиенты», Закон распределения – нормальный, Параметр 1– T_сust; Параметр 2 – T_cust/3;

  12. Узел attach 115: Имя – «Склад», Количество – t->powr; на вкладке «До вхождения в узел» указать команды:

t->powr=rundum()*100; // Объем закупаемой партии

t->summ=t->powr*The_price; // Стоимость этой партии

  1. Узел pay 117: Имя – «Оплата покупки», Приемник – 120, Сумма – t->summ, Источник – 121;

  2. Во всех узлах send (119, 120, 121, 122) должны быть проставлены следующие параметры: Приемник – t->k1; Сумма – t->summ; Приоритет – t->dpr;

  3. На подплоскости 10 необходимо нажать кнопку «Слой» и указать: Вход – 119, Выход – 123;

При генерации модели будут выводиться предупредительные сообщения о возможных ошибках типа «Узел 120 не имеет входов» и т.д., на которые не следует обращать внимания – продолжать кодогенерацию.

После генерации кода модели вручную внести несколько поправок, т.к. эти параметры невозможно настроить в конструкторе: во всех узлах типа pay

шестой параметр должен быть равен четвертому (по умолчанию он был 999, необходимо исправить):

pay("Перевод кредита", 120, S_bank, 119, none, 119, 106);

pay("Плата поставщикам", 122, S_supp, 120, none, 120, 108);

pay("Возврат кредита", 119, S_bank, 120, none, 120, 112);

pay("Оплата покупки", 120, none, 121, none, 121, 118);