logo
Моделирование систем / Моделирование систем / ModelEkzamen_1 / Практикум_AnyLogic_2

3.1.1. Определение расходов на обслуживание телефонных вызовов

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

Для вычисления прибыли введем формулу:

(3.1)

Здесь: t – текущее время, Incomе – стоимость обслуженных звонков, Penalties – начисленный штраф за не обслуженный вызов, equipmentPrice – функция, которая определяет стоимость облуживания задействованных каналов.

Введем в модель системы еще два параметра:

minPrice=0.12 у.е. (стоимость обслуживания звонка клиента)

penaltyPerCall=1 у.е. (стоимость штрафа, за не обслуженный вызов)

Используя палитру «Основная» введите в модель функцию callPrice с помощью инструмента «Функция». Эта функция позволит вычислить стоимость обслуженного звонка.

Аргумент функции t текущее время. Тип аргумента double.

Функция возвращает результат так же типа double.

Код функции:

return t<=1 ? minPrice : t*minPrice;

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

Для получения стоимости обслуживания каналов связи нужно в модель ввести табличную функцию, с помощью элемента палитры «Основная». Это функция equipmentPrice. Для ее создания нужно задать ее свойства в соответствии с рисунком 3.6.

Рис.3.6. Функция вычисления стоимости каналов

Для использования функции callPrice нужно знать время, затраченное на обслуживание заявки в процессоре service. Что бы вычислить это время введите в модель класс заявки Call, спецификация класса показана на рисунке 3.7.

Рис.3.7. Класс Call

Класс содержит два атрибута с доступом public. Первый атрибут tStart используется для фиксирования времени начала обслуживания вызова в процессоре service, а второй атрибут tFinish используется для фиксирования момента времени завершения обслуживания заявки в процессоре.

Настройте модель таким образом, что бы она учитывала прохождение по каналам системы заявки класса Call. Определите, используя атрибуты классы, время начала обслуживания вызова и время завершения обслуживания вызова в процессоре service.

При уничтожении заявки в элементе sink должен выполняться оператор, для подсчета стоимости обслуженного вызова:

Income+=callPrice(entity.tFinish-entity.tStart);

При уничтожении заявки отклоненного вызова должен выполняться код, для подсчета стоимости штрафов:

Penalties+=penaltyPerCall;

Создайте динамическую переменную для вычисления прибыли по формуле 3.1.

В результате модель примет вид, показанный на рисунке 3.8.

Рис. 3.8. Модель обслуживания вызовов

Измените эксперимент модели. Создайте интерфейс для изменения значения числа каналов N с помощью «бегунка». Диапазон значений от 1 до 100 каналов.

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