Программа имитационной модели банковского подразделения состоит из нескольких классов :
- Main – основной класс, содержащий все объекты программы
- Заявки – класс, по которому создаются экземпляры заявок(транзакты), перемещающиеся в логической цепи модели
- Сотрудник – класс-родитель классов Сотрудник1, Сотрудник2
- Сотрудник1, Сотрудник2 – классы ресурсов в модели, выполняющих роль сотрудников 1-го и 2-го отделов.
В проект также входят два эксперимента:
- Simulation — обычный – для моделирования в реальном и виртуальном режимах
- Optimization -оптимизационный — для проведения большого числа прогонов модели и нахождения оптимальных значений параметров
Рис.1 структура проекта модели
1.КЛАСС MAIN
В этом классе сосредоточены интерфейс программы и логика моделируемого процесса.
Рис.2 Логическая цепь БП(банковского подразделения)
Рис.3 Интерфейс-анимация в программе
-
Логическая цепь БР
Для построения данной подсистемы в модели использовалась библиотека моделирования процессов в палитре инструментов Anylogic.
Рис.4 Библиотека моделирования процессов
Заявки создаются в элементе , затем они продвигаются к , для фиксации момента времени, когда заявка поступила в систему. Здесь проверяется истинность условия:
(getHourOfDay() >= 8)&&(getHourOfDay() <= 19)
Если время дня соответствует интервалу с 8:00 до 20:00, то заявка следует дальше , иначе удаляется из системы
В блоках moveTo12 и заявка задерживается до тех пор, пока не переместиться в анимации на вот это расстояние . Далее в блоке производится проверка истинности условия:
(getHourOfDay() >= 9)&&(getHourOfDay() <= 12) – время моделирования должно попадать в интервал с 9:00 до 13:00
В случае истинности условия заявки отправляются в первый отдел на
В ином случае задерживаются в очереди на обработку до следующего дня.
После обработки заявка поступает в блок , в котором производиться проверка истинности условия:
getHourOfDay() >= 9 && getHourOfDay() <= 17 – текущий момент окончания обработки должен попадать в интервал времени с 9:00 до 18:00
Если это так, то заявка успешно покидает отдел №1 и отправляется в отдел № 2
В противном случае заявка становится в очередь на обработку в следующий день:
От отдела 1 к отделу 2 заявки перемещаются в анимации проходя расстояние
Перед отделом 2 установлен блок ,в котором проверяется истинность условия:
(getHourOfDay() >= 9)&&(getHourOfDay() <= 14)
Если оно истинно, то заявка поступает в текущую очередь на обслуживание в отделе2, иначе остаётся до следующего дня здесь
Все обработанные в отделе 2 заявки обязательно проходят блок следом за ним проверяется условие истинности в блоке
Если заявка успела обработаться в текущий рабочий день, то она следует по ветке с блоками
иначе через блок оказывается в очереди ожидания обработки в следующий день
1.2 Диаграмма состояний
Когда требуется выпустить заявки из очереди ожидания до следующего
дня определяется в диаграмме состояний
Рис.5 Диаграмма состояний
В первом состоянии «ХолдыЗакрыты» диаграмма находиться с 18:00 до 9:00, в состоянии «открытьХолды» заявки, находившиеся до этого в очереди, продвигаются на обработку в соответствующий отдел. В состоянии «state» диаграмма задерживается до окончания рабочего дня.
-
Параметры и агенты
Рис.6 Параметры
Рис.7 Популяции агентов (сотрудников)
Таблица 1. Параметры и популяции агентов
Параметр/переменная | Назначение | Тип | Начальное
значение |
variable1=parametr1 | Интенсивность заявок | double | 12.5 |
Variable2=parametr2 | Время обработки заявок(без перв.документов) | double | 0.5 |
Variable3=parametr3 | Время обработки заявок(с перв.документами ) | double | 1 |
Variable4=parametr4 | Заявок с первичными документами | double | 33.33 |
Variable5=parametr5 | Время верификации | double | 0.5 |
N1 | Число сотрудников 1-го отдела | int | 25 |
N2 | Число сотрудников 2-го отдела | int | 19 |
сотрудОтдел1 | Популяция агентов сотрудников 1-го отдела(используется для подсчёта загрузки 1-го отдела) | Сотрудник1 | 25 агентов |
сотрудОтдел2 | Популяция агентов сотрудников 2-го отдела (используется для подсчёта загрузки 1-го отдела) | Сотрудник2 | 19 агентов |
использованВремя | Параметр агента типов Сотрудник1 и Сотрудник2, содержит время занятости любого сотрудника из популяций сотрудОтдел1 и сотрудОтдел2 | double | 0 |
средВремИсп | Среднее арифметическое времён занятости (использованВремя)сотрудников 1-го отдела(берётся из параметра «использованВремя») | double | 0 |
2. Остальные классы в модели
2.1 КЛАСС «Заявки»
Рис.8
Содержит только картинку для отображения в анимации и два параметра:
- сотрудник – хранит ссылку на агент сотрудника, у которого обрабатывается заявка
-
времяОбрОтдел1 – хранит время обработки заявки в первом отделе. Если заявка 1-го типа (логически содержит первичный документ), то время обработки будет равно 1 час, если второго типа (нет первичного докумета), то время обработки 30 минут.
-
КЛАСС СОТРУДНИК
Является классом-родителем двух классов СОТРУДНИК1 и СОТРУДНИК2. Содержит только два параметра
Рис.9
Первый — для суммирования всего времени, которое сотрудник находился в состоянии занятости, а второй предназначен для отметки времени перед каждым обслуживанием заявок.
Классы «Сотрудник1» и «Сотрудник2» являются агентами двух популяций СотрудОтдел1 и СотрудОтдел2 соответственно.
-
-
Эксперименты
3.1 Simulation
Запускает агент «Мain» в режиме реального или виртуального времени и содержит элементы управления для установки параметров модели
Рис.10 Интерфейс эксперимента «Simulation»
В свойствах эксперимента было задано время остановки моделирования через 168 часов
3.2 Optimization
Находит при каких параметрах N1 (число сотрудников отдела1)и N2 (число сотрудников отдела2) загрузка отделов будет максимальной и обработается весь поток входящих в систему заявок.
Рис.11 Интерфейс эксперимента
График показывает историю поиска наилучшего решения – значения целевой функции на всех прогонах.
Числовые данные делятся условно на два столбца. В первом отображаются результаты по текущему прогону модели, а в соседнем правом наилучшее решение за пройденные этапы поиска оптимального значения целевой функции. Целевая функция и параметры поиска задаются в свойствах эксперимента.
Рис.12 Целевая функция поиска
Рис.13. Параметры поиска
После каждого этапа поиска найденное решение проверяется на соответствие заданным требованиям. В нашем случае отношение числа поступивших заявок к числу обработанных должно быть не менее 85 %
Рис.14 Показатель оценки найденного решения