Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 359 / 12 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 2:

Модель обработки запросов сервером

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Изменение свойств блоков модели, её настройка и запуск

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

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

Как вы уже знаете диаграмма процесса в AnyLogic создаётся путем добавления объектов библиотеки из палитры на диаграмму класса активного объекта, соединения их портов и изменения значений свойств блоков в соответствии с требованиями модели.

Всё, что нам нужно, чтобы сделать созданную диаграмму модели (см. Рис. 1.15) адекватной постановке задачи - это изменить некоторые свойства объектов.

Изменение свойств блоков диаграммы процесса

Свойства объекта (как и любого другого элемента AnyLogic) можно изменить в панели Свойства.

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

Чтобы всегда была уверенность в том, что в текущий момент в рабочем пространстве выбран именно нужный элемент, и именно его свойства вы редактируете в панели Свойства, обращайте внимание на первую строку, показываемую в панели Свойства - в ней отображается имя выбранного в текущий момент времени элемента и его тип.

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

Первым объектом в диаграмме процесса является объект класса Source. Объект source генерирует заявки определенного типа. Заявки представляют собой объекты, которые производятся, обрабатываются, обслуживаются, или еще каким-нибудь образом подвергаются действию моделируемого процесса: это могут быть клиенты в системе обслуживания, детали в модели производства, транспортные средства в модели перевозок, документы в модели документооборота, сообщения в моделях систем связи и т.д. В нашем примере заявками будут запросы на обработку данных, а объект source будет моделировать поступление запросов на сервер.

Свойства объекта source

увеличить изображение
Рис. 1.16. Свойства объекта source

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

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

  1. Выделите объект source. В выпадающем списке Прибывают согласно: укажите, что запросы поступают согласно Времени между прибытиями: (Рис. 1.16).
  2. В поле Время между прибытиями появится запись exponential(1). Установите согласно постановке задачи среднее значение интервалов времени поступления запросов на сервер, изменив свойства объекта source. Для этого вместо характеристики распределения 1 введите 1/120.0.

В языке программирования Java символ / означает целочисленное деление, т.е. если оба числа целые, то и результат будет целым. В нашем случае отношение 1/120 было бы равно нулю. Для получения вещественного результата, необходимо, чтобы хотя бы одно из чисел было вещественным (double). Поэтому в качестве характеристики экспоненциального распределения (интенсивности поступления запросов) необходимо указать 1/120.0 или 1.0/120.

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

Измените свойства объекта queue (Рис. 1.17).

  1. Задайте длину очереди. Введите в поле Вместимость: 5. В очереди будут находиться не более 5 запросов.
  2. Установите флажок Включить сбор статистики, чтобы включить сбор статистики для этого объекта. В этом случае по ходу моделирования будет собираться статистика по количеству запросов в очереди. Если же вы не установите этот флажок, то данная функциональность будет недоступна, поскольку по умолчанию она отключена для повышения скорости выполнения модели. Для вывода, например, средней длины очереди, нужно в модели предусмотреть Java код.
Свойства объекта queue

увеличить изображение
Рис. 1.17. Свойства объекта queue

Следующим в нашей диаграмме процесса расположен объект delay. Он задерживает заявки на заданный период времени, представляя в нашей модели непосредственно сервер, на котором обрабатываются запросы.

Измените свойства объекта delay (Рис. 1.18).

  1. Обработка одного запроса занимает примерно 3 мин. Задайте время обслуживания, распределенное по экспонен-циальному закону со средним значением 3 мин. Для этого введите в поле Время задержки: exponential(1/180.0). Функция exponential() является стандартной функцией генератора случайных чисел AnyLogic. AnyLogic предос-тавляет функции и других случайных распределений, таких как нормальное, треугольное, и т. д.
  2. Установите флажок Включить сбор статистики.
Свойства объекта delay

увеличить изображение
Рис. 1.18. Свойства объекта delay

Для вывода коэффициента использования объекта delay в модели также следует предусмотреть соответствующий Java код.

Последним в диаграмме нашей дискретно-событийной модели находится объект sink. Этот объект уничтожает поступившие заявки. Обычно он используется в качестве конечной точки потока заявок (и диаграммы процесса соответственно). В нашем случае он выводит из модели обработанные сервером запросы.

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

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

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

Если вы хотите наблюдать поведение модели в течение длительного периода (до того момента, пока вы сами не остановите выполнение модели), то по умолчанию времени остановки нет. Обработку запросов сервером мы планируем исследовать в течение одного часа, т.е. 3600 с.

  1. В панели Проект выделите эксперимент Simulation:Main.
  2. Щелчком раскройте вкладку Модельное время.
  3. Установите Виртуальное время (максимальная скорость) (Рис. 1.19).
  4. В поле Остановить: выберите из списка В заданное время.
  5. В поле Конечное время: установите 3600.
  6. Раскройте вкладку Случайность.
  7. Выберите опцию Фиксированное начальное число (воспроизводимые прогоны).
  8. В поле Начальное число: установите 9.
  9. В панели Проект, выделите Server (Рис. 1.20).
  10. Из выпадающего списка Единицы модельного времени: выберите секунды.
Запуск модели

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

Установка свойств эксперимента

увеличить изображение
Рис. 1.19. Установка свойств эксперимента
Установка модельного времени

увеличить изображение
Рис. 1.20. Установка модельного времени

После исправления ошибок и построения модели, запустите её:

  1. Щёлкните мышью кнопку панели инструментов Запустить (или нажмите F5) и выберите из открывшегося списка эксперимент, который вы хотите запустить. Эксперимент этой модели будет называться Server/Simulation.
  2. В дальнейшем нажатием кнопки Запустить (или кнопки F5) будет запускаться тот эксперимент, который запускался вами в последний раз. Чтобы выбрать другой эксперимент, вам будет нужно щелкнуть мышью по стрелке, находящейся в правой части кнопки Запустить, и выбрать нужный вам эксперимент из открывшегося списка (или щелкнуть правой кнопкой мыши по этому эксперименту в панели Проект и выбрать Запустить из контекстного меню).
  3. После запуска модели вы увидите окно презентации этой модели (Рис. 1.21). В нем будет отображена презентация запущенного эксперимента. AnyLogic автоматически помещает на презентацию каждого простого эксперимента заголовок и кнопку, позволяющую запустить модель и перейти на презентацию, нарисованную вами для главного класса активного объекта этого эксперимента (Main).
  4. Щёлкните данную кнопку. Этим щелчком вы запустите модель и перейдете к презентации корневого класса активного объекта запущенного эксперимента. Для каждой модели, созданной в Библиотеке моделирования процессов, автоматически создается блок-схема с наглядной визуализацией процесса, с помощью которой вы можете изучать текущее состояние модели, например, длину очереди, количество обработанных запросов и так далее (Рис. 1.22).
    Окно презентации модели

    Рис. 1.21. Окно презентации модели
  5. Для каждого объекта определены правила, при каких условиях принимать заявки. Некоторые объекты задерживают заявки внутри себя, некоторые - нет. Для объектов также определены правила: может ли заявка, которая должна покинуть объект, ожидать на выходе, если следующий объект не готов её принять. Если заявка должна покинуть объект, а следующий объект не готов её принять, и заявка не может ждать, то модель останавливается с ошибкой (Рис. 1.22). Ошибка означает, что запрос не может покинуть объект source и войти в блок queue, так как его ёмкость, равная 5, заполнена. Также выдаётся сообщение о логической ошибке в модели (Рис. 1.23)
    Модель остановилась с ошибкой

    Рис. 1.22. Модель остановилась с ошибкой
    Сообщение о логической ошибке в модели

    Рис. 1.23. Сообщение о логической ошибке в модели
  6. Нажмите OK. Далее измените свойства объекта queue, т. е. увеличьте длину очереди (см. Рис. 1.17). Для этого введите в поле Вместимость 15. Можете убедиться, что при увеличении ёмкости в пределах 6 … 14 модель по-прежнему останавливается с этой же ошибкой. Момент появления ошибки зависит от длительности времени моделирования.
  7. Снова запустите модель.
    Окно инспекта

    Рис. 1.24. Окно инспекта
  8. Вы можете следить за состоянием любого объекта диаграммы процесса во время выполнения модели с помощью окна инспекта этого объекта. Чтобы открыть окно инспекта, щёлкните мышью по значку нужного блока. Окно инспекта, подведя курсор, можно перемещать в нужное вам место. Также, подведя курсор к правому нижнему углу окна инспекта, можно при необходимости изменять его размеры.
  9. В окне инспекта будет отображена базовая информация по выделенному объекту: например, для объекта queue будут отображены вместимость очереди, количество заявок, прошедшее через каждый порт объекта и т. д. Такая же информация содержится в инспекте и для объекта delay (Рис. 1.24).
  10. Когда вы захотите остановить выполнение модели, Щёлкните мышью кнопку Прекратить выполнение панели управления окна презентации.
  11. Для предотвращения остановок модели по ранее указанной ошибке - недостаточной ёмкости объекта queue - мы увеличили ёмкость объекта queue. Однако можно было бы изменять среднее время имитации поступления запросов объектом source и среднее время обработки запросов сервером, т. е. среднее время задержки объекта delay, оставляя неизменной длину очереди и добиваясь безошибочной работы модели. Конечно, при изменении свойств объектов модели нужно обязательно исходить из целей её построения. Мы же не выполнили условий, указанных в постановке задачи, поэтому к выполнению их вернемся позже.

Создание анимации модели

Можно было наблюдать, анализировать и интерпретировать работу запущенной модели с помощью визуализированной диаграммы процесса (см. Рис. 1.22, 1.24).

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

Так как в данном случае нас не интересует конкретное расположение объектов в пространстве, то мы можем просто добавить схематическую анимацию интересующих нас объектов - сервер и очередь запросов к нему.

Анимация модели рисуется в той же диаграмме (в графическом редакторе), в которой задается и диаграмма моделируемого процесса.

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

  1. Откройте палитру Разметка пространства (Рис. 1.25). Чтобы открыть какую-либо палитру, нужно щелкнуть по иконке этой палитры.
  2. Палитра Разметка пространства (Рис. 1.25) содержит в качестве элементов различные примитивные фигуры, используемые для рисования презентаций моделей. Это путь, прямоугольный узел, многоугольный узел, точечный узел, аттрактор, стеллаж, масштаб.
    Палитра Разметка пространства

    Рис. 1.25. Палитра Разметка пространства
  3. Выделите элемент Прямоугольный узел и перетащите его на диаграмму класса активного объекта. Поместите элемент Прямоугольный узел так, как показано на Рис. 1.26.
    Элемент Прямоугольный узел на диаграмме

    увеличить изображение
    Рис. 1.26. Элемент Прямоугольный узел на диаграмме
  4. Давайте сделаем так, чтобы цвет этого прямоугольного узла будет меняться в зависимости от того, обрабатывет ли сервер в данный момент времени запрос или нет.
  5. Для этого выделите нарисованную нами фигуру на диаграмме. Перейдите на страницу Внешний вид панели свойств (Рис. 1.27).

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

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

    delay.size()>0?red:green
    Установлено динамическое значение цвета заливки

    увеличить изображение
    Рис. 1.27. Установлено динамическое значение цвета заливки

    Здесь delay - это имя нашего объекта delay. Функция size() возвращает число запросов, обслуживаемых в данный момент времени. Если сервер занят, то цвет кружка будет красным, в противном случае - зелёным.

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

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

    Путь на диаграмме процесса

    увеличить изображение
    Рис. 1.28. Путь на диаграмме процесса
  7. Теперь мы должны задать созданные анимационные объекты в качестве анимационных фигур объектов диаграммы нашего процесса. Задайте путь в качестве фигуры анимации очереди. Выделите объект queue. На странице свойств объекта queue в поле Место заявок: выберите из выпадающего списка path (Рис. 1.29).
  8. Задайте прямоугольный узел в качестве фигуры анимации сервера. Выделите объект delay. Введите в поле Место заявок: из выпадающего списка имя нашего прямоугольного узла: node (Рис. 1.30).
    Задание пути в качестве фигуры анимации очереди

    Рис. 1.29. Задание пути в качестве фигуры анимации очереди
    Задание прямоугольного узла  в качестве фигуры анимации сервера

    Рис. 1.30. Задание прямоугольного узла в качестве фигуры анимации сервера
    Анимация модели

    Рис. 1.31. Анимация модели
  9. Запустите модель. Вы увидите, что у модели теперь есть простейшая анимация - сервер и очередь запросов к нему (Рис. 1.31). Цвет фигуры сервера будет меняться в зависимости от того, обрабатывается ли запрос в данный момент времени или нет.

Сбор статистики использования ресурсов

AnyLogic предоставляет пользователю удобные средства для сбора статистики по работе блоков диаграммы процесса. Объекты Enterprise Library самостоятельно производят сбор основной статистики. Все, что вам нужно сделать - это включить сбор статистики для объекта.

Поскольку мы уже сделали это для объектов delay и queue, то теперь мы можем, например, просмотреть интересующую нас статистику (скажем, статистику занятости сервера и длины очереди) с помощью диаграмм.

Добавьте диаграмму для отображения среднего коэффициента использования сервера:

  1. Откройте палитру Статистика. Эта палитра содержит элементы сбора данных и статистики, а также диаграммы для визуализации данных и результатов моделирования.
  2. Перетащите элемент Столбиковая диаграмма из палитры Статистика на диаграмму класса и измените ее размер, как показано на Рис. 1.32.
    Элемент Столбиковая диаграмма на диаграмме класса

    увеличить изображение
    Рис. 1.32. Элемент Столбиковая диаграмма на диаграмме класса
  3. Перейдите на панель Свойства. Щёлкните кнопку Добавить элемент данных. После щелчка появится секция свойств того элемента данных (chart - Столбиковая диаграмма), который будет отображаться на этой диаграмме (Рис. 1.33).
    Страница Свойства

    увеличить изображение
    Рис. 1.33. Страница Свойства
  4. Измените Заголовок на SERVER utilization.
  5. Введите delay.statsUtilization.mean() в поле Значение. Здесь delay - это имя нашего объекта delay. У каждого объекта delay есть встроенный набор данных statsUtilization, занимающийся сбором статистики использования этого объекта. Функция mean() возвращает среднее из всех измеренных этим набором данных значений. Вы можете использовать и другие методы сбора статистики, такие, как min() или max(). Полный список методов можно найти на странице документации этого класса набора данных: StatisticsContinuous (на английском языке).
  6. Щёлкните Внешний вид (Рис. 1.34). Установите свойства: направление столбцов, цвета фона, границ, меток, сетки, положение подписей у столбцов.
    Вкладка Внешний вид

    увеличить изображение
    Рис. 1.34. Вкладка Внешний вид
  7. Раскройте щелчками страницы (вкладки) Местоположение и размер, Легенда, Область диаграммы (Рис. 1.35). Установите свойства, чтобы изменить расположение легенды относительно диаграммы (мы хотим, чтобы она отображалась внизу), размер диаграммы, высоту, ширину, координаты размещения на диаграмме, цвета текста, границы.
    Вкладки Местоположение и размер, Легенда,  Область диаграммы

    увеличить изображение
    Рис. 1.35. Вкладки Местоположение и размер, Легенда, Область диаграммы
  8. Аналогичным образом добавьте еще одну столбиковую диаграмму для отображения средней длины очереди.
  9. На панели Свойства щёлкните Добавить элемент данных. После щелчка появится страница Данные свойств элемента данных (chart1 - Столбиковая диаграмма), который также будет отображаться на этой диаграмме (Рис. 1.36).
  10. Заголовок: и Значение: измените так, как показано на Рис. 1.36. В поле Заголовок: введите Queue lenqth, а в поле Значение: введите queue.statsSize.mean().
  11. На страницах Внешний вид, Местоположение и размер, Легенда, Область диаграммы установите свойства самостоятельно. Столбцы диаграммы должны размещаться горизонтально.
    Страницы Данные, Внешний вид панели Свойства

    увеличить изображение
    Рис. 1.36. Страницы Данные, Внешний вид панели Свойства
  12. В поле Значение: queue - это имя нашего объекта queue. У каждого объекта queue, как и объекта delay, также есть встроенный набор данных statsSize, занимающийся сбором статистики использования этого объекта. Функция mean() также возвращает среднее из всех измеренных этим набором данных значений.
    Добавлены две столбиковые диаграммы

    увеличить изображение
    Рис. 1.37. Добавлены две столбиковые диаграммы
  13. На странице Внешний вид панели Свойства выберите в секции свойств Направление столбцов вторую опцию (Рис. 1.36), чтобы столбцы во второй столбиковой диаграмме, расположенной горизонтально, росли вправо (Рис. 1.37).
  14. Запустите модель с двумя столбиковыми диаграммами, установив модельное время 3600 единиц, и понаблюдайте за её работой (Рис. 1.38).

Уточнение модели согласно ёмкости входного буфера

На Рис. 1.38 (снимок сделан по окончании времени моделирования) видно, что длина очереди равна 14 запросам при установленной максимальной длине 15. Но ведь в постановке задачи ёмкость буфера была определена в 5 запросов. Нам не удалось до этого построить модель с такой ёмкостью из-за ошибки (см. Рис. 1.32) - невозможности очередного запроса покинуть блок source, так как длина очереди уже была равна 5 запросам. Нам пришлось во избежание этой ошибки увеличить ёмкость буфера до 15 запросов.

А возможно ли выполнить данное условие постановки задачи средствами AnyLogic? Оказывается, что можно. Причем, различными способами. Уточним модель согласно постановке задачи одним из этих способов.

Наблюдение за моделью с двумя столбиковыми диаграммами

увеличить изображение
Рис. 1.38. Наблюдение за моделью с двумя столбиковыми диаграммами

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

Заявка может покинуть объект queue различными способами:

  • обычным способом через порт out, когда объект, следующий в блок-схеме за этим объектом, готов принять заявку;
  • через порт outTimeout, если заявка проведет в очереди заданное количество времени (если включен режим таймаута);
  • через порт outPreempted, будучи вытесненной другой поступившей заявкой при заполненной очереди (если включен режим вытеснения);
  • "вручную", путем вызова функции remove() или removeFirst().

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

Поступающие заявки помещаются в очередь в определенном порядке: либо согласно правилу FIFO (в порядке поступления в очередь), либо согласно приоритетам заявок. Приоритет может быть либо явно храниться в заявке, либо вычисляться согласно свойствам заявки и каким-то внешним условиям. Очередь с приоритетами всегда примет новую входящую заявку, вычислит её приоритет, и поместит в очередь в позицию, соответствующую её приоритету. Если очередь будет заполнена, то приход новой заявки вынудит последнюю хранящуюся в очереди заявку покинуть объект через порт outPreempted. Но если приоритет новой заявки не будет превышать приоритет последней заявки, то тогда вместо неё будет вытеснена именно эта новая заявка.

Для выполнения условия постановки задачи воспользуемся последним способом вытеснения. Все запросы, вырабатываемые объектом source, имеют один и тот же приоритет. Поэтому при полном заполнении накопителя (5 запросов) теряться будет последний запрос. Уточните модель.

  1. Выделите объект queue. На панели Свойства измените Вместимость с 15 на 5 запросов.
  2. Здесь же установите Разрешить вытеснение.
  3. Для уничтожения потерянных запросов вследствие полного заполнения накопителя нужно добавить второй объект sink. Откройте в Палитре Библиотеку моделирования процессов и перетащите блок sink на диаграмму (Рис. 1.39). При перетаскивании объект пытается автоматически соединиться с входами имеющимися на диаграмме объектами. Но это может вас не устраивать.
  4. Тогда соедините порт outPreempted объекта queue с входным портом InPort блока sink1. Чтобы соединить порты, сделайте двойной щелчок мышью по одному порту, например, outPreempted, затем последовательно Щёлкните в тех местах диаграммы, где вы хотите поместить точки изгиба соединителя.
  5. После двойного щелчка по второму порту вы увидите, что появится соединитель. Если выделить его мышью, то при правильном соединении портов конечные точки соединителя должны подсветиться зелеными точками. Если нет, то точки не были помещены точно внутрь портов, и их нужно будет туда передвинуть.
    Уточненная модель

    увеличить изображение
    Рис. 1.39. Уточненная модель
  6. Запустите уточненную модель и понаблюдайте за ее работой. Сравните Рис. 1.40 с Рис. 1.32. На Рис. 1.40 видно, что запросы при длине очереди в 5 запросов теряются, и ошибки при этом не возникает. Модель по ограничению ёмкости входного буфера и значениям других параметров соответствует постановке задачи.

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

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod); 

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Артём Нагайцев
Артём Нагайцев
Россия