математическое моделирование. Т 1 МАТ. Моделирование. Литература по теме 197 Вопрос Узловые операторы. 201 Вопрос Текст программной модели смо. 202 Вопрос Сборка и запуск исполнительного модуля модели. 205
Скачать 1.51 Mb.
|
rels). Транзакт-распоряжение проходит узел 10 без задержки и в узле 13 уничтожается. Далее считается, что партия изготовлена и поступила на склад готовой продукции. В модели второго слоя (процесс сбыта произведенной продукции) имитируются следующие действия (рис. 42). Узел 14 является генератором транзактов - покупателей продукции, которые обращаются на склад. Если склад располагает запрошенным количеством товара, то товар отпускается покупателю, в противном случае покупатель (транзакт) ждет. Узел 16 имитирует отпуск товара и контроль очереди. После получения товара покупатель перечисляет деньги на расчетный счет предприятия (узел 17). В узле 18 транзакт уничтожается (покупатель обслужен). В модели третьего слоя (денежные операции) имитируются проводки в бухгалтерии предприятия (рис. 43). Запросы на проводки поступают с первого слоя (рис. 41) из узлов 5, 7, 11 и из узла 17 (рис. 42). Пунктирными линиями показано движение денежных сумм по счетам 51 (Расчетный счет, узел 20), 60 (Поставщики, подрядчики, узел 22), 62 (Покупатели, заказчики, узел 21) и 90 (Банк, узел 19). Условные номера примерно соответствуют плану счетов бухгалтерского учета. Узел 23 имитирует работу финансового директора. Обслуженные транзакты после бухгалтерских проводок попадают обратно в узлы, откуда они поступили; номера этих узлов находятся в параметре транзакта t->updown. Ниже приводится текст программной модели: #include forward { float T_cust=7; /* интервал поступления заказов */ float T_work=14; /* время изготовления партии товаров */ float S_bank=10000.00; /* сумма кредита в банке */ float S_supp=10000.00; /* сумма платы поставщику */ float The_price=90.00; /* цена единица продукции */ float Mod_time=730; /* время моделирования */ int N_work=2; /* производственная мощность */ int Max=1200; /* размер производимой партии продукции*/ modbeg («Company», 23, Mod_time, (long)1234567890, none, 20, none, 18, none); ag («Заказы»,1,none,norm,T_work,T_work/3,zero,2); ag («Клиенты»,14,none,norm,T_cust,T_cust/3,zero,15); assign (19,add,10000000.00); /* фонд банка */ assign (20,add,0.00); /* фонд фирмы */ assign (21 ,add,10000000.00); /* фонд покупателей */ network(dummy, dummy) { //ПРОИЗВОДСТВО ====================================== top( 2): creat («Развилка_1», 0, 1, none, 3, 7); place; top( 3): queue («ЖдемКредит», none, 4); place; top( 4): key («РазрешКредита», 5); place; top( 5): pay («ПереводКредита», 20, S_bank, 19, none, 19, 6); //на слой 3 place; top( 6): term («ЗапретВыдачи»); hold(4); place; top( 7): pay («ПлатаПоставщикам», 22, S_supp, 20, none, 20, 8); //на слой 3 place; top( 8): queue («ОчередьЗаказов», none, 9); place; top( 9): serv («ВыполнениеЗаказов», N_work, none, norm, T_work, T_work/3, zero, 10); place; top(10): creat («Развилка_2», 0, 1, none, 11, 13); place; top(11): pay («ВозвратКредита», 19, S_bank, 20, none, 20, 12); //на слой 3 place; top(12): term («РазрешВыдачи»); rels(4); place; top(13): term («ЗаказВыполнен»); clcode supply(15, none, Max); place; ///СБЫТ ============================================ top(15): t->powr=1+rundum()*99; //объем закупаемой партии t->summ=t->powr*The_price; //стоимость закупаемой партии attach («СкладГотПродукции», t->powr, prty, 16); place; top(16): manage («ОтпускТовара», 17); place; top(17): pay («ОплатаПокупки», 20, t->summ, 21, none, 21, 18);//на слой 3 place; top(18): term («ТоварОплачен»); place; ///ДЕНЕЖНЫЕ ОПЕРАЦИИ ============================ top(19): send («Банк_90», t->k1, t->summ, t->dpr, 23); place; top(20): send («РасчСчет_51», t->k1, t->summ, t->dpr, 23); place; top(21): send («Клиент_62», t->k 1, t->summ, t->dpr, 23); place; top(22): send («Поставщиик_60», t->k1, t->summ, t->dpr, 23); place; top(23): direct («Бухгалтерия», t->updown); //на верхний слой place; /// ================================================= fault (123); } modend («Run_061010_01.rep», 1,30,page); return (0); } Пример результата запуска показан на рис. 44.
Рис. 44. Отчет запуска модели бизнес-процесса Выводы: Для создания имитационных моделей могут применяться CASE- средства, в которых предусмотрены специальные возможности для анализа и моделирования сложных систем на основе применения методологии структурного анализа. В системе Pilgrim эта возможность реализуется с помощью конструктора Gem. Структурный анализ исследуемого процесса и построение графа имитационной модели возникает задача перехода между слоями, отображающими различную степень детализации описаний. Переходы между слоями в системе Pilgrim реализуются с помощью специальных узлов модели. В случаях, когда необходимо обеспечить концептуальную декомпозицию описания, используется узел |