Главная страница
Навигация по странице:

  • Успешно изучив тему, Вы

  • Вопрос 1. Моделирование замкнутых систем.

  • Вопрос 3. Отладка модели.

  • Вопрос 4. Построение гистограмм.

  • Вопросы для самопроверки

  • Математическое моделирование. Документ Microsoft Word. исследование и оптимизация свойств локальных информационных систем


    Скачать 1.67 Mb.
    Название исследование и оптимизация свойств локальных информационных систем
    АнкорМатематическое моделирование
    Дата23.06.2021
    Размер1.67 Mb.
    Формат файлаdocx
    Имя файлаДокумент Microsoft Word.docx
    ТипИсследование
    #220711
    страница12 из 15
    1   ...   7   8   9   10   11   12   13   14   15
    Тема 12. Средства и приемы создания имитационных моделей

     

    Цели изучения темы:

    ·     познакомиться с понятием и примерами замкнутой системы;

    ·     получить представление о методике и приемах создания моделей замкнутой системы.

     

    Задачи изучения темы:

    ·     изучить определение замкнутой системы;

    ·     рассмотреть задачу моделирования замкнутой системы на примере корпоративной информационной системы;

    ·     познакомиться с приемами, применяемыми для создания моделей замкнутых систем;

    ·     освоить приемы сбора данных с помощью имитационной модели.

     

    Успешно изучив тему, Вы:

    получите представление о:

    ·     том, что называется замкнутой системой;

    ·     почему важно знать способы построения моделей замкнутых систем;

    ·     способах инициализации моделируемых процессов;

    ·     способах отладки имитационной модели;

     

    будете знать:

    ·     типовые схемы «зарядки» моделей замкнутых систем;

    ·     узлы и сигнальные функции системы Pilgrim, применяемые в схемах «зарядки» моделей замкнутых систем;

    ·     приемы моделирования на примере модели корпоративной информационной системы.

     

    Вопросы темы:

    1.  Моделирование замкнутых систем.

    2.  Определение нестандартных выходных параметров.

    3.  Отладка модели.

    4.  Получение гистограмм.

     

    Вопрос 1. Моделирование замкнутых систем.

     

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

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

    Моделировать каждый новый запрос отдельным транзактом нельзя, так как нельзя рассчитать заранее время обработки запроса системой (это случайная величина) и, следовательно, нельзя задать частоту генератора.

    В этом случае модель может быть построена следующим образом:

    ·     Пользователи (или группы пользователей, в зависимости от сложности моделируемой системы) представляются одно- или многоканальными узлами типа serv (серверы).

    ·     Число каналов сервера соответствует числу пользователей, время обработки транзакта сервером соответствует времени подготовки пользователями запроса.

    ·     Конкретное состояние транзакта (запрос – ответ) фиксируется значением одного из его параметров.

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

     

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

     



     

    Рис. 45. Схема «зарядки» замкнутой модели

     

    В этом графе каждый пользователь имитируется одним узлом модели типа serv. Текст программы на языке Pilgrim будет выглядеть так:

     

    ag («Старт»,1,none, none,1.О,zero,zero,2);

    top (2): creat («Размножитель», none, Users, none, 4, 3);

                 place;

    top (3): term («Терминатор»);

                 cheg (1, none, none, modtime, zero, zero,3);

                 place;

    top (4): t->ft = addr[4]->na + 5;

                 t->ru0 = Think_time [addr[4]->na];

    t->ru1 = Query_time [addr[4]->na];

                queue («Распределитель», none, t->ft) ;

            place;

     

    Значения переменных Usersmodtime задают соответственно число пользователей и время моделирования, массивы Think_time и Query_time среднее время обдумывания пользователем запроса и среднее время реакции системы на запрос (значения могут устанавливаться в начале программы вместе с описаниями переменных). Конструкция реализует следующую последовательность инициализирующих действий.

    Запрос, сгенерированный узлом ag (узел 1), попадает в узел creat (узел 2), который генерирует Users транзактов (по числу пользователей), не присваивая им номер семейства. Далее эти транзакты попадают в очередь (узел 4), где каждому из них присваивается свой номер семейства, равный номеру сервера, в который этот транзакт должен будет попасть после выхода из узла 2. Присваивание производится с помощью системной переменной addr[4]->na, в которой в каждый момент модельного времени хранится значение числа транзактов, прошедших через узел (в данном примере, через узел 4). Таким образом будет обеспечено автоматическое присвоению системной переменной) t->ft нужной последовательности номеров узлов-приемников.

    В параметр транзакта t->ru0 заносится значение среднего времени задержки в сервере, моделирующем работу пользователя. Этот параметр используется при описании серверов пользователей (узлы с номерами из диапазона [5, Users + 4], где Users - число серверов). Кроме того, в параметр транзакта t->ru1 заносится значение среднего времени задержки запроса (обработки) в сервере, моделирующем процессор системы.

    Транзакт, вышедший из узла ag и покинувший узел 2, переходит далее в терминатор (узел 3). В этом узле он инициирует выполнение сигнальной функции cheg, которая переустанавливает параметр узла ag, задающей средний интервал между двумя генерируемыми транзактами в modtime (что, по сути, означает отключение узла ag), и уничтожается.

     

    Вопрос 2. Определение нестандартных выходных параметров.

     

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

    1)      Значение среднего времени реакции можно рассчитать на основании стандартного отчета с результатами моделирования системы Pilgrim. Для этого можно воспользоваться следующим выражением:

     



     

    где

     означает среднее время обдумывания пользователем ответа системы перед выдачей нового ей очередного запроса (вывод этого выражение весьма несложен).

     

    2)      Значенииt   можно получить в явном виде как среднее значение нахождения узла key в закрытом состоянии, если прибегнуть к приему, который поясним на примере модели, рассмотренной выше.

    Для получения нужного результата в модель нужно добавить дополнительные узлы типа key вместе с соответствующей логикой (рис. 46):

     



     

    Рис. 46. Узел key как средство сбора данных

     

    При использовании первого подхода каждому пользователю, который имитируется одним узлом типа serv, придается дополнительный узел key, который служит только для целей измерений. Транзакт (запрос к КИС) сначала попадает в узел key и запирает его с помощью сигнальной функции hold (5) (для примера выше). После обработки запроса, когда транзакт возвращается из модели КИС сервер, имитирующий пользователя, при входе в узел serv он открывает соответствующий узел key с помощью сигнальной функции rels(5) (для примера выше). В программной модели автоматически измеряется средний интервал нахождения узла key в закрытом состояниичто и есть не что иное, как математическое ожидание, а также среднеквадратичное отклонение этой величины.

    Рассмотрим следующий пример упрощенной модели КИС, граф которой включает схему зарядки, описанную ранее в настоящей теме, а граф, имитирующий обработку, состоит из одного узла типа queue, имитирующего очередь на обработку, и одного узла типа serv, имитирующего собственно обработку (Рис.):

     



     

    Рис. 47. Пример модели КИС

     

    В модели присутствуют четыре пользователя, представленные узлами П_1, П_2, П_3, П_4 типа serv. Для сбора данных о времени реакции системы на запрос пользователя в модель встроены узлы КП_1, КП_2, КП_3, КП_4 типа key. Узлы 101, 102, 103 обеспечивают первоначальную зарядку транзактами узлов П_1, П_2, П_3, П_4 модели. Для некоторой совокупности параметров модели (см. значения параметров в тексте программы следующего вопроса настоящей темы) можно получить следующий результат (рис. 48):

     

    НАЗВАНИЕ МОДЕЛИ:

    КИС

    ВРЕМЯ МОДЕЛИРОВАНИЯ:

    50001.00

    Лист: 1



    узла

    Наименование

    узла

    Тип узла

    Точка

    Загрузка(%=),

    Путь(км)

    M [t] среднее время

    C [t] квадрат коэф.вар.

    Счетчик входов и hold

    Кол. кан.

    Оcт. тр.

    Состояние узла в этот момент

     

     

     

     

     

     

     

     

     

     

     

    101

    Старт

    ag

    -

    -

    1.00

    0.00

    2

    1

    1

    открыт

    102

    Размножитель

    creat

    -

    -

    0.00

    1.00

    4

    0

    1

    закрыт

    103

    Стоп

    term

    -

    -

    0.00

    1.00

    1

    0

    0

    открыт

    104

    Распределитель

    queue

    -

    -

    0.00

    1.00

    4

    1

    0

    открыт

    105

    П_1

    serv

    -

    %= 29.8

    68.06

    0.12

    220

    1

    1

    открыт

    106

    П_2

    serv

    -

    %= 36.9

    93.10

    0.14

    198

    1

    0

    открыт

    107

    П_3

    serv

    -

    %= 42.8

    118.23

    0.12

    182

    1

    1

    открыт

    108

    П_4

    serv

    -

    %= 48.8

    143.59

    0.12

    170

    1

    0

    открыт

    109

    Очередь

    queue

    -

    -

    92.64

    0.28

    768

    1

    1

    открыт

    110

    КИС

    serv

    -

    %= 99.2

    64.76

    0.11

    767

    1

    1

    закрыт

    115

    КП_1

    key

    -

    %= 70.2

    160.18

    0.12

    219

    1

    0

    открыт

    116

    КП_2

    key

    -

    %= 63.4

    160.10

    0.12

    198

    1

    0

    закрыт

    117

    КП_3

    key

    -

    %= 56.9

    157.26

    0.10

    181

    1

    0

    открыт

    118

    КП_4

    key

    -

    %= 51.3

    150.94

    0.11

    170

    1

    0

    закрыт

     

    Рис. 48. Результаты запуска модели КИС

     

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

     

    П

    Тобд

    ρ×100%

    Треакции

    Тобд×(1-ρ)/ρ

    Key

    1

    68,06

    29,8%

    160,33

    160,18

    2

    93,10

    36,9%

    159,20

    160,10

    3

    118,23

    42,8%

    158,01

    157,26

    4

    143,59

    48,8%

    150,65

    150,94

     

    Рис. 49. Время реакции КИС

     

    Как видим, наблюдаемые расхождения в значениях параметров оказываются крайне незначительными.

     

    Вопрос 3. Отладка модели.

     

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

    Ниже приводится текст программной модели, имеющей дополнительные конструкции С++, которые обеспечивают отслеживание во времени состояние транзактов модели:

     

    /****************************************************************************/

    #include


    //Для вывода результатов трассировки ---------------------------------------------------------------------

    #include                                  //для функции creat()                     

    #include             //потоковый класс                                      

    #include              //значения параметров amode       

    //----------------------------------------------------------------------------------------------------------------------

    forward

    {

    int USERS=4;

    float Q_time[]={57.6,67.2,72,64.8};

    float T_time[]={72, 96, 120, 144};

    float modtime=50000.0;

    //Выводной файл--------------------------------------------------------------------------------------------------

    int           fileNumb=creat («C:\\MyResults.txt», S_IWRITE); // файла для вывода

    ofstream fileOut;

    fileOut.attach (fileNumb);

    //----------------------------------------------------------------------------------------------------------------------

    modbeg («КИС», 120, modtime, (long)1234567890, none, 109, none, none, 2);

    ag («Старт», 101, none, none, 1, none, none, 102);

    network (dummy, dummy)

    {

    top (102):

    creat («Размножитель», none, USERS, none, 104, 103);

    place;

    top (103):

    term («Стоп»);

    clcode

    {

    cheg (101,none,none,modtime,zero,zero,102);

    }

    place;

    top (104):

    t->ft=addr[104]->na + 105;

    t->ru0=T_time[addr[104]->na];

    t->ru1=Q_time[addr[104]->na];

    queue («Распределитель», none, t->ft);

    place;

    top (105):

    rels (115);

    serv («П_1», 1, none, norm, t->ru0, t->ru0/3, none, 115);

    clcode

    {

    fileOut << «\n» << t->ft << « Тотв=« << timer ;

    }

    place;

    top (106):

    rels (116);

    serv («П_2», 1, none, norm, t->ru0, t->ru0/3, none, 116);

    clcode

    {

    fileOut << «\n» << t->ft << « Тотв=« << timer ;

    }

    place;

    top (107):

    rels (117);

    serv («П_3», 1, none, norm, t->ru0, t->ru0/3, none, 117);

    clcode

    {

    fileOut << «\n» << t->ft << « Тотв=« << timer ;

    }

    place;

    top (108):

    rels (118);

    serv («П_4», 1, none, norm, t->ru0, t->ru0/3, none, 118);

    clcode

    {

    fileOut << «\n» << t->ft << « Тотв=« << timer ;

    }

    place;

    top (115):

    key («КП_1», 109);

    hold (115);

    place;

    top (116):

    key («КП_2», 109);

    hold (116);

    place;

    top (117):

    key («КП_3», 109);;

    hold (117);

    place;

    top (118):

    key («КП_4», 109);

    hold (118);

    place;

    top (109):

    queue («Очередь», none, 110);

    clcode

    {

    fileOut << «\n» << t->ft << « Tвыд=« << timer ;

    }

    place;

    top (110):

    serv(«КИС», 1, none, norm, t->ru1, t->ru1/3, none, t->ft);

    clcode

    {

    fileOut << «\n» << t->ft << « Tобс=« << timer;                

    }

    place;

    fault (123);

    }

    modend («КИС.rep», 1, 28, page);

    return 0;

    }

     

    В программной модели присутствуют операторы, которые выводят в fileOut (описан в начальной части программы) моменты появления транзактов в основных узлах модели: Тотв (получение пользователем ответа от системы), Tвыд (выдача пользователем запроса системе), Tобс (начало обработки пользовательского запроса). Операторы записываются в блоках clcode, что гарантирует их выполнение точно в моменты вхождения транзакта в соответствующий узел.

    Ниже приведен начальный фрагмент трассировки (содержимого файла C:\\MyResults.txt) без первых строк, в которой содержатся моменты первоначального занесения транзактов, сгенерированных схемой зарядки:

     

    105 Tвыд=49.9005

    105 Tобс=49.9005

    106 Tвыд=70.7441

    107 Tвыд=93.8595

    105 Тотв=121.851

    106 Tобс=121.851

    108 Tвыд=167.247

    105 Tвыд=178.985

    106 Тотв=181.122

    107 Tобс=181.122

    106 Tвыд=265.4

    107 Тотв=274.487

    108 Tобс=274.487

    108 Тотв=349.432

    105 Tобс=349.432

    105 Тотв=370.114

    106 Tобс=370.114

    107 Tвыд=389.957

    106 Тотв=420.103

    107 Tобс=420.103

    105 Tвыд=464.913

    107 Тотв=476.97

    105 Tобс=476.97

    106 Tвыд=494.919

    108 Tвыд=500.144

    105 Тотв=523.164

     

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

     

    Вопрос 4. Построение гистограмм.

     

    В ряде задач результат в виде средних значений и среднеквадратичных отклонений показателей исследуемой системы бывает недостаточно информативен и требуется более подробное описание показателя, которое получается в этом случае в виде гистограмм, отображающих частоты распределения значений показателя. Собрать необходимые сведения для построения гистограммы можно непосредственным включением операторов языка С++ в текст исходного модуля pilgrim-модели. Поясним возможный прием на примере модели СМО, рассматривавшейся в предыдущих темах.

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

     

    /* ЗАГОЛОВОЧНЫЕ ФАЙЛЫ***********************************************************/

    #include                                                 //Pilgrim

    #include                                                          //для функции creat()                                  

    #include                                                 //потоковый класс                                       

    #include                                                 //значения параметров amode           

    #include                                                //манипуляторы ввода-вывода                       

    #include                                                      //константы предельных значений

    /*Вывод данных гистограммы ************************************************************/

    void printhist (char hdr[]       /* заголовок отчета */,

    int fileNumb                  /* выводной файл */,

    int dim                           /* размерность массивов*/,

    float bounds[]                /* границы значений */,

    int counts[]                    /* частоты значений */)

    {

    ofstream fileOut;

    int i;

    float sum, mn;

    fileOut.attach (fileNumb);

    for ( i=0,sum=0; i
    for ( i=0,mn=0; i
    if (bounds[i]!=FLT_MIN)

    if (bounds[i+1]!=FLT_MAX) mn+=counts[i]*(bounds[i]+bounds[i+1])/2/ sum;

    else mn+=counts[i]* bounds[i-1] / sum;

    else

    if (bounds[i+1]!=FLT_MAX) mn+=counts[i]*bounds[i+1] / sum;

    else mn+=counts[i] / sum;

    fileOut            << hdr << setprecision(4);

    fileOut            << «\n---------------------------------------------»

    << «\n» << setw(5)<<«MIN»<< setw(10)<<«MAX»<
    << «\n---------------------------------------------»;

    for ( i=0; i
    {

    if (bounds[i]==FLT_MIN)    fileOut << «\n» << setw(5) << «<<<«;

    else                                         fileOut << «\n» << setw(5) << bounds[i];

    if (bounds[i+1]==FLT_MAX)          fileOut <>>«;

    else                                         fileOut <
    fileOut << setw(10) << counts[i] << « « << static_cast (counts[i])/sum; }

    fileOut            << «\n---------------------------------------------»;     

    fileOut << «Среднее= « << mn << endl;

    }

    /***********************************************************************************/

    forward

    {

    /********* ИНИЦИАЛИЗАЦИЯ СРЕДСТВ СБОРА СТАТИСТИКИ **************************/

    int fileNumb=creat («C:\\MyResults.txt», S_IWRITE);                 // выводной файл

    float bounds[]={                                                                        0.0, 10.0, 20.0, 30.0, 40.0, 50.0,                                                                                              // границы интервалов

    60.0, 70.0, 80.0, 90.0, 100.0, FLT_MAX };                                     // границы интервалов

    int const dim = sizeof bounds / sizeof (float)-1;                             // число интервалов

    int counts [dim]={ 0 };                                                                     // счетчики

    ofstream fileOut;                                                                              // выводной файл                                                                                                              

    fileOut.attach (fileNumb);                                                               // присоединение

    int i;                                                                                                 // индекс

    //--------------------------------------------------------------------------------------------------------------------------------

    modbeg («СМО», 105, 15000, (long)time(NULL), none, 102, none,104, 2);

    ag («Генератор», 101, none, expo, 12.0, none, none, 102);

    network (dummy, dummy)

    {

    top (102):

    t->ru0 = timer; //Запоминание момента входа в систему

    queue («Очередь «, none, 103);

    place;

    top (103):

    serv («Сервер», 1, none, expo, 9.0, none, none, 104);

    place;

    top (104):

    term («Терминатор»);

    clcode /* Выход из системы - сбор статистики */

    {

    for (i=0;i
    if (timer-t->ru0>bounds[i] & timer-t->ru0<=bounds[i+1]) counts[i]++;             

    }

    place;

    fault(123);

    }

    printhist («Тпребывания «, fileNumb, dim, bounds, counts); // вывод собранной статистики

    modend («pilgrim.rep», 1, 8, page);

    return 0;

    }

     

    Границы интервалов изменения исследуемого показателя задаются в программе в массиве bounds, верхней границей которого являются максимально возможное значение чисел типа float (FLT_MAX).

    Вывод собранных в массиве counts частот осуществляет функция printhist, в которой подсчитывается и выводится также среднее значение показателя Тср

    Примером полученных статистических данных может быть (рис. 50):

     

    Тпребывания

     

    MIN

    MAX

    N

    %

    0

    10

    299

    0.2435

    10

    20

    240

    0.1954

    20

    30

    167

    0.136

    30

    40

    118

    0.09609

    40

    50

    107

    0.08713

    50

    60

    80

    0.06515

    60

    70

    81

    0.06596

    70

    80

    43

    0.03502

    80

    90

    29

    0.02362

    90

    100

    29

    0.02362

    100

    >>> 

    35

    0.0285

     

    Tср=32.15

     

    Рис. 50. Пример вывода статистических данных

     

    Используя любое доступное средство (например, построитель диаграмм Excel) числовые данные можно представить графически (рис. 51):

     



     

    Рис. 51. Статистические данные в виде диаграммы

     

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

     

    Выводы:

    1.  Важным классом систем, для анализа и проектирования которых используется аппарат имитационного моделирования, являются замкнутые системы, в которых отсутствуют потоки между ними и внешней средой. Для создания моделей таких систем используются специальные приемы, называемые в системе Pilgrim схемами зарядки.

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

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

    4.  Важным этапом моделирования является этап ее отладки и обоснования адекватности модели. Для эффективной реализации этой задачи необходимо использовать различные методы и приемы. Одним из наиболее часто применяемых подходов является трассировка модели.

     

    Вопросы для самопроверки:

    1.  Что такое замкнутая система (модель)?

    2.  Почему в замкнутой модели нельзя моделировать каждый новый запрос отдельным транзактом?

    3.  Какие узлы используются для моделирования замкнутых систем?

    4.  Какие показатели могут потребоваться помимо автоматически получаемых системой Pilgrim?

    5.  Какими приемами можно воспользоваться для получения значения дополнительных показателей?

     

    Литература по теме:

    1.  Емельянов А.А., Власова Е.А., Дума Р.В. Имитационное моделирование экономических процессов / Под ред. А.А. Емельянова. – М.: Финансы и статистика, 2009. – 480 с.

     

    1   ...   7   8   9   10   11   12   13   14   15


    написать администратору сайта